Поддержка разных скоростей modbus на одной физической шине

Недавно читал что wirenboard научился поддерживать произвольные команды по rs-485, не обязательно modbus и подумал: а нельзя ли подобным образом совместить разные скорости.

Условно: все устройства работают на 115200, а одно только 9600. Для опроса этого устройства контроллер переходит на 9600, опрашивает его, потом обратно на 115000 общаться с остальными.

При этом шедулер может оптимально распределять опросы регистров медленных и быстрых устройств, чтобы не слишком тормозить быстрых и при этом продолжать опрашивать медленных. Например на шине есть одно устройство на 9600, два на 19200 и остальные 115200.

Можно опрашивать например так:
9600 - 1 регистр
быстрый опрос (широковещательный опрос по протоколу быстрого modbus)
19200 - 2 регистра
быстрый опрос
115200 - опрос остальных устройств
быстрый опрос
9600 - опрос второго регистра
быстрый опрос
19200 - опрос ещё 2 регистров
быстрый опрос

и т.д.

Если есть команда на исполнение - то она влезает вперёд очереди и для любого устройства работает быстро.

т.е. быстрые продолжают опрашиваться относительно быстро, медленные работают медленнее чем могли (но возможно всё равно быстрее чем если вообще все устройства на 9600 перевести), при этом остаётся быстрая реакция на быстрый modbus и сокращается потребность в разных шинах если есть несколько штук устройств со своими ненастраиваемыми предпочтениями по скорости.

Увидел что реализация подобного механизма уже есть для частных случаев - электросчётчиков и обновления прошивок модулей.

Я добавлю в пожелания это - но сам считаю что подобное не нужно. Так как потенциально возможны ошибки и некорректное выполнение чужих команд устройствами.
То есть польза совсем-совсем неочевидна.
Если хотите реализовать - то можно использовать GitHub - wirenboard/wb-mqtt-serial: Wiren Board MQTT serial protocol driver
Как пример реализации: Написание драйвера протокола на rs-485 - #13 от пользователя Letunovsky

А как риски случайного исполнения чужих команд исключаются при общении с электросчётчиками и при заливке прошивок устройств?

К сожалению, это не укладывается в общую концепцию развития наших устройств и софта, да и влечёт очень много работы с непонятным профитом для компании и клиентов.

Есть требования к шине и одинаковая скорость устройств на шине одно из них. Остальное сильно усложнит драйвер, отладку и добавит много задержек в итоге. Но, конечно, вы можете реализовать сами такое, если вам очень нужно.

2 Likes

Электросчетчики (всегда) работают на той же скорости что и остальные устройства.
А заливка прошивок - это операция пусконаладки/обслуживания и проходит под управлением квалифицированного специалиста.

тут я вижу либо противоречие, либо я чего-то недопонял:

Электросчетчики (всегда) работают на той же скорости что и остальные устройства.

и github на странице драйвера

При любых настройках порта фактический обмен с счётчиками происходит в режиме 9600 7E1, в соответствии с МЭК 61107.

Соответственно на эту шину можно подключать только работающие с такими параметрами устройства, да.

В копилку аргументов “ЗА”:
А вот и повод нашёлся - совмещение привода штор с другими устройствами:

У меня сейчас проложена одна линия modbus, все устройства работают на скорости 115200.
Хочу добавить электрошторы, а он работает на 9600.

Сейчас это означает необходимость ещё одной линии специально для штор (по всей квартире, т.к. шкторы будут на всех окнах) или снижение скорости обмена для всех устройств.

Вот другие люди тоже подобными вопросами задаются:

С т.з. совместимости и побочных эффектов кажется что это не хуже, чем совмещение разных протоколов на одной RS-485 линии или прямая запись данных в порт через MQTT, работа с которыми уже добавлена.