Fast Modbus/en: различия между версиями
(Новая страница: «Fast Modbus is available in the current controller software release and in Wiren Board devices with the latest firmware.») |
(Новая страница: «Below are described the new features of the Fast Modbus extension: '''bus events''' and '''fast scanning''' of devices. All information applies only to Wiren Board devices.») |
||
Строка 9: | Строка 9: | ||
Fast Modbus is available in the current controller software release and in Wiren Board devices with the latest firmware. | Fast Modbus is available in the current controller software release and in Wiren Board devices with the latest firmware. | ||
Below are described the new features of the Fast Modbus extension: '''bus events''' and '''fast scanning''' of devices. All information applies only to Wiren Board devices. | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | <div lang="ru" dir="ltr" class="mw-content-ltr"> |
Версия 16:03, 29 декабря 2023
General information
We produce devices that operate on the standard Modbus RTU protocol. The protocol is old and reliable, but its operation is based on sequentially polling all the registers on the bus. Unfortunately, this limits the polling speed when there are a large number of devices. We have decided to address this limitation and have released our own protocol extension called "Fast Modbus".
The extension uses broadcast commands, which allow to avoid polling each register one by one.
Broadcast commands are a reserved function of Modbus and do not violate compatibility with the standard protocol. Devices that do not support Fast Modbus function without any issues.
Fast Modbus is available in the current controller software release and in Wiren Board devices with the latest firmware.
Below are described the new features of the Fast Modbus extension: bus events and fast scanning of devices. All information applies only to Wiren Board devices.
Статья с техническими подробностями: Прокачиваем Modbus: арбитраж, сканирование шины, события.
События на шине
События представляют собой пакеты данных для ответа на широковещательные запросы от мастера, и генерируются, когда в устройстве происходит изменение значения модбас-регистра.
Не все регистры генерируют события. Отличить регистры, поддерживающие события, можно по значку ⚡ в таблицах 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-MDM3 | 2.7.0 (в testing) |
WB-LED, WB-MRGBW-D | 3.4.0 |
WB-MSWx | 4.31.0 (в testing) |
WB-M1W2 | 4.32.0 (в testing) |
Сканирование устройств на шине
Обычно инсталляция содержит несколько slave-устройств в щите или в поле на одной шине RS-485. Каждое устройство имеет адрес, который пользователь может менять. При монтаже адреса slave-устройств переписываются с корпуса устройства и вносятся вручную в конфигурацию мастера. Это не очень удобно. Чтобы упростить конфигурирование устройств есть функция сканирования шины. Она была доступна в контроллере Wiren Board и до выхода расширения Быстрый Modbus. С появлением расширения добавилась возможность быстро сканировать шину без необходимости выжидать таймаут для каждого несуществующего адреса.
Поэтому с расширением Быстрый Modbus сканирование работает в двух режимах: быстрое и медленное.
В медленном сканировании используется скрипт, который перебирает все возможные адреса на шине и ждет от них ответа в течение определенного времени. Процесс занимает несколько минут и зависит от настроек связи устройств: скорости, стоповых битов и т.п. Режим медленного сканирования сохранен для поддержки устройств со старыми версиями прошивок.
Быстрое сканирование выполняется значительно быстрее и позволяет обнаруживать устройства поддерживающие Быстрый Modbus практически мгновенно. В режиме быстрого сканирования мастер отправляет широковещательный запрос в шину, а устройства по очереди отвечают данными о себе. Очередность определяет арбитраж.
Функция сканирования доступна в веб-интерфейсе контроллера в разделе Настройки → Сканирование.
Текущие возможности функции сканирования в веб-интерфейсе:
- отображение всех устройств Wiren Board, подключенных к контроллеру,
- обнаружение устройств с одинаковыми адресами на одной шине,
- обнаружение устройств с разными параметрами связи на одной шине.
При запуске функции сканирования в веб-интерфейсе контроллера сначала выполняется быстрое сканирование, затем — медленное. Это можно увидеть в статусе сканирования.
Изменение 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
- Репозиторий утилиты сканирования