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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Протокол для Rs-485, Какой выбрать?
Kovrov
сообщение Mar 13 2008, 05:14
Сообщение #31


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



исходников на Code vision нету, но алгоритм рассказать могу.
Если ктото где то поправит - в сторону улучшения буду признателен...
Итак канал MODBUS RTU (со стороны приема кадра- режим слейв)
1) Задействую таймер прерывание на время в 1,5 символа (например OCx CTC mode)
2) UART RX работает всегда, при возникновению прерывания по UARTв любом случае обнуляем таймер.
3) Проверяем принятый байт на четность или 2й стоп, если ок помещаем в буфер но неболее N байт в буфере (256).
4) При появлении прерывания по таймеру (считаем что прошло 1,5 символа) начинаем разбор кадра...
смотрим адрес в первом байте буфера если сходится с адресом слейва разбираем кадр далее - считаем CRC, если не совпал адрес слейв или CRC16 -- вектор буфера на начало и ждем след перрывания по таймеру.
Вроде все!!
Насчет 1,5 символа - возможно нада подрихтовать!!!
Как уважаемые коллеги этот вариант?


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 13 2008, 14:13
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Kovrov @ Mar 13 2008, 10:14) *
4) При появлении прерывания по таймеру (считаем что прошло 1,5 символа) начинаем разбор кадра...
Неверно! Если пауза между символами больше 1,5-кратного интервала, но меньше 3,5-кратного, то данный фрейм нужно "фтопку". Об этом в стандарте явно прописано. Разбор фрейма нужно проводить, только если пауза тишины превысит 3,5-кратный интервал.
Начало фрейма тоже по 3,5-кратной паузе тишины ловится. А прием в буфер имеет смысл начинать, только если сетевой ID совпал с собственным (для slave) или с тем, что был в запросе (для master). Зачем нужно "чужие" пакеты принимать/разбирать-то? 07.gif Исключение составляет только broadcast ID, который всеми slave должен приниматься.
Кстати, постоянный прием с линии можно оставлять, только если локальное "эхо" отсутствует.
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Mar 14 2008, 05:57
Сообщение #33


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Да это все верно.. Именно поэтому и был выбран интервал 1,5
1) 1,5 символа взято из соображений ускорения синхронизации, выставив паузу в 3,5 нужно дополнительно стаховаться что я не попаду (например в момент включения) в середину передачи символа на уарт.. Можно поставить больше 1,5 - например даже лучше 1,75 тогда проблем в реализации 3,5 интервала для передатчика вообще не будет..
Далее...
Почему разбирать чужие пакеты?
после детекта IDLE я по прерыванию смотрю только на совпадение адреса ВСЁ!!!
CRC считаю только если адрес совпал - вы просто несовсем внимательно прочитали...
Вся перелесть - в том что алгоритм весит всего нескольо строк на АSМ


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Apr 28 2008, 21:30
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Помашу после драки кулаками:

Протокол серии ADAM-4000 - это страшный сон разработчика!!! Для каждой команды - свой формат. В том числе, разный символ-заголовок пакета!!! Очень много команд, у которых все различие подвариантов "на чтение" и "на запись" - только по длине! Форматы ответов тоже разные на разные команды! В отличие от MODBUS ASCII, сплошь и рядом всякие "левые" - не шестнадцатеричные - символы внутри пакета, так что скормить его целиком в процедурку типа "HEX2BIN" не выйдет!

А уж "контрольная сумма", представляющая собой просто сумму размером в 1 байт - это просто прелес-с-сть!

Уж простите, что я вот так вот "криком" - наболело...


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jun 6 2008, 00:17
Сообщение #35


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Рекомендую ознакомиться с дискуссией, где обсуждается связь между подтяжками, протоколом обмена и помехоустойчивостью. Modbus ASCII для RS-485 непригоден из-за низкой помехоустойчивости, oн предназначен для RS-232.
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 Текстовая версия Сейчас: 30th July 2025 - 16:52
Рейтинг@Mail.ru


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