Вверх ↑
Этот топик читают: Гость
Ответов: 10
Рейтинг: 0
#1: 2011-05-18 16:33:49 ЛС | профиль | цитата
Добрый день. Возникла такая проблема. Я через ком порт связываюсь с ГПС, прием данных идет от него хорошо (спасибо Konst'у)
вот его схема
code_24013.txt
но возникла некоторая неприятная вещь. Формат строки от приемника выглядит так $GPRMC,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh<CR><LF>
+ другие данные ($GPGGA, $GPGSA, $GPGSV) все строки имеют различную длину, но все заканчиваются на <CR><LF>
После блока Konst'а, я отсеиваю данные. После отсеивания идут данные без первого слова (отсев происходит по ","), но через некоторое время работы программы в отсеиваемых строках появляется первое слово, которого не должно быть, и длины строк начинают сильно варьироваться.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#2: 2011-05-18 16:40:41 ЛС | профиль | цитата
Во-первых, схемы нет. Во-вторых, пишите дамп с порта БЕЗ ОБРАБОТКИ сразу в файл и на диск, потом из файла имитируйте получение данных с приёмника через считывание блоками из файла и смотрите, где отсев якобы не происходит. Найдя такой блок данных последовательно просматривайте через Debug содержимое всех отвечающих за это потоков, найдёте ошибку.
карма: 1

0
Ответов: 8959
Рейтинг: 824
#3: 2011-05-18 16:41:47 ЛС | профиль | цитата
MagistrTot, схемка не выложилась, да и пример строки для разбора маловат, а объяснение несколько туманно, чтобы сделать выводы
карма: 19

0
Ответов: 1321
Рейтинг: 37
#4: 2011-05-18 16:44:51 ЛС | профиль | цитата
[flood]
Леонид писал(а):

Леонид, это не сочетаемые друг с другом смайлы [/flood]
карма: 0

0
Ответов: 10
Рейтинг: 0
#5: 2011-05-18 16:48:17 ЛС | профиль | цитата
code_24016.txt
со схемой произошел какой то глюк, перекладываю
карма: 0

0
файлы: 2code_24013.txt [2.9KB] [220], code_24016.txt [2.7KB] [231]
Ответов: 1321
Рейтинг: 37
#6: 2011-05-18 16:48:33 ЛС | профиль | цитата
-=DEL=-
карма: 0

0
Ответов: 10
Рейтинг: 0
#7: 2011-05-18 17:02:31 ЛС | профиль | цитата
Roma, скажи в какой раздел писать, а то я тут совсем недавно.

вот примеры строк
$GPGGA,125559.844,5627.3743,N,05348.1473,E,1,03,4.2,142.5,M,-1.0,M,,0000*4E
$GPGSA,A,2,15,18,26,,,,,,,,,,4.3,4.2,1.0*3A
$GPGSA,A,1,,,,,,,,,,,,,,,*,,N*77
$GPGSA,A,2,15,18,26,,,,,,,,,,4.3,4.2,1.0*3A
$GPGGA,125743.841,5627.3758,N,05348.1555,E,1,03,4.2,142.5,M,-1.0,M,,0000*4D
$GPGSV,3,3,12,17,09,180,21,05,06,243,,27,02,291,20,03,01,032,*75
$GPGSV,3,2,12,28,69,216,,07,37,112,,19,27,047,,11,14,097,*7F
$GPGSV,3,1,12,26,55,277,29,15,24,312,35,18,04,351,36,08,69,109,*71
$GPRMC,$GPGGA,125558.844,5627.3745,N,05348.1470,E,0,00,,142.5,M,-1.0,M,,0000*60
$GPRMC,125556.844,V,5627.$GPGGA,125557.844,5627.3745,N,05348.1470,E,1,03,4.2,142.5,M,-1.0,M,,0000*45

$GPGGA, $GPGGA, $GPGSV, $GPRMC в строке должны встречаться только один раз, в двух последних строках имеется это несоответствие
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#8: 2011-05-18 17:24:29 ЛС | профиль | цитата
MagistrTot, посмотри поиском здесь на форуме есть разбор строки GPS
$GPRMC - Сообщение RMC содержит pекомендуемый минимум навигационных данных - информацию о времени, местоположении, курсе и скорости, передаваемые навигационным GPS приёмником. Контрольная сумма обязательна для этого сообщения, интервалы передачи не должны превышать 2 секунды.
$GPGGA - Сообщение содержит GPS данные о местоположении, времени местоопределения, качестве данных, количестве использованных спутников, HDOP (фактор ухудшения точности плановых координат), информацию о дифференциальных поправках и их возраст.
$GPGLL - Сообщение содержит GPS–данные о географической широте, долготе и времени определения координат.
$GPGSA - В этом сообщении отображается режим работы GPS приёмника, параметры спутников, используемых при решении навигационной задачи, результаты которой отображены в сообщении $GPGGA и значения факторов точности определения координат.
$GPGSV - В сообщении указывается количество видимых спутников, их номера, возвышение, азимут, и значение отношения сигнал/шум для каждого из них.
$GPVTG - Сообщение VTG передает текущее истинное направление курса (COG) и скорость относительно земли (SOG).
$GPZDA - Сообщение ZDA содержит информацию о времени по UTC, календарный день, месяц, год и локальный часовой пояс.

Если лень искать в Поиске - ищи протокол в инете.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 10
Рейтинг: 0
#9: 2011-05-18 17:39:33 ЛС | профиль | цитата
Tad,этих протоколов существует еще больше, их разбор я уже знаю наизусть и могу с уверенностью сказать какая ошибочная, а какая нет.
меня больше интересует проблема вывода неправильной строки через некоторое время работы программы, такое ощущение, что после заполнения памяти перезапись старых значений происходит как то некорректно и из за этого получается смещение, которое можно заметить в последних двух строчках моего предыдущего поста.
карма: 0

0
Ответов: 8959
Рейтинг: 824
#10: 2011-05-18 17:40:12 ЛС | профиль | цитата
MagistrTot, читать по два байта из буфера порта преобразование их в HEX зачем?, таймер выдаёт события не через 3 мсек как Вы думаете, а через 1/64 сек (может поэтому часть информации теряется), обнуление StrCat при такой схеме лишнее.
карма: 19

0
Ответов: 10
Рейтинг: 0
#11: 2011-05-18 17:49:05 ЛС | профиль | цитата
Леонид, я эту схему честно взял из одной темы, где обсуждали GPS. как либо изменить схему я так и не сумел, преобразование в HEX для чего я не знаю, нужно спросить того, кто составлял ее.
карма: 0

0
Ответов: 8959
Рейтинг: 824
#12: 2011-05-18 18:09:13 ЛС | профиль | цитата
MagistrTot, а в части скорости чтения порта? 2*64 = 128 байт в секунду -- достаточна такая скорость?
карма: 19

0
Ответов: 10
Рейтинг: 0
#13: 2011-05-18 18:25:43 ЛС | профиль | цитата
Обычно битрейт в GPS программах принимается за 4800 или 9600, т е должно быть 600 или 1200 Байт в секунду.
С теми параметрами что в схеме, прием данных от GPS идет нормально, единственная проблема которая возникает описал выше.
увеличение интервала срабатывания таймера лишь увеличивает время наступления появления ошибочных строк.
Когда искал проблему, то я добавил очистку памяти во все элементы схемы, где это было возможно, и после очистки памяти на некоторое время появление ошибочных строк прекращалось, но все равно через некоторое время эти строки появлялись. Так что тут скорее всего проблема с хранением.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#14: 2011-05-18 18:58:04 ЛС | профиль | цитата
MagistrTot, Последуйте моему совету выше, исключите из схемы всё, в чём уверены. Вместо портов - поток дампа из файла или исскуственные строки. Дамп трафика с порта в файл делать обязательно, вдобавок поможет проверить схему всем посторонним в действии.
карма: 1

0
Ответов: 8959
Рейтинг: 824
#15: 2011-05-18 19:40:13 ЛС | профиль | цитата
MagistrTot,
MagistrTot писал(а):
т е должно быть 600 или 1200 Байт в секунду
а схема принимает максимум 128 байт в секунду, не прочитанные данные вместе с запланированным разделителем уходят в небытиё, отсюда и Ваши неприятности.
Надо не увеличивать интервал таймера, а увеличивать количество читаемых байт до 1200/64=20, т. е. установить не 2, а 20 байт и обрабатывать не по 2 байта, а по 20.
карма: 19

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)