16 578
правок
(Новая страница: «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.») |
|||
(не показаны 22 промежуточные версии этого же участника) | |||
Строка 37: | Строка 37: | ||
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 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". | ||
# | <gallery mode="packed" heights="150px" caption="Disabling event polling"> | ||
<gallery mode="packed" heights="150px" caption=" | Image: sporadic1.png | Set the '''sporadic''' parameter to '''false''' | ||
Image: sporadic1.png | | Image: sporadic2_en.png | Set the polling interval to "Do not poll" | ||
Image: | |||
</gallery> | </gallery> | ||
===Event polling priority=== | |||
[[File:priority_setting_en.png|500px|thumb|right|Setting event polling priority in the web interface of the Wiren Board controller]] | |||
[[File: | 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 [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md 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. | ||
{| border="1" class="wikitable" | |||
{| | ! Device || Firmware version with event support | ||
! | |||
|- | |- | ||
| WB-MRx, WB-MWAC | | WB-MRx, WB-MWAC | ||
Строка 88: | Строка 71: | ||
|- | |- | ||
| WB-MDM3 | | WB-MDM3 | ||
| 2.7.0 ( | | 2.7.0 (in testing) | ||
|- | |- | ||
| WB-LED, WB-MRGBW-D | | WB-LED, WB-MRGBW-D | ||
| 3.4.0 | | 3.4.0 | ||
|- | |- | ||
| | | WB-MSWx | ||
| 4.31.0 ( | | 4.31.0 (in testing) | ||
|- | |- | ||
| WB-M1W2 | | WB-M1W2 | ||
| 4.32.0 ( | | 4.32.0 (in testing) | ||
|- | |- | ||
|} | |} | ||
==Scanning devices on the bus== | |||
[[Image:Scan-screen.png|300px|thumb|right|Scanning devices on the ''Settings → Scanning'' tab]] | |||
[[Image: Scan-screen.png |300px|thumb|right| | Usually, an installation includes several slave devices on one RS-485 bus inside a panel or in the field. Each device has an address that the user can change. During installation, the addresses of slave devices are written down from the device casing and manually entered into the master configuration. This is not very convenient. | ||
To simplify device configuration, there is a bus scanning function. It was available in the Wiren Board controller even before the Quick Modbus extension was released. With the release of the extension, the ability to quickly scan the bus without waiting for a timeout for each non-existent address was added. | |||
Therefore, with the Fast Modbus extension, scanning works in two modes: fast and slow. | |||
In slow scanning, a script is used that iterates through all possible addresses on the bus and waits for a response from them within a certain time frame. The process takes several minutes and depends on the communication settings of the devices: speed, stop bits, etc. The slow scanning mode is preserved to support devices with older firmware versions. | |||
Quick scanning is performed much faster and allows to detect devices supporting Fast Modbus almost instantly. In quick scanning mode, the master sends a broadcast request to the bus, and devices respond with data about themselves one by one. The order is determined by the arbitration. | |||
The scanning function is available in the controller's web interface under the section '''Settings → Scanning'''. | |||
Current scanning capabilities in the web interface: | |||
*displaying all Wiren Board devices connected to the controller, | |||
* | *detecting devices with identical addresses on the same bus, | ||
* | *detecting devices with different communication parameters on the same bus. | ||
* | |||
When the scanning function is launched in the controller's web interface, it first performs a quick scan, followed by a slow scan. This can be observed in the scanning status. | |||
===Changing Modbus Device Addresses=== | |||
For devices that support Fast Modbus, you can set new addresses by accessing the device using its unique serial number. This is convenient when multiple devices with the same address are detected on the bus. | |||
Changing addresses is done using the ''wb-modbus-scanner'' utility and is currently not supported through the web interface. Detailed commands and the reference implementation of the utility are available in the [https://github.com/wirenboard/wb-modbus-ext-scanner utility's repository]. | |||
To change the device's address, connect to the controller via [[SSH]]. | |||
# Install the utility using the command: | |||
# | |||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
apt update && apt install wb-modbus-ext-scanner | apt update && apt install wb-modbus-ext-scanner | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # Stop the wb-mqtt-serial driver using the command: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
systemctl stop wb-mqtt-serial | systemctl stop wb-mqtt-serial | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # Execute the command: | ||
#:<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> | ||
# | # Where, /dev/ttyRS485-1 is the port to which the device is connected, 115200 is the exchange rate, 4267937719 is the device's serial number, 3 is the new slave ID. | ||
# As a result, the following output should appear: | |||
# | |||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
Serial port: /dev/ttyRS485-1 | Serial port: /dev/ttyRS485-1 | ||
Строка 169: | Строка 129: | ||
Change ID for device with serial 4267937719 [FE638FB7] New ID: 3 | Change ID for device with serial 4267937719 [FE638FB7] New ID: 3 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # Start the wb-mqtt-serial driver again using the command: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
systemctl start wb-mqtt-serial | systemctl start wb-mqtt-serial | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Support for scanning in firmware === | |||
{| border="1" class="wikitable" | |||
! Device || Firmware version where scanning was introduced | |||
|- | |- | ||
| 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 | ||
| | | not supported | ||
|- | |- | ||
| 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 | ||
|- | |- | ||
|} | |} | ||
==Useful links== | |||
* [https://habr.com/p/772308/ Upgrading Modbus: arbitration, bus scanning, events] - an article with details on implementing the extension | |||
* [https://habr.com/p/772308/ | * [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md Extension description on GitHub] | ||
* [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md | * [[Modbus | Modbus protocol description]] | ||
* [[Modbus | | * [https://github.com/wirenboard/wb-modbus-ext-scanner Scanning utility repository] | ||
* [https://github.com/wirenboard/wb-modbus-ext-scanner | |||