1

Тема: RS232: вопрос по обработке сообщений

Задача такая: некое устройство (навигатор) шлет пакеты по RS232 (длина пакета = 36 байт), нужно выдернуть интересующие слова (4 байта) из этого пакета (всегда на фиксированных позициях) и отправить по CAN.

Вопрос: как лучше сделать?

Сработает тупой вариант (проверяем длину принятых данных, если больше N => берем нужное нам и шлем в CAN) или потребуется что-то сложнее (ждать признак "начало пакета", потом отсчитывать N байт и т.п.)

И вопрос: когда очищается буфер приема UART? Пример: в порт приходит "АБВГД"...пауза...  "ЕЖЗИК". Это все ляжет в D0..9?  или D0..4 ??   Или вообще будет десять раз по D0 ??

Спасибо!

PS: что за данные приходят и что нужно передавать в CAN - на картинке.

Вложений в сообщении

ubx_nav.png, 11.21 кб, 525 x 453
ubx_nav.png 11.21 кб, скачивался 253 раз, последний раз 2019-02-20 

ubx_nav.png, 10.24 кб, 525 x 327
ubx_nav.png 10.24 кб, скачивался 266 раз, последний раз 2019-02-20 

2

Re: RS232: вопрос по обработке сообщений

О каком контроллере речь?

Если о CANNY 5.X xxxx, то:
- длина буфера приема UART = 32 байта, не поместившиеся в буфер данные отбрасываются.
- признак наличия сообщения в приемном буфере появляется по таймауту, таймаут по умолчанию равен 1 ms и может быть изменен через соответствующий регистр драйвера UART.
Таким образом, выделение ваших данных из посылки UART, при условии, что все пришедшие сообщения четко разделены по времени, не имеют пауз между байтами внутри сообщения, корректны и имеют одинаковый формат, может выглядеть так:

Вложений в сообщении

uart.png, 39.31 кб, 539 x 701
uart.png 39.31 кб, скачивался 287 раз, последний раз 2019-02-20 

3

Re: RS232: вопрос по обработке сообщений

Спасибо!
Да, контроллер 5.2 (сорри, забыл указать).
Правильно я понял, что Canny ждет 1мс (или сколько укажем) после крайнего байта.. если есть новый байт, то дописывает в текущий буфер. Если нету, то считает прием завершенным... а следующий начинает с D0. Верно?

4

Re: RS232: вопрос по обработке сообщений

Да, правильно.

5 (21-02-2019 20:13:37 отредактировано Mr. Y)

Re: RS232: вопрос по обработке сообщений

Не получается sad Что-то с чтением UART явно - передается мусор просто, такое впечатление что случайные байты из пакета.
Сами интерфейсы в норме - делал "эхо" в RS232 (тестировал с ПК) и передачу одного байта в CAN (из RS232) - все ок.
Константы по CAN тоже отлично доходят.

Таймаут пробовал от 1мс до 30 мс - результат тот же. Если передатчик подключить к ПК, то  в терминал пакеты приходит одним куском.

В общем нид хелп sad

Вложений в сообщении

Иконка вложения not_wrk.png 120.62 кб, скачивался 96 раз, последний раз 2019-02-21 

Иконка вложения not_wrk1.png 125.14 кб, скачивался 101 раз, последний раз 2019-02-21 

6

Re: RS232: вопрос по обработке сообщений

Пришлите, пожалуйста, скриншот CANNY CAN/LIN-monitor на котором будет видно хотя бы несколько сообщений переданных в CAN вашей диаграммой в ходе приема сообщений по UART и приведите соответствовавшие им сообщения UART.

7

Re: RS232: вопрос по обработке сообщений

у меня Canny 5.2 - не думаю, что он может еще что-то мониторить (UART к GPS, CAN к логгеру).

В итоге сильно снизил скорость передачи и частоту пакетов (на источнике), заработало вот в таком варианте

Вложений в сообщении

Иконка вложения canny_works_slow.png 156.63 кб, скачивался 141 раз, последний раз 2019-02-22 

8

Re: RS232: вопрос по обработке сообщений

если подскажете как модифицировать диаграмму, чтобы отправлять второй пакет по CAN (содержащий время и точность) - буду премного благодарен!

9

Re: RS232: вопрос по обработке сообщений

Вариант решения во вложении. Главное правильно интерпретировать данные: они передаются в RS-232 младшим байтом вперед, т.е. байты Time of week получены по RS-232 в виде F0 71 D2 11, что представляет собой число 0x11D271F0 = 299004400 (dec).
Диаграмма протестирована на столе с настройками RS-232 57600-8-N-1 (подключался к ПК) и настройками CAN 1M (передача в CAN и прием CAN(LIN)-monitor-ом). Работает корректно без использования каких-либо тамаутов UART.

Вложений в сообщении

Иконка вложения rs232_to_can.cfd 3.85 кб, скачивался 257 раз, последний раз 2019-02-25