|
|
|
сниффер ком порта |
|
|
|
Sep 22 2016, 10:40
|
Гуру
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244
|
QUOTE (Lagman @ Sep 22 2016, 13:16) и если T1.5 почти никто не проверяет Что очень зря, ибо это есть механизм отсева сбоев и быстрого восстановления фреймовой синхронизации. QUOTE то с T3.5 главное не начинать передачу пакета (запрос или ответ) раньше этого момента и можно "терпеть" с передачей вплоть до истечения времени ожидания ответа. Терпеть-то можно, если в конкретном случае общая скорость обмена не волнует, но при требовании быстрого обмена все эти таймауты катострофически снижают пропускную способность. В частном случае, когда конкретные реализаторы протокола "плют", "терпят" и медленно обмениваются пакетами в которых паузы между фреймами определяются не протоколом а неспешым темпом обмена и меееедлееенннооо реагирующими на запросы слейвами, софтовый снифер под WIN как-бы ваделяет фреймы без проблем. Но при полноскоростном обмене шансов под WIN никаких .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 22 2016, 12:26
|
неотягощённый злом
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643
|
Добрый день коллеги! Захотелось обсудить вопрос "продувки шины" перед выдачей пакта в линию сразу после включения драйвера RS485 на передачу.
Я обычно формирую требуемую паузу на шине с включенным передатчиком до и после передачи пакта. Отсюда получается дыра межу фреймами в 2 раза больше, т.к. и мастер и слейв делают это. Естественно, скорость передачи из-за этих пауз сильно снижается.
У меня есть сомнения, что если этого не делать можно наступить на грабли. Поясню.
1) Мастер хочет передать и не знает был ли шум в линии - следовательно надо "продуть" до, ну а после само-собой разумеется продувать необходимо чтобы слейв словил тишину.
2) Слейв хочет ответить на принятый запрос и тоже не знает про то, был-ли шум на линии с момента приёма пакета до переключения драйвера на передачу. Ведь по окончании паузы сформированной мастером, проходит некоторое время на обработку пакета и в это время линия висит либо в воздухе, либо растянута слабенькими резисторами и помехи могут дать ложный старт-бит. Пока писал это осознал, что если помеха в этот момент случилась, то продувка линии может уже и не спасти ситуацию, т.к. мастер может принять мусор, после которого правильный ответ слейва уже может быть и не валиден. Отсюда напрашивается вывод, что слейв должен мгновенно отвечать мастеру после приёма валидного запроса, либо сразу включать свой передатчик и заниматься подготовкой ответа. Это несколько затруднительно, т.к. в моей текущей реализации это не реализовано (считать CRC на лету, сранивать первый байт запроса со своим адресом и даже может быть готовить ответ во время паузы, формируемой мастером). Кто-нибудь так уже сделал?
Давайте порассуждаем над этим увлекательным занятием - реализацией идеального MODBUS-RTU MASTER/SLAVE!
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Sep 22 2016, 12:47
|
Профессионал
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045
|
Цитата Мастер хочет передать и не знает был ли шум в линии - следовательно надо "продуть" до, ну а после само-собой разумеется продувать необходимо чтобы слейв словил тишину. Не нужно ни чего продувать. когда нет драйвера на линии там лог "1". Линяя RS485 должна быть подтянута (А к +V, B k GND). посмотрите осциллографом перевод из приема в передачу и через какое время начинает бит старт бит вылазить. Работает на скоростях от 9600 до 921600. По окончании ни чего мастеру дуть не надо... после передачи последнего байта я снимаю передачу и перехожу на прием. линия остается без драйвера. Подтягивающие резисторы обеспечат слейву лог "1" - это и будет тишина. Если кто боиться, что в лини без драйвера есть шум... или может возникнуть шум.... нет там шумов. Подтяжка делает сво дело. На длинной линии можно словить наводку, электромагнитную помеху.... НО.... в рс485 длинная линия тянеться витой парой.... наведенный импульс в А+ таже будет и в B-, в итоге разность A и B сохраниться как без помехи. Забудте про всякие продувки..... слейв как только принял пакет и обработал без всяких пауз и продувок может отвечать.
|
|
|
|
|
Sep 22 2016, 13:08
|
Профессионал
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045
|
Цитата(demiurg_spb @ Sep 22 2016, 17:51) Мне бы Вашу непоколебимую уверенность! Попробуйте поработать с силовой преобразовательной техникой... Работал..... обвязывали 485-ым трансформаторные подстанции, распределительные подстанции, дизельные генераторы... а также на объектах с высоким ВЧ излучением. ps была проблема однажды.... сильное ВЧ излучение.... и оно лезло везде.... решили проблему полной опторазвязкой RS485 мастера и слейва. Но ни каких продувок не делали. Цитата линия висит либо в воздухе, либо растянута слабенькими резисторами в воздухе нельзя её вешать.... а резисторы... растяните не слабенькими... 5 кОм... или 2.4 кОм. Цитата(demiurg_spb @ Sep 22 2016, 18:01) Кто сказал, что помеха не в состоянии 4 раза за бит случиться? Я на это никак не могу не рассчитывать... А реально были такие случаи? если предположить, что брошенная линия постоянно "шумит".... то получается все слейвы на линии постоянно получают мусор по уарту... т.е. постоянно срабатывает прерывание поприему, обработчик байт кудато помещает, запускает таймер на 3.5 символа (а некоторые ещё и црц налету считают).... это же сколько работы процессору - постоянно шум анализировать... а если уартов 4? Не должно быть шумов и всякого мусора в 485. если есть - нужно над линией работать.
|
|
|
|
|
Sep 22 2016, 13:50
|
Гуру
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244
|
QUOTE (demiurg_spb @ Sep 22 2016, 15:26) Я обычно формирую требуемую паузу на шине с включенным передатчиком до и после передачи пакта. Увы, для 485 пауза есть неизбежное зло. Величина паузы зависит от способа выделения фрейма и при MODBUS самый плохой вариант c точки зрения величины пауз - 1,5 байта в начале и 3,5 байта в конце. При байтстафинговом фреймере - 1 байт в начале, а в конце не нужно. QUOTE У меня есть сомнения, что если этого не делать можно наступить на грабли. Поясню. Ваши сомения несостоятельны. QUOTE Давайте порассуждаем над этим увлекательным занятием - реализацией идеального MODBUS-RTU MASTER/SLAVE! Из дерьма конфетку не сделаешь, а как максимально соблюсти - написано выше.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 22 2016, 14:07
|
Гуру
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244
|
QUOTE (juvf @ Sep 22 2016, 15:47) Не нужно ни чего продувать. когда нет драйвера на линии там лог "1". Линяя RS485 должна быть подтянута (А к +V, B k GND). За такую "подтяжку" криворуким дизайнерам надо отрывать гениталии. Она КАТОСТРОФИЧЕСКИ гробит дальность передачи. Есть более-менее приемлимые решения в виде использования Failsafe приемником со смещенным уровнем. Но на них тоже полагаться нельзя, поскольку запас для помехи по минммуму. Их использование есть хороший способ уменьшить помехи, но не исключить. QUOTE (juvf @ Sep 22 2016, 15:47) Если кто боиться, что в лини без драйвера есть шум... или может возникнуть шум.... нет там шумов. Подтяжка делает сво дело. На длинной линии можно словить наводку, электромагнитную помеху.... НО.... в рс485 длинная линия тянеться витой парой.... наведенный импульс в А+ таже будет и в B-, в итоге разность A и B сохраниться как без помехи. Помеха в длинной линии есть уже и без всяких наведенных - просто колебательный процесс при включении и выключении передатчика. Вот такой сюрприз для любителей растяжек НИКОГДА не работавших с длинными реальными линиями. Это раз. А два, это то, что подавление синфазных далеко не 100% и нормируется только в достаточно узком диапазоне синфазных, а синфазные помехи в десятки и сотни вольт, это тоже реальность длинных линий. Никакие опторазвязки от помех на 100% не спасают, ибо любая развязка имеет паразитную емкость, через которую прекрасно пролезают импульсы с высокой энергией. Гальваническая развязка это прежде всего защита от выхода из стоя, защита от помех с пологими фронтами, но не защита от любых помех вообще.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|