Структура ADU и PDU запросов и ответов в режиме RTU - одинакова.
Адрес ведомого и код функции в запросе и ответе одинаковы.
CRC конечно же на месте.
Отличается только поле данных.
Или что то из этого неверно?
linux_rulezz писал(а): Пн сен 14, 2026 22:27:33Кстати, я очень редко на мастере CRC проверяю, т.к. это вообще никакого смысла не имеет
На высоких скоростях в Modbus RTU, по IDLE, будешь постоянно ловить таймаут после первого байта. Если общаешься с устройством, для которого разработчики придерживались стандарту.
Враньё. По IDLE принимает без ошибок. IDLE взводится не через 1, и даже не через 2 бита, поэтому STM32 прекрасно принимает фреймы даже от старых восьмибиток, которые выдают байты в линию через не одинаковые интервалы.Аlex писал(а):На высоких скоростях в Modbus RTU, по IDLE, будешь постоянно ловить таймаут после первого байта. Если общаешься с устройством, для которого разработчики придерживались стандарту.
На практике ни кто не ставит миллисекундые периоды опроса ведомых, в этом просто нет смысла. И слушать начинать разумно не через 3.5Т, а, например, через 3.0Т. Тут даже намёк на это есть, 3.5=2*1.5+0.5. Вроде, в Стандарте даже алгоритм приёма был разрисован.~Dimon~ писал(а):Вы конечно можете настроить ведущему минимальный интервал между опросами ведомых, и я могу потормозить, но если вы этого не сделали - я могу не успеть к 3,5T, и провороню запрос к себе.
Не должен зависить. Есть Стандарт, который все программы тем или иным образом соблюдают. Поставьте демо-версии нескольких ОРС-серверов для Модбас и посмотрите, как в них настраивается опрос, может, тогда станет понятней, что критично, а что нет для стабильной работы.~Dimon~ писал(а):Будет зависеть от реализации программы на компе/ПЛК.
Не правильный подход. Попадётся другое оборудование- и не заработает. Да, потом восстановится опрос, но такой кривой запуск опроса может заставить усомнится в правильности работы вашего оборудования и сформировать предвзятое отношение к нему.~Dimon~ писал(а):У меня первый опрос идет всегда подряд, всех ведомых, с теми промежутками, которые там libmodbus сделает. Даже не смотрел и не настраивал, работает по умолчанию все
Чушь полная. Даже китайские релюшки и "ПЛК", где разработчики вообще ни о каком стандарте не слыхали, нормально работают. А "высоких скоростей" в модбасе не бывает: там редко встретишь шустрей 115200… Убогая дрянь, одним словом.Аlex писал(а): Вт сен 15, 2026 00:35:52На высоких скоростях в Modbus RTU, по IDLE, будешь постоянно ловить таймаут после первого байта. Если общаешься с устройством, для которого разработчики придерживались стандарту.
Ну вобщем - как всегда... Сначала самоуверенно обвиняете всех, что они не знают протокола, а потом выясняется что вы сами его не знаете и стандарт видимо никогда не открывали даже...tonyk писал(а): Вт сен 15, 2026 07:34:30 Враньё. По IDLE принимает без ошибок. IDLE взводится не через 1, и даже не через 2 бита, поэтому STM32 прекрасно принимает фреймы даже от старых восьмибиток, которые выдают байты в линию через не одинаковые интервалы.
Внимательно вчитываемся в выделенный жирным текст, затем достаём калькулятор и считаем время передачи одного символа для 115200бод:To ensure frame integrity during the transmission, the time interval between two frames must be at least the transmission time of 3.5 characters, and the time interval between two consecutive characters must be no more than the transmission time of 1.5 characters.[25] For example, with the default data rate of 19200 bit/s, the transmission times of 3.5 (t3.5) and 1.5 (t1.5) 11-bit characters are:
2.005 ms
859.375 μs
For higher data rates, Modbus RTU recommends to use the fixed values 750 μs for t1.5 and 1.750 ms for t3.5.[25]
Если ты не встречался с такими устройствами, это не означает, что их не существует.linux_rulezz писал(а): Вт сен 15, 2026 09:47:47Даже китайские релюшки и "ПЛК", где разработчики вообще ни о каком стандарте не слыхали, нормально работают.
А "высоких скоростей" в модбасе не бывает: там редко встретишь шустрей 115200…
Стандартом не запрещены, а значит "хвост откручивать" не за что. И IDLE, на скорости выше 19200 (например, 38400), пролетает "как фанера над Парижем".
Аlex писал(а):Поизучайте протокол, товарищи.
В Стандарте сказано, что пауза должна быть не более 1.5Т. Меньше- пожалуйста. Видимо, в китайских девайсах нет DMA, а программа написана так, что между отправками байт возникает пауза больше 10 бит.Их разрабы любезно придерживались стандарту и делали межбайтовые паузы согласно нему.
И опять мимо кассы. Человеку не повезло с двумя китайскими поделками. Бывает. Я за 10 лет использования STM32 ещё ни разу не сталкивался с невозможностью приёма по IDLE. Прекрасно понимаю, что использование IDLE вынужденная мера по причине кастрации UART со стороны STM, поэтому старался выбирать МК с полноценным UART, имеющим RTO.jcxz писал(а):Ну вобщем - как всегда... Сначала самоуверенно обвиняете всех, что они не знают протокола, а потом выясняется что вы сами его не знаете и стандарт видимо никогда не открывали даже...
Просто скорость передачи была очень высокая для используемых МК и алгоритма их работы, другими словами, время входа в обработчик по отправке байта было больше длительности байта. Думаю, достаточно было просто понизить скорость, чтобы пауза между байтами стала меньше 10 бит.Аlex писал(а):Идея ловли окончания кадра по IDLE, даже на стандартной скорости в 115200, шла по пи*де.
Если гарантируете, что превышения 1,5T не произойдет, даже если все более высокоприоритетные прерывания наложатся друг на друга.Аlex писал(а): Вт сен 15, 2026 14:06:37 Стандартом не запрещены, а значит "хвост откручивать" не за что.