Fast Modbus/en: различия между версиями
(Новая страница: «===Support for events in firmware=== The table below shows the devices and firmware versions that introduced support for events. {| border="1" class="wikitable" ! Device || Firmware version with event support |- | WB-MRx, WB-MWAC | 1.20.0 |- | WB-MDM3 | 2.7.0 (in testing) |- | WB-LED, WB-MRGBW-D | 3.4.0 |- | WB-MSWx | 4.31.0 (in testing) |- | WB-M1W2 | 4.32.0 (in testing) |- |}») Метки: правка с мобильного устройства правка из мобильной версии |
|||
(не показано 14 промежуточных версий этого же участника) | |||
Строка 84: | Строка 84: | ||
|} | |} | ||
== | <div lang="ru" dir="ltr" class="mw-content-ltr"> | ||
[[Image:Scan-screen.png|300px|thumb|right| | ==Сканирование устройств на шине== | ||
[[Image: Scan-screen.png |300px|thumb|right| Сканирование устройств на вкладке ''Настройки → Сканирование'']] | |||
Обычно инсталляция содержит несколько slave-устройств в щите или в поле на одной шине RS-485. Каждое устройство имеет адрес, который пользователь может менять. При монтаже адреса slave-устройств переписываются с корпуса устройства и вносятся вручную в конфигурацию мастера. Это не очень удобно. | |||
Чтобы упростить конфигурирование устройств есть функция сканирования шины. Она была доступна в контроллере Wiren Board и до выхода расширения Быстрый Modbus. С появлением расширения добавилась возможность быстро сканировать шину без необходимости выжидать таймаут для каждого несуществующего адреса. | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
Поэтому с расширением Быстрый Modbus сканирование работает в двух режимах: быстрое и медленное. | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
В медленном сканировании используется скрипт, который перебирает все возможные адреса на шине и ждет от них ответа в течение определенного времени. Процесс занимает несколько минут и зависит от настроек связи устройств: скорости, стоповых битов и т.п. Режим медленного сканирования сохранен для поддержки устройств со старыми версиями прошивок. | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
Быстрое сканирование выполняется значительно быстрее и позволяет обнаруживать устройства поддерживающие Быстрый Modbus практически мгновенно. В режиме быстрого сканирования мастер отправляет широковещательный запрос в шину, а устройства по очереди отвечают данными о себе. Очередность определяет арбитраж. | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
Функция сканирования доступна в веб-интерфейсе контроллера в разделе '''Настройки → Сканирование'''. | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
* | Текущие возможности функции сканирования в веб-интерфейсе: | ||
* | *отображение всех устройств Wiren Board, подключенных к контроллеру, | ||
* | *обнаружение устройств с одинаковыми адресами на одной шине, | ||
*обнаружение устройств с разными параметрами связи на одной шине. | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
При запуске функции сканирования в веб-интерфейсе контроллера сначала выполняется быстрое сканирование, затем — медленное. Это можно увидеть в статусе сканирования. | |||
</div> | |||
=== | <div lang="ru" dir="ltr" class="mw-content-ltr"> | ||
===Изменение Modbus-адреса устройств=== | |||
Для устройств, которые поддерживают Быстрый Modbus, можно задать новые адреса, обращаясь к устройству по уникальному серийному номеру. Это удобно когда на шине обнаружено несколько устройств с одинаковым адресом. | |||
Изменение адресов выполняется с помощью утилиты ''wb-modbus-scanner'' и пока не поддерживается веб-интерфейсом. Описание расширенных команд и референсная реализация утилиты доступны в [https://github.com/wirenboard/wb-modbus-ext-scanner репозитории утилиты]. | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
Для смены адреса устройства подключитесь к контроллеру через [[SSH |SSH]]. | |||
</div> | |||
# | <div lang="ru" dir="ltr" class="mw-content-ltr"> | ||
#Установите утилиту командой: | |||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
apt update && apt install wb-modbus-ext-scanner | apt update && apt install wb-modbus-ext-scanner | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | #Остановите драйвер wb-mqtt-serial: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
systemctl stop wb-mqtt-serial | systemctl stop wb-mqtt-serial | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | #Выполните команду | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
wb-modbus-scanner -d /dev/ttyRS485-1 -b 115200 -s 4267937719 -i 3 | wb-modbus-scanner -d /dev/ttyRS485-1 -b 115200 -s 4267937719 -i 3 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | #:где, /dev/ttyRS485-1 — порт к которому подключено устройство, | ||
# | #:115200 — скорость обмена, | ||
#:4267937719 — серийный номер устройства, | |||
#:3 — новый slave ID. | |||
#В результате должен появиться такой вывод: | |||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
Serial port: /dev/ttyRS485-1 | Serial port: /dev/ttyRS485-1 | ||
Строка 129: | Строка 151: | ||
Change ID for device with serial 4267937719 [FE638FB7] New ID: 3 | Change ID for device with serial 4267937719 [FE638FB7] New ID: 3 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | #Запустите обратно драйвер wb-mqtt-serial: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
systemctl start wb-mqtt-serial | systemctl start wb-mqtt-serial | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</div> | |||
= | <div lang="ru" dir="ltr" class="mw-content-ltr"> | ||
=== Поддержка сканирования в прошивках=== | |||
</div> | |||
<div lang="ru" dir="ltr" class="mw-content-ltr"> | |||
{| border="1" class="wikitable" | |||
! Устройство || Версия прошивки, в которой появилось сканирование | |||
|- | |- | ||
| WB-MRx, WB-MWAC | | WB-MRx, WB-MWAC | ||
| 1.19.0 | | 1.19.0 | ||
|- | |- | ||
| WB-MDM3 | | WB-MDM3 | ||
| 2.6.0 | | 2.6.0 | ||
|- | |- | ||
| WB-LED, WB-MRGBW-D | | WB-LED, WB-MRGBW-D | ||
| 3.2.0 | | 3.2.0 | ||
|- | |- | ||
| WB-MSx, WB-MSWx, WB-MIR, WB-M1W2 | | WB-MSx, WB-MSWx, WB-MIR, WB-M1W2 | ||
| 4.23.0 | | 4.23.0 | ||
|- | |- | ||
| WB-MAI11 | | WB-MAI11 | ||
| | | не поддерживается | ||
|- | |- | ||
| WB-MAI6 | | WB-MAI6 | ||
| 2.0.0 | | 2.0.0 | ||
|- | |- | ||
| WB-MAO4 | | WB-MAO4 | ||
| 2.2.0 | | 2.2.0 | ||
|- | |- | ||
| WB-MAPx | | WB-MAPx | ||
| 2.4.0 | | 2.4.0 | ||
|- | |- | ||
| WB-MIO | | WB-MIO | ||
| 1.6.0 | | 1.6.0 | ||
|- | |- | ||
| WB-REF-U | | WB-REF-U | ||
| 1.4.0 | | 1.4.0 | ||
|- | |- | ||
| WB-REF-DF | | WB-REF-DF | ||
| 1.1.0 | | 1.1.0 | ||
|- | |- | ||
|} | |} | ||
</div> | |||
== | <div lang="ru" dir="ltr" class="mw-content-ltr"> | ||
* [https://habr.com/p/772308/ | ==Полезные ссылки== | ||
* [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md | * [https://habr.com/p/772308/ Прокачиваем Modbus: арбитраж, сканирование шины, события] - статья с подробностями реализации расширения | ||
* [[Modbus | Modbus | * [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md Описание расширения на GitHub] | ||
* [https://github.com/wirenboard/wb-modbus-ext-scanner | * [[Modbus | Описание протокола Modbus]] | ||
* [https://github.com/wirenboard/wb-modbus-ext-scanner Репозиторий утилиты сканирования] | |||
</div> |
Версия 16:06, 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.
Article with technical details: Boosting Modbus: arbitration, bus scanning, events.
Bus events
Events are data packets in response to broadcast requests from the master, and are generated when the value of the modbas register changes in the device.
Not all registers generate events. Registers that support events can be distinguished by the ⚡ symbol in the tables of Modbus device registers.
Events occur in two cases:
- When changing the value of the register that supports events.
- When rebooting the device. This is the only event that occurs immediately after device startup.
How does it work?
Every 50 ms, the master sends a broadcast request on the bus, which is received by all devices on the bus. If a device generates an event, it sends a response containing the event identifier, its type, and additional data. If there are multiple devices that generate such events, they engage in arbitration, in which the device with a lower Slave ID wins. For more information about arbitration, please refer to github.
The master receives a response from the device and sends a confirmation that the message has been received. Only after that, the device will reset the occurred event. If there is no confirmation, the device will send the same response again during the next request.
The event polling will only work if there are no devices on the network with the same slave ID. This is due to the fact that the arbitration of devices during event polling is done based on its Modbus address, not the device's serial number like for other Quick Modbus functions.
Events are transmitted in a list. If there have been multiple events in the device since the last query, they will be delivered in a single response during the next request. The packet size is limited to 256 bytes. If certain events could not fit into the transmission, they will be delivered in the next packet.
If the register value changed multiple times between events, for example, if the click counter increased by several units, only one event will be generated, and the latest actual value of the counter will be passed during the poll.
If a device on the bus does not support the extension, it will still function and respond to standard queries. Similarly, if a device with Fast Modbus is polled by a master that is unaware of the extension, it will be polled using standard read and write functions.
Working with events
There are currently no special tools for working with events in the controller's web interface. Below are the available methods of configuration.
How to disable events?
In templates for devices that support fast Modbus, event handling is enabled for all registers where event generation makes sense. In some cases, it may be necessary to disable events, for example, if the use of non-standard protocol functions is prohibited by the company's security policy. There are currently no specific tools for working with events in the controller's web interface. To disable events, you can do the following:
- In the device template, change the value of the sporadic parameter to false.
- Completely disable channel polling. To do this, in the controller's web interface, set the polling interval for the parameter to "Do not poll".
- Disabling event polling
Event polling priority
Only one device can respond to an event request at a time. Therefore, if multiple devices generate events, the one with the lower slave ID will be the first to respond to the request. Devices perform arbitration to determine this, which is described in detail on GitHub.
However, it is possible to assign a high priority to an individual device or multiple devices. In this case, devices with high priority will be polled ahead of others even if their slave ID is higher. If multiple devices have a high priority, arbitration will first be conducted among them, and then among devices with low priority.
It is possible to set the priority in the web interface of the controller, in the settings of the serial device driver. If any value other than "In order" is specified for the polling period parameter, the register will have a high priority.
Please note that for event generating registers, the time specified in the polling interval field does not matter. Event queries will be executed every 50 ms. However, the actual response time to events will depend on the number of devices on the bus and events, as well as the presence of errors. Nevertheless, this time will be significantly shorter than when using standard commands.
Support for events in firmware
The table below shows the devices and firmware versions that introduced support for events.
Device | Firmware version with event support |
---|---|
WB-MRx, WB-MWAC | 1.20.0 |
WB-MDM3 | 2.7.0 (in testing) |
WB-LED, WB-MRGBW-D | 3.4.0 |
WB-MSWx | 4.31.0 (in testing) |
WB-M1W2 | 4.32.0 (in 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
- Репозиторий утилиты сканирования