реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> UART STM32F100Rxx и определение окончание приема "пакета" данных
alexdos
сообщение Mar 12 2013, 18:31
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(richie @ Mar 12 2013, 22:10) *
P.S. То что разделение по времени работает на сотнях устройств c PICами, не является доказательством
правильной реализации. Есть ли в том, PIcовском, драйвере диагностика того сколько было "ошибочных" пакетов?
В чем заключается "ошибочность" пакета?


СRC пакетов проверяется, в случае несовпадения CRC все NMEA по этой точке бракуются. Длительные тесты с частотой точек раз в 1 сек, пропусков не давали , можно делать вывод что все в порядке.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 12 2013, 19:55
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



можно делать выводы что вы их не нашли.
Я больше скажу с вашим подходом нет ни одного протокола в мире в котором есть или может быть надежный механизм определения конца прихода данныхsm.gif))

П.С.
- Вот цена 1 руб 15 копеек, хорошо бы чтобы была такая монета 1 руб 15 копеек
- Это очень неудобно
- Почему?
- но вот встретите вы цену 1 руб 45 копеек, что вы будете делать?
- Достану купюру 1 руб 45 копеек.

Это я к тому что странно в Универсальном Асинхронном Приемнике Передатчике требовать наличие спец сигнала определяющего что именно ваш приемник прислал полный пакет данныхsm.gif...
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Mar 13 2013, 04:35
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Golikov A. @ Mar 12 2013, 23:55) *
можно делать выводы что вы их не нашли.
Я больше скажу с вашим подходом нет ни одного протокола в мире в котором есть или может быть надежный механизм определения конца прихода данныхsm.gif))

Хых, RS-485 Modbus
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 13 2013, 14:57
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



но только потому что на каждое сообщение должен быть ответ....
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Mar 13 2013, 15:48
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Golikov A. @ Mar 13 2013, 18:57) *
но только потому что на каждое сообщение должен быть ответ....

угу, а если устройства нет на шине? кто ответит?
Другое дело, что с GPS-приемником не проходит вариант с тайм-аутом, поскольку не регламентирован в отличие от Modbus.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 13 2013, 16:56
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



в этом и фишка, что если устройство ответит то может быть только 1 сообщение в пакете, если не ответит то это 0 сообщений в пакете, но в любом случае по таймауту пакет закончен (в терминах топик стартера)

Причем мод бас бывает РТУ и АСКИ, и в аски символ конца сообщения другой, но опять же в силу максимальной длины пакета = 1 сообщение таймауты помогут.

Любой другой протокол работающий не по запрос- один единственный ответ в терминах топик стартера не имеет надежного механизма определения конца пакета... Причем я так понимаю даже те в которых есть спец сообщение о конце пакета, тоже, ибо разбор и анализ сообщения топик стартер не желает начать до получения надежного признака конца пакета...
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Mar 13 2013, 17:02
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата
Специального механизма отслеживания пауз в UART нет

Вообще то есть. Break бит называется.
Код
if(USART3->SR&USART_FLAG_LBD)                           // Break бит ?
  {
  USART3->SR&=~USART_FLAG_LBD;                        // Clear Break бит
  .....
  }
else
  {
  ....
  }

sm.gif
Go to the top of the page
 
+Quote Post
alexdos
сообщение Mar 13 2013, 20:29
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(Golikov A. @ Mar 13 2013, 20:56) *
Причем я так понимаю даже те в которых есть спец сообщение о конце пакета, тоже, ибо разбор и анализ сообщения топик стартер не желает начать до получения надежного признака конца пакета...

Да готов я разбор и аналазил в любое время делать, лиш бы это не занимало много времени и ресурсов. Мне помимо анализа еще уму дел нужно сделать. Просто предполагал что получив весь пакет данных, я буду иметь уже готовое к анализу, а не части анализируемого. Принять байт и положить в буфер дело не хитрое, и не требует много ресурсов. Ну да ладно, с GPS, там по сути все описано и на крайний случай есть конец строки.
Как быть мне тогда еще с потоком от GPRS модуля, в которого данные идут 0x0D 0x0A DATA 0x0D 0x0A в 98% ответов, 1.5% начального 0x0D 0x0A нет, а в входящих данных которые можно послать на него с сервера нет ничего вообще, что послал то и пришло. (щас сразу шквал пойдёт, что должен позаботится о том что отсылает сервер, но как говорится, что если может прийти без ничего, значит оно обезательно придёт)
Как быть еще с групой датчиков которые делают стороние фирмы, в которых четких правил окончания ответа нет.
"4.3.5 Скорость передачи данных 19200 Бод.
4.3.6 Для передачи байтов пакета используется стандартный UART настроенный на
скорость 19200, с одним стоп битом.
4.3.7 Передача каждого вида данных начинается со старшего бита. При передаче
многобайтных параметров порядок следования байт от младшего к старшему."

и вот как тут прикажете быть? есть четкое задание, работать с этим оборудованием. Вот и был выбран мною способ определения окончания приёма данных по таймауту.

Ежели есть эфективные способы анализа до того как прийдет все, я готов изучить их. И применить на практике. Укажите где можно почитать, как называются. Ведь всего знать одномоментно невозможно. А вот познавать и изучать, дело благородное.

Сообщение отредактировал alexdos - Mar 13 2013, 20:32
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 13 2013, 21:11
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(alexdos @ Mar 13 2013, 22:29) *
Да готов я разбор и аналазил в любое время делать, лиш бы это не занимало много времени и ресурсов. Мне помимо анализа еще уму дел нужно сделать. Просто предполагал что получив весь пакет данных, я буду иметь уже готовое к анализу, а не части анализируемого. Принять байт и положить в буфер дело не хитрое, и не требует много ресурсов.

При приёме байта можно не только складывать в буфер, но и принимать решение что с ним делать. Тогда строка nmea будет разобрана к моменту приёма символа перевода строки.

Цитата(alexdos @ Mar 13 2013, 22:29) *
Как быть мне тогда еще с потоком от GPRS модуля, в которого данные идут 0x0D 0x0A DATA 0x0D 0x0A в 98% ответов, 1.5% начального 0x0D 0x0A нет, а в входящих данных которые можно послать на него с сервера нет ничего вообще, что послал то и пришло.
Как быть еще с групой датчиков которые делают стороние фирмы, в которых четких правил окончания ответа нет.
"4.3.5 Скорость передачи данных 19200 Бод.
4.3.6 Для передачи байтов пакета используется стандартный UART настроенный на
скорость 19200, с одним стоп битом.


4.3.7 Передача каждого вида данных начинается со старшего бита. При передаче
многобайтных параметров порядок следования байт от младшего к старшему."

и вот как тут прикажете быть? есть четкое задание, работать с этим оборудованием. Вот и был выбран мною способ определения окончания приёма данных по таймауту.

Данные, что у вас по одному порту приходят...

Цитата(alexdos @ Mar 13 2013, 22:29) *
и вот как тут прикажете быть? есть четкое задание, работать с этим оборудованием. Вот и был выбран мною способ определения окончания приёма данных по таймауту.

В чём проблема, работать с таким оборудованием?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 14 2013, 03:27
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Не тут что-то не так.
Любой протокол на базе УАРТ должен иметь четко обозначенный признак конца сообщения.
Это может быть
1. количество (все сообщения имеют одну длинну)
1.2 внутри сообщения передается параметр с длинной сообщения в четно обозначенном месте

2. Конечные символы, четко определяется какой символ заканчивает сообщение

3. Временные паузы ( четко определяется что если нет передачи заданное время - это конец)

Также хорошим тоном является добавление контрольных сумм

Иначе нет никакой возможности разбирать и работать с такими сообщениями. Потому что любая помеха на линии, пропущенный байт или что-то еще может сойти за сообщение и наделать много бед.

Далее надо понимать что УАРТ строго говоря это соединение точка - точка, нельзя его подсоединять одной линией к нескольким устройствам. Это позволяют делать надстройки над уартом, типа РС485, РС422 но они четко определяют как происходить адресация на уровне протокола. И естественно нельзя на одну линию вешать устройства с несколькими протоколами, иначе сообщения от одного могут воздействовать на другие и вызывать ошибки.

Обычно алгоритм действий такой

1. Сбор по символьно сообщения (пихание байт в буфер) и анализ признаков конца(начала) сообщения (либо проверка что пришедший байт стоповый (стартовый), либо запуск таймера на таймаут, либо счетчик числа принятых байт). Это делается с каждым пришедшим байтом, но тут нет никаких вычислений просто 1-2 действия, поверки.

2. По найденному признаку конца сообщения (именно сообщения а не пакета, и признак описанный в протоколе формата данных, а не придуманный) делается пред анализ: проверка адресации если такая есть в протоколе, проверка контрольных сумм, и так далее... Ошибочные сообщения отбрасываются или генерят коды ошибок в зависимости от протокола. Это делается 1 раз на каждое собранное сообщение, это уже требует больше времени, но все равно это сделать необходимо, потому не надо жалеть о потраченных тактах.

3. Разбор, анализ, реакция на сообщение. Это делается 1 раз на каждое годное сообщение. Это самый долгий процесс, но он основной и ничего с ним не сделать.

Мне кажется что такой алгоритм действий самый правильны. А собирать сообщения по какому то придуманному признаку, а потом уходить монопольно в их анализ всех кучей, фактически заткнув уши от всех новых сообщений не верно. А если придет еще одно пока вы разбираете куда его? в топку?



главное все описанные действия вы все равно обязаны сделать. Все равно надо проверить сумму, все равно надо проверить критерий конца сообщения в пакете, отобрать сообщение, все равно надо будет проверить адресацию, и разобрать сообщение. никаких лишних действий алгоритм не делает. ПРосто он делает их в параллель с приемом сообщения и работой прочих функций...
Go to the top of the page
 
+Quote Post
richie
сообщение Mar 14 2013, 05:35
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 147
Регистрация: 5-07-04
Из: Обнинск
Пользователь №: 261



Цитата(alexdos @ Mar 12 2013, 22:31) *
СRC пакетов проверяется, в случае несовпадения CRC все NMEA по этой точке бракуются. Длительные тесты с частотой точек раз в 1 сек, пропусков не давали , можно делать вывод что все в порядке.

Мои наводящие вопросы про диагностику ошибок заключаются в том, чтобы вы задумались об автомате разбора пакетов.

P.S. Если совсем по-старинке, то есть четкий признак того, что всё передано, но это только в RS-232C.
Для начала можно почитать тут: http://www.gaw.ru/html.cgi/txt/interface/rs232/index.htm.
Только, думаю что у вашего девайса нет таких сигналов, у передатчика, скорее всего, тоже нет.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 14 2013, 05:48
Сообщение #27


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



разговор ни о чём...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 14 2013, 06:05
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(richie @ Mar 14 2013, 09:35) *
P.S. Если совсем по-старинке, то есть четкий признак того, что всё передано, но это только в RS-232C.


там признак что есть данные для передачи, и признак что есть место для приема. Но строго говоря наличие или отсутствие данных для передачи не означает что все передано или нет. Все же формат определяется протоколом на уровне выше чем определен UARTом или RS232/422/485.

Цитата(demiurg_spb @ Mar 14 2013, 09:48) *
разговор ни о чём...

в целом да, просто все нашли возможность потоптать, и увлеклись этим процессом...
Go to the top of the page
 
+Quote Post
alexdos
сообщение Mar 14 2013, 08:38
Сообщение #29


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Наверное я не так изначально поставил вопрос. Но топтания вокруг да около, дали мне нужный ответ. Все уже чудестным образом работает. Как указал Golikov A.
1. Сбор по символьно сообщения (пихание байт в буфер) и анализ признаков конца(начала) сообщения (либо проверка что пришедший байт стоповый (стартовый), либо запуск таймера на таймаут, либо счетчик числа принятых байт). Это делается с каждым пришедшим байтом, но тут нет никаких вычислений просто 1-2 действия, поверки.
3. Временные паузы ( четко определяется что если нет передачи заданное время - это конец)

После появления признака конца ( Временная пауза), производится разбор полученных данных. Проверка целостности (соответсвию NMEA, CRC этих сообщений.)

"Далее надо понимать что УАРТ строго говоря это соединение точка - точка, нельзя его подсоединять одной линией к нескольким устройствам."
Вы видели как устроена шина MDB в торговых автоматах ? так там можно сказать все соеденено через "монтажное ИЛИ". И все прекрасно уживается, и конец передачи тоже "Временные паузы".
В общем спасибо всем за конструктивную критику.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 14 2013, 15:28
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну хотелось бы разделить лавры с другими участниками форума которые советовали вам тоже что и я, но другими словами, а иногда и теме же.
Дальше порадоваться за то что все наладилось.

Ну и спросить как же все таки выглядит эта шина, я ее не видел ни разу, я не занимался торговыми автоматами, но мне правда любопытно.
Монтажное или я могу понять, это как в РС485, когда все слушают а 2 разговаривают, но как решается проблема разности протоколов? Ведь если один передает, другие это слышат, и надо чтобы то что слышат не вызвало ошибок, как то это должно решаться...
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 10:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016