Быстрый Modbus ⚡
Общие сведения
Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Протокол старый и надежный, но его работа основана на последовательном опросе всех регистров на шине. К сожалению это ограничивает скорость опроса при большом количестве устройств. Мы решили исправить этот недостаток и выпустили свое расширение протокола под названием «Быстрый Modbus».
В расширении используется широковещательные команды, которые позволяют обойтись без поочередного опроса каждого регистра.
Широковещательные команды являются зарезервированной функцией Modbus и не нарушают совместимость со стандартным протоколом. Устройства не поддерживающие Быстрый Modbus работают без проблем.
Быстрый Modbus доступен в текущем релизе ПО контроллера и устройствах Wiren Board со свежими прошивками.
Ниже описаны новые функции расширения Быстрый Modbus: события на шине и быстрое сканирование устройств. Все сказанное применимо только к устройствам Wiren Board.
Статья с техническими подробностями: Прокачиваем Modbus: арбитраж, сканирование шины, события.
События на шине
События представляют собой пакеты данных для ответа на широковещательные запросы от мастера, и генерируются, когда в устройстве происходит изменение значения модбас-регистра.
Не все регистры генерируют события. Отличить регистры, поддерживающие события, можно по значку ⚡ в таблицах Modbus-регистров устройств.
События возникают в двух случаях:
- При изменении значения регистра, поддерживающего события.
- При перезагрузке устройства. Это единственное событие которое возникает сразу после запуска устройства.
Для аналоговых каналов события по умолчанию в прошивках большинства устройств отключены, такие регистры опрашиваются по стандартному Modbus. Там, где они включены, например уровень движения в WB-MSW4 и значения напряжений в WB-MAP, для избежания спама в линию, события генерируются только при изменении значения на величину записанного в прошивке гистерезиса. Гистерезис для каждого такого канала выбран производителем устройства и не может быть изменён пользователем. Драйвер wb-mqtt-serial такие регистры в параллель событиям опрашивает и по обычному Modbus.
Как это работает?
Мастер каждые 50 мс отправляет в шину широковещательный запрос, который получают все устройства на шине. Если устройство сгенерировало событие оно отправляет ответ содержащий идентификатор события, его тип и дополнительные данные. Если таких устройств несколько, они устраивают арбитраж, в котором побеждает устройство у которого Slave ID меньше. Подробнее про арбитраж читайте на github.
Мастер получает ответ от устройства и отправляет подтверждение, о том что сообщение получено. Только после этого устройство сбросит возникшее событие. Если подтверждения нет, устройство отправит этот же ответ снова при следующем запросе.
Опрос событий будет работать только если в сети нет устройств с одинаковым slave ID. Это связано с тем, что арбитраж устройств при опросе событий выполняется по его Modbus-адресу, а не по серийному номеру устройства, как для остальных функций Быстрого Modbus.
События передаются списком. Если с момента последнего опроса в устройстве произошло несколько событий, то при следующем запросе они будут переданы в одном ответе. Размер пакета ограничен 256 байтами. Если какие то события не поместились в отправку, они будут переданы в следующем пакете.
Если между опросами событий значение регистра изменилось несколько раз, например, значение счетчика нажатий увеличилось на несколько единиц, то будет сгенерировано одно событие, а при опросе будет передано последнее актуальное значение счетчика.
Если какое то устройство на шине не поддерживает расширение, то оно все равно будет работать и отвечать на стандартные запросы. Аналогично если устройство с Быстрым Modbus опрашивается мастером, который ничего не знает о расширении, оно будет опрашиваться стандартными функциями чтения и записи.
Работа с событиями
В веб-интерфейсе контроллера пока нет специальных инструментов для работы с событиями. Ниже описаны доступные способы настройки.
Как отключить события?
В шаблонах устройств, поддерживающих быстрый Modbus, включена работа по событиям для всех регистров, у которых генерация событий имеет смысл. В некоторых случаях может быть нужно отключить события, например, если использование нестандартных функций протокола запрещено на предприятии политикой безопасности. В веб-интерфейсе контроллера пока нет специальных инструментов для работы с событиями. Поэтому отключить события можно так:
- В шаблоне устройства у параметра sporadic сменить значение на false.
- Отключить опрос канала совсем. Для этого в веб-интерфейсе контроллера в настройках serial-устройств установить период опроса параметра в значение «Не опрашивать».
Приоритет опроса событий
На запрос событий одновременно может ответить только одно устройство. Поэтому если события сгенерировали несколько устройств, то первым на запрос ответит то, у которого меньше slave ID. Чтобы это выяснить устройства проводят арбитраж, который подробно описан на github.
Однако можно установить высокий приоритет для отдельного устройства или нескольких устройств. В этом случае устройства с высоким приоритетом будут опрашиваться вперед остальных даже если их slave ID больше. Если несколько устройств имеют высокий приоритет, то арбитраж сначала будет проведен между ними, а потом между устройствами с низким приоритетом.
Установить приоритет можно в веб-интерфейсе контроллера, в настройках драйвера serial-устройств. Если в параметре период опроса указать любое значение отличное от «В порядке очереди», то регистр будет иметь высокий приоритет.
Обратите внимание, что для регистров генерирующих события не важно какое время указано в поле период опроса. Запрос событий будет выполняться каждые 50 мс. Но реальное время реакции на события будет зависеть от количества устройств на шине и событий, наличия ошибок. Тем не менее это время будет значительно меньше чем при опросе стандартными командами
Поддержка событий в прошивках
В таблице указаны устройства и версии прошивок, в которых появилась поддержка событий.
Устройство | Версия прошивки, в которой появились события |
---|---|
WB-MRx, WB-MWAC | 1.20.0 |
WB-MAPx | 2.8.0 |
WB-MDM3 | 2.7.0 |
WB-LED, WB-MRGBW-D | 3.4.0 |
WB-MSWx, WB-MIR v.2 | 4.31.0 |
WB-M1W2 | 4.32.0 |
WB-MAO4 | 2.4.4 |
WB-MCM8 | 1.6.0 |
Сканирование устройств на шине
Обычно инсталляция содержит несколько slave-устройств в щите или в поле на одной шине RS-485. Каждое устройство имеет адрес, который пользователь может менять. При монтаже адреса slave-устройств переписываются с корпуса устройства и вносятся вручную в конфигурацию мастера. Это не очень удобно. Чтобы упростить конфигурирование устройств есть функция сканирования шины. Она была доступна в контроллере Wiren Board и до выхода расширения Быстрый Modbus. С появлением расширения добавилась возможность быстро сканировать шину без необходимости выжидать таймаут для каждого несуществующего адреса.
Поэтому с расширением Быстрый Modbus сканирование работает в двух режимах: быстрое и медленное.
В медленном сканировании используется скрипт, который перебирает все возможные адреса на шине и ждет от них ответа в течение определенного времени. Процесс занимает несколько минут и зависит от настроек связи устройств: скорости, стоповых битов и т.п. Режим медленного сканирования сохранен для поддержки устройств со старыми версиями прошивок.
Быстрое сканирование выполняется значительно быстрее и позволяет обнаруживать устройства поддерживающие Быстрый Modbus практически мгновенно. В режиме быстрого сканирования мастер отправляет широковещательный запрос в шину, а устройства по очереди отвечают данными о себе. Очередность определяет арбитраж.
Сканирование шины в веб-интерфейсе контроллера Wiren Board
Сканирование шины работает только для устройств с поддержкой Быстрого Modbus
В релизах с wb-2304 по wb-2404
В разделе Настройки → Сканирование можно получить список всех устройств Wiren Board подключенных к шине RS-485 с их серийными номерами, настройками соединения и версиями прошивок.
Возможности функции сканирования:
- отображение всех устройств Wiren Board, подключенных к контроллеру,
- обнаружение устройств с одинаковыми адресами на одной шине,
- обнаружение устройств с разными параметрами связи на одной шине.
Благодаря функции сканирования можно собирать шкаф управления не обращая внимания на адреса устройств — все адреса и параметры можно будет получить после сборки и сконфигурировать устройства не отключая от шины.
В релизах wb-2407 и новее
Так как сканирование тесно связано с добавлением устройств в конфигурацию контроллера, то мы убрали отдельный сканер и перенесли сканирование шины в конфигуратор настроек устройств.
Настройки → Конфигурационные файлы → Настройка драйвера serial-устройств → Найти и добавить устройства
Изменение Modbus-адреса устройств
Для устройств, которые поддерживают Быстрый Modbus, можно задать новые адреса, обращаясь к устройству по уникальному серийному номеру. Это удобно когда на шине обнаружено несколько устройств с одинаковым адресом. Изменение адресов выполняется с помощью утилиты wb-modbus-scanner и пока не поддерживается веб-интерфейсом. Описание расширенных команд и референсная реализация утилиты доступны в репозитории утилиты.
Для смены адреса устройства подключитесь к контроллеру через SSH.
- Установите утилиту командой:
apt update && apt install wb-modbus-ext-scanner
- Остановите драйвер wb-mqtt-serial:
systemctl stop wb-mqtt-serial
- Выполните команду
wb-modbus-scanner -d /dev/ttyRS485-1 -b 115200 -s 4267937719 -i 3
- где, /dev/ttyRS485-1 — порт к которому подключено устройство,
- 115200 — скорость обмена,
- 4267937719 — серийный номер устройства,
- 3 — новый slave ID.
- В результате должен появиться такой вывод:
Serial port: /dev/ttyRS485-1 Use baud 115200 Change ID for device with serial 4267937719 [FE638FB7] New ID: 3
- Запустите обратно драйвер wb-mqtt-serial:
systemctl start wb-mqtt-serial
Поддержка сканирования в прошивках
Устройство | Версия прошивки, в которой появилось сканирование |
---|---|
WB-MRx, WB-MWAC | 1.19.0 |
WB-MDM3 | 2.6.0 |
WB-LED, WB-MRGBW-D | 3.2.0 |
WB-MSx, WB-MSWx, WB-MIR, WB-M1W2 | 4.23.0 |
WB-MAI11 | не поддерживается |
WB-MAI6 | 2.0.0 |
WB-MAO4 | 2.2.0 |
WB-MAPx | 2.4.0 |
WB-MIO | 1.6.0 |
WB-REF-U | 1.4.0 |
WB-REF-DF | 1.1.0 |
Полезные ссылки
- Прокачиваем Modbus: арбитраж, сканирование шины, события - статья с подробностями реализации расширения
- Описание расширения на GitHub
- Описание протокола Modbus
- Репозиторий утилиты сканирования