-
- Ну написано же все в протоколе: пауза между пакетами составляет 3.5 байта. Откуда адовы 10мс взялись? Даже на 9600 бод будет 3мс... Eddy_Em(1068 знак., 06.01.2024 19:03)
- Нет! После окончания очередного успешного обмена мастер должен выждать не менее 10мс перед посылкой
следующего запроса другому слэйву. Все забывают, что ведомый
обрабатывает пакеты не только ведущего, но и других ведомых, и ему
надо дать время очухаться. - IBAH(06.01.2024 18:44 - 18:47)
- Вы точно себе не противоречите? Цитата: Argon(215 знак., 06.01.2024 18:46)
- чуть чуть оговорился... в настройках фирменных модбас клиентов, это
чаще всего называется интервал запросов IBAH(1 знак., 06.01.2024 18:51, картинка)
- Дяденьки, вы оба не правы :-) STX это признак начала фрейма/кадра. В Modbus ASCII для STX зарезервирован код 0x3A, а в
Modbus RTU STX это пауза в передаче определенной длительности (3,5
символа или фиксированная). То бишь для устройства формирующего
запрос пауза STX это необходимая преамбула передачи запроса, а для принимающего устройства пауза STX это
признак для сброса счетчика буфера и начала приема нового фрейма. reZident(387 знак., 06.01.2024 19:06)
- Не надо придираться к форме. У данного слэйва признак начала кадра
пауза 10мс, а не мифические 3.5 символа. Все забывают что этот STX
надо считать от момента успешного приема мастером. Кстати,
правильные слэйвы взводят автомат приема сразу после успешного
приема любого кадра. - IBAH(06.01.2024 19:09)
- Да пофиг на длительность, когда она заранее договорена. И пофиг на
успешность приема. Любая пауза свыше оговоренной служит для принимающей стороны началом фрейма (STX), а для
передающей стороны необходимой преамбулой передачи. Надеюсь, вы понимаете, что на разных этапах обмена
мастер и слейв становятся попеременно то передающим, то принимающим
устройством и STX является необходимой преамбулой для обеих сторон? - reZident(06.01.2024 19:13)
- Я вам верю как родному! - IBAH(06.01.2024 19:28)
- Да пофиг на длительность, когда она заранее договорена. И пофиг на
успешность приема. Любая пауза свыше оговоренной служит для принимающей стороны началом фрейма (STX), а для
передающей стороны необходимой преамбулой передачи. Надеюсь, вы понимаете, что на разных этапах обмена
мастер и слейв становятся попеременно то передающим, то принимающим
устройством и STX является необходимой преамбулой для обеих сторон? - reZident(06.01.2024 19:13)
- Не надо придираться к форме. У данного слэйва признак начала кадра
пауза 10мс, а не мифические 3.5 символа. Все забывают что этот STX
надо считать от момента успешного приема мастером. Кстати,
правильные слэйвы взводят автомат приема сразу после успешного
приема любого кадра. - IBAH(06.01.2024 19:09)
- ага, спасибо, ну вот теперь кое какая ясность имеется! - Argon(06.01.2024 18:52)
- Понятно, если только вы до сих пор не путаете начало фрейма (STX) и
"защитный интервал" перед выдачей ответа слейвом. Вот как это
описано для какого-то ПЧ ВЕСПЕР reZident(2 знак., 06.01.2024 19:25, картинка, картинка)
- Не, это я не путаю, но ваша картинка породила дополнительный
вопрос: что такое 3.5 байт? Не STX же, верно? Или все же это STX
ответа слейва? Тогда почему эти 3.5 байт не обозначены перед
запросом мастера? Argon(111 знак., 06.01.2024 20:10)
- 3,5 символа в конце фрейма это END - завершение фрейма. "Защитный
интервал" нужен для выравнивания разбежки таймингов у master и
slave. reZident(1095 знак., 06.01.2024 20:57, ссылка)
- Спасибо. Совпадает с моим мировоззрением на этот счёт. Отмечу, что
в часть времени STX, желательно на время не менее 1.5 байтовых
интервала, заранее включать драйвер линии ведомого - чтобы
обеспечить контролируемое занятие линии перед стартовым битом
адреса. - Nikolay_Po(06.01.2024 22:08)
- "Контролируемое занятие" не требуется, если линия связи согласована
и не болтается без растяжки (у мастера). То бишь включение
трансивера RS485 на слейве для передачи ответа не вызывает
переходный процесс, который идентифицируется приемником мастера как
стартовый бит первого символа фрейма. - reZident(06.01.2024 22:23)
- Я моделировал помехоустойчивость для варианта с включенным
драйвером и без драйвера, только с терминаторами. Не в разы, но
разница по блокировке тока помехи есть. - Nikolay_Po(06.01.2024 22:30)
- Ну дык понятно, что сопротивление ключей включенного на передачу
трансивера и сопротивление резисторов растяжки заметно отличается! - reZident(06.01.2024 22:31)
- Просто я насмотрелся на китайские погремушки - адаптеры и прочие
устройства с 485м. Делаешь скорость, скажем, 230400. И всё. связи
нет. Драйвер включается слишком поздно. Стартовый бит не проходит.
Поэтому включение драйвера заранее, до передачи - маст хэв.
Насколько заранее? А почему бы и не 1.5 символьных интервала? Как
раз, чтобы сброс не верного фрейма RTU успел пройти, если до
занятия, в линию попала помеха (если строго следовать стандарту). - Nikolay_Po(06.01.2024 22:40)
- Поздравляю! Вы преамбулу STX "изобрели", но не совсем правильно ее
размер выбрали :-) reZident(658 знак., 06.01.2024 23:25, картинка)
- Спасибо. То есть, вы хотите сказать, что удержание линии дольше, чем 3.5 символьных интервала более подходящее? Почему бы и нет? В общем, согласен. Nikolay_Po(1068 знак., 07.01.2024 00:54)
- Поздравляю! Вы преамбулу STX "изобрели", но не совсем правильно ее
размер выбрали :-) reZident(658 знак., 06.01.2024 23:25, картинка)
- Просто я насмотрелся на китайские погремушки - адаптеры и прочие
устройства с 485м. Делаешь скорость, скажем, 230400. И всё. связи
нет. Драйвер включается слишком поздно. Стартовый бит не проходит.
Поэтому включение драйвера заранее, до передачи - маст хэв.
Насколько заранее? А почему бы и не 1.5 символьных интервала? Как
раз, чтобы сброс не верного фрейма RTU успел пройти, если до
занятия, в линию попала помеха (если строго следовать стандарту). - Nikolay_Po(06.01.2024 22:40)
- Ну дык понятно, что сопротивление ключей включенного на передачу
трансивера и сопротивление резисторов растяжки заметно отличается! - reZident(06.01.2024 22:31)
- Я моделировал помехоустойчивость для варианта с включенным
драйвером и без драйвера, только с терминаторами. Не в разы, но
разница по блокировке тока помехи есть. - Nikolay_Po(06.01.2024 22:30)
- "Контролируемое занятие" не требуется, если линия связи согласована
и не болтается без растяжки (у мастера). То бишь включение
трансивера RS485 на слейве для передачи ответа не вызывает
переходный процесс, который идентифицируется приемником мастера как
стартовый бит первого символа фрейма. - reZident(06.01.2024 22:23)
- Спасибо. Совпадает с моим мировоззрением на этот счёт. Отмечу, что
в часть времени STX, желательно на время не менее 1.5 байтовых
интервала, заранее включать драйвер линии ведомого - чтобы
обеспечить контролируемое занятие линии перед стартовым битом
адреса. - Nikolay_Po(06.01.2024 22:08)
- 3.5 байта это минимальное требование стандарта. У Веспера,
неснижаемый дополнительный защитный интервал 2мс. Так сделали.
Может, чтобы гарантировать, что успеют ответить. Например,
внутренний цикл обработки 1мс. Приём-ответ - 2мс минимальная пауза
до ответа после защитного интервала. Nikolay_Po(199 знак., 06.01.2024 20:12)
- reZident уточнил для тупых что STX - это преамбула. Тупые просят
дополнительного уточнения: 3.5 байт - это STX? Почему "преамбула"
находится после запроса мастера? :)) - Argon(06.01.2024 20:19)
- Меньше надо смотреть всякие стандарты, больше полагаться на здравый
смысл. Алгоритм работы следующий IBAH(392 знак., 06.01.2024 20:55)
- В алгоритме мастера стоит добавить обработку исключений (пришло меньше байт и это "exception"). Можно налету, а можно по таймауту ответа. И обработку "кто-то орет в линию", как минимум на время до появления 3,5char тишины. - Cкpипaч(06.01.2024 21:33)
- Алгоритм слэйва IBAH(303 знак., 06.01.2024 21:02)
- Меньше надо смотреть всякие стандарты, больше полагаться на здравый
смысл. Алгоритм работы следующий IBAH(392 знак., 06.01.2024 20:55)
- reZident уточнил для тупых что STX - это преамбула. Тупые просят
дополнительного уточнения: 3.5 байт - это STX? Почему "преамбула"
находится после запроса мастера? :)) - Argon(06.01.2024 20:19)
- 3,5 символа в конце фрейма это END - завершение фрейма. "Защитный
интервал" нужен для выравнивания разбежки таймингов у master и
slave. reZident(1095 знак., 06.01.2024 20:57, ссылка)
- Не, это я не путаю, но ваша картинка породила дополнительный
вопрос: что такое 3.5 байт? Не STX же, верно? Или все же это STX
ответа слейва? Тогда почему эти 3.5 байт не обозначены перед
запросом мастера? Argon(111 знак., 06.01.2024 20:10)
- В стандарте это нарисовано вот так. Cкpипaч(1 знак., 06.01.2024 19:05, картинка)
- Понятно, если только вы до сих пор не путаете начало фрейма (STX) и
"защитный интервал" перед выдачей ответа слейвом. Вот как это
описано для какого-то ПЧ ВЕСПЕР reZident(2 знак., 06.01.2024 19:25, картинка, картинка)
- Дяденьки, вы оба не правы :-) STX это признак начала фрейма/кадра. В Modbus ASCII для STX зарезервирован код 0x3A, а в
Modbus RTU STX это пауза в передаче определенной длительности (3,5
символа или фиксированная). То бишь для устройства формирующего
запрос пауза STX это необходимая преамбула передачи запроса, а для принимающего устройства пауза STX это
признак для сброса счетчика буфера и начала приема нового фрейма. reZident(387 знак., 06.01.2024 19:06)
- чуть чуть оговорился... в настройках фирменных модбас клиентов, это
чаще всего называется интервал запросов IBAH(1 знак., 06.01.2024 18:51, картинка)
- Вы точно себе не противоречите? Цитата: Argon(215 знак., 06.01.2024 18:46)