Fast Modbus: различия между версиями

Материал из Wiren Board
 
(не показано 38 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{Draft}}
<languages/><translate>
{{DISPLAYTITLE: Быстрый Modbus}}
{{DISPLAYTITLE: Быстрый Modbus &#9889;}}
===Общие сведения===
===Общие сведения=== <!--T:1-->
Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Протокол старый и надежный, но его работа основана на последовательном опросе всех регистров на шине. К сожалению это ограничивает скорость опроса при большом количестве устройств. Мы решили исправить этот недостаток и выпустили свое расширение протокола под названием «Быстрый Modbus».  
{{YouTube
|link= https://www.youtube.com/watch?v=bGcVTmMVhLA
|text= Насколько быстр Быстрый Modbus?
}}
Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Протокол старый и надежный, но его работа основана на последовательном опросе всех регистров на шине. К сожалению это ограничивает скорость опроса при большом количестве устройств. Мы решили исправить этот недостаток и выпустили свое расширение протокола под названием '''«Быстрый Modbus»'''.  


<!--T:2-->
В расширении используется широковещательные команды, которые позволяют обойтись без поочередного опроса каждого регистра.
В расширении используется широковещательные команды, которые позволяют обойтись без поочередного опроса каждого регистра.


<!--T:3-->
Широковещательные команды являются зарезервированной функцией Modbus и не нарушают совместимость со стандартным протоколом. Устройства не поддерживающие Быстрый Modbus работают без проблем.
Широковещательные команды являются зарезервированной функцией Modbus и не нарушают совместимость со стандартным протоколом. Устройства не поддерживающие Быстрый Modbus работают без проблем.


<!--T:4-->
Быстрый Modbus доступен в текущем релизе ПО контроллера и устройствах Wiren Board со свежими прошивками.
Быстрый Modbus доступен в текущем релизе ПО контроллера и устройствах Wiren Board со свежими прошивками.


<!--T:5-->
Ниже описаны новые функции расширения Быстрый Modbus: '''события на шине''' и '''быстрое сканирование''' устройств. Все сказанное применимо только к устройствам Wiren Board.
Ниже описаны новые функции расширения Быстрый Modbus: '''события на шине''' и '''быстрое сканирование''' устройств. Все сказанное применимо только к устройствам Wiren Board.


==События на шине==
<!--T:6-->
События представляют собой пакеты данных для ответа на запросы от мастера, и генерируются, когда в устройстве происходит изменение значения модбас-регистра.  
Статья с техническими подробностями: [https://habr.com/ru/companies/wirenboard/articles/772308/ Прокачиваем Modbus: арбитраж, сканирование шины, события].


==События на шине== <!--T:7-->
События представляют собой пакеты данных для ответа на широковещательные запросы от мастера, и генерируются, когда в устройстве происходит изменение значения модбас-регистра.
<!--T:8-->
Не все регистры генерируют события. Отличить регистры, поддерживающие события, можно по значку ⚡ в таблицах Modbus-регистров устройств.
Не все регистры генерируют события. Отличить регистры, поддерживающие события, можно по значку ⚡ в таблицах Modbus-регистров устройств.


<!--T:9-->
События возникают в двух случаях:
События возникают в двух случаях:


<!--T:10-->
#При изменении значения регистра, поддерживающего события.
#При изменении значения регистра, поддерживающего события.
#При перезагрузке устройства. Это единственное событие которое возникает сразу после запуска устройства.
#При перезагрузке устройства. Это единственное событие которое возникает сразу после запуска устройства.


===Как это работает?===
Для аналоговых каналов события по умолчанию в прошивках большинства устройств отключены, такие регистры опрашиваются по стандартному Modbus. Там, где они включены, например уровень движения в WB-MSW4 и значения напряжений в WB-MAP, для избежания спама в линию, события генерируются только при изменении значения на величину записанного в прошивке гистерезиса. Гистерезис для каждого такого канала выбран производителем устройства и не может быть изменён пользователем. Драйвер wb-mqtt-serial такие регистры в параллель событиям опрашивает и по обычному Modbus.
Мастер каждые 50 мс отправляет в шину широковещательный запрос, который получают все устройства на шине. Если устройство сгенерировало событие оно отправляет ответ содержащий идентификатор события, его тип и дополнительные данные. Если таких устройств несколько, они устраивают арбитраж, в котором побеждает устройство у которого Slave ID меньше. Подробнее про арбитраж на github.
===Как это работает?=== <!--T:11-->
[[File:register_polling.png|500px|thumb|right|Опрос регистров в Быстром Modbus и стандартном протоколе]]
[[File:polling_time.png|500px|thumb|right|Распределение времени опроса событий]]
Мастер каждые 50 мс отправляет в шину широковещательный запрос, который получают все устройства на шине. Если устройство сгенерировало событие оно отправляет ответ содержащий идентификатор события, его тип и дополнительные данные. Если таких устройств несколько, они устраивают арбитраж, в котором побеждает устройство у которого Slave ID меньше. Подробнее про арбитраж читайте на [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md github].


<!--T:12-->
Мастер получает ответ от устройства и отправляет подтверждение, о том что сообщение получено. Только после этого устройство сбросит возникшее событие. Если подтверждения нет, устройство отправит этот же ответ снова при следующем запросе.  
Мастер получает ответ от устройства и отправляет подтверждение, о том что сообщение получено. Только после этого устройство сбросит возникшее событие. Если подтверждения нет, устройство отправит этот же ответ снова при следующем запросе.  


<!--T:13-->
'''Опрос событий будет работать только если в сети нет устройств с одинаковым slave ID.''' Это связано с тем, что арбитраж устройств при опросе событий выполняется по его Modbus-адресу, а не по серийному номеру устройства, как для остальных функций Быстрого Modbus.  
'''Опрос событий будет работать только если в сети нет устройств с одинаковым slave ID.''' Это связано с тем, что арбитраж устройств при опросе событий выполняется по его Modbus-адресу, а не по серийному номеру устройства, как для остальных функций Быстрого Modbus.  


<!--T:14-->
События передаются списком. Если с момента последнего опроса в устройстве произошло несколько событий, то при следующем запросе они будут переданы в одном ответе. Размер пакета ограничен 256 байтами. Если какие то события не поместились в отправку, они будут переданы в следующем пакете.
События передаются списком. Если с момента последнего опроса в устройстве произошло несколько событий, то при следующем запросе они будут переданы в одном ответе. Размер пакета ограничен 256 байтами. Если какие то события не поместились в отправку, они будут переданы в следующем пакете.


<!--T:15-->
Если между опросами событий значение регистра изменилось несколько раз, например, значение счетчика нажатий увеличилось на несколько единиц, то будет сгенерировано одно событие, а при опросе будет передано последнее актуальное значение счетчика.  
Если между опросами событий значение регистра изменилось несколько раз, например, значение счетчика нажатий увеличилось на несколько единиц, то будет сгенерировано одно событие, а при опросе будет передано последнее актуальное значение счетчика.  


<!--T:16-->
Если какое то устройство на шине не поддерживает расширение, то оно все равно будет работать и отвечать на стандартные запросы. Аналогично если устройство с Быстрым Modbus опрашивается мастером, который ничего не знает о расширении, оно будет опрашиваться стандартными функциями чтения и записи.
Если какое то устройство на шине не поддерживает расширение, то оно все равно будет работать и отвечать на стандартные запросы. Аналогично если устройство с Быстрым Modbus опрашивается мастером, который ничего не знает о расширении, оно будет опрашиваться стандартными функциями чтения и записи.


===Работа с событиями===
===Работа с событиями=== <!--T:17-->
В веб-интерфейсе контроллера пока нет специальных инструментов для работы с событиями. Ниже описаны доступные способы настройки.
В веб-интерфейсе контроллера пока нет специальных инструментов для работы с событиями. Ниже описаны доступные способы настройки.


===Как отключить события?===
===Как отключить события?=== <!--T:18-->
 
По-умолчанию контроллер разрешает генерацию событий всем устройствам. Но в некоторых случаях может быть нужно отключить события, например, если использование нестандартных функций протокола запрещено на предприятии политикой безопасности. Отключить события можно двумя способами:
 
#В шаблоне устройства установить параметр sporadic в значение false.
#В веб-интерфейсе контроллера в настройках serial-устройств установить период опроса параметра в значение «Не опрашивать».


<!--T:19-->
В шаблонах устройств, поддерживающих быстрый Modbus, включена работа по событиям для всех регистров, у которых генерация событий имеет смысл. В некоторых случаях может быть нужно отключить события, например, если использование нестандартных функций протокола запрещено на предприятии политикой безопасности. В веб-интерфейсе контроллера пока нет специальных инструментов для работы с событиями. Поэтому отключить события можно так:
#В шаблоне устройства у параметра '''sporadic''' сменить значение на '''false'''.
#Отключить опрос канала совсем. Для этого в веб-интерфейсе контроллера в настройках serial-устройств установить период опроса параметра в значение «Не опрашивать».
<gallery mode="packed" heights="150px" caption="Отключение опроса событий">
Image: sporadic1.png | Установить параметр '''sporadic''' в значение '''false'''
Image: sporadic2.png | Установить период опроса в значение «Не опрашивать»
</gallery>


===Приоритет опроса событий===
===Приоритет опроса событий=== <!--T:20-->
На запрос событий одновременно может ответить только одно устройство. Поэтому если события сгенерировали несколько устройств, то первым на запрос ответит то, у которого меньше slave ID. Чтобы это выяснить устройства проводят арбитраж, который подробно описан на github.
[[File:priority_setting.png|500px|thumb|right|Настройка приоритета опроса событий в веб-интерфейсе контроллера Wiren Board]]
На запрос событий одновременно может ответить только одно устройство. Поэтому если события сгенерировали несколько устройств, то первым на запрос ответит то, у которого меньше slave ID. Чтобы это выяснить устройства проводят арбитраж, который подробно описан на [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md github].


<!--T:21-->
Однако можно установить высокий приоритет для отдельного устройства или нескольких устройств. В этом случае устройства с высоким приоритетом будут опрашиваться вперед остальных даже если их slave ID больше. Если несколько устройств имеют высокий приоритет, то арбитраж сначала будет проведен между ними, а потом между устройствами с низким приоритетом.
Однако можно установить высокий приоритет для отдельного устройства или нескольких устройств. В этом случае устройства с высоким приоритетом будут опрашиваться вперед остальных даже если их slave ID больше. Если несколько устройств имеют высокий приоритет, то арбитраж сначала будет проведен между ними, а потом между устройствами с низким приоритетом.


Установить приоритет можно в веб-интерфейсе контроллера, в настройках драйвера serial-устройств. Если в параметре период опроса указать любое значение отличное от «В порядке очереди», то регистр будет иметь высокий приоритет.  
<!--T:22-->
Установить приоритет можно в веб-интерфейсе контроллера, в настройках драйвера serial-устройств. Если в параметре период опроса '''указать любое значение отличное от «В порядке очереди»''', то регистр будет иметь высокий приоритет.  


<!--T:23-->
Обратите внимание, что для регистров генерирующих события не важно какое время указано в поле период опроса. Запрос событий будет выполняться каждые 50 мс. Но реальное время реакции на события будет зависеть от количества устройств на шине и событий, наличия ошибок. Тем не менее это время будет значительно меньше чем при опросе стандартными командами
Обратите внимание, что для регистров генерирующих события не важно какое время указано в поле период опроса. Запрос событий будет выполняться каждые 50 мс. Но реальное время реакции на события будет зависеть от количества устройств на шине и событий, наличия ошибок. Тем не менее это время будет значительно меньше чем при опросе стандартными командами


===Поддержка события в прошивках устройств===
===Поддержка событий в прошивках=== <!--T:24-->
В таблице указаны устройства и версии прошивок, в которых появилась поддержка событий.
{|  border="1" class="wikitable"
! Устройство || Версия прошивки, в которой появились события
|-
| 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
|-
|}


==Сканирование устройств на шине==
==Сканирование устройств на шине== <!--T:25-->
[[Image: Scan-screen.png |300px|thumb|right| Сканирование устройств на вкладке ''Настройки → Сканирование'']]
Обычно инсталляция содержит несколько slave-устройств в щите или в поле на одной шине RS-485. Каждое устройство имеет адрес, который пользователь может менять. При монтаже адреса slave-устройств переписываются с корпуса устройства и вносятся вручную в конфигурацию мастера. Это не очень удобно.
Обычно инсталляция содержит несколько slave-устройств в щите или в поле на одной шине RS-485. Каждое устройство имеет адрес, который пользователь может менять. При монтаже адреса slave-устройств переписываются с корпуса устройства и вносятся вручную в конфигурацию мастера. Это не очень удобно.
Чтобы упростить конфигурирование устройств есть функция сканирования шины. Она была доступна в контроллере Wiren Board и до выхода расширения Быстрый Modbus. С появлением расширения добавилась возможность быстро сканировать шину без необходимости выжидать таймаут для каждого несуществующего адреса.
Чтобы упростить конфигурирование устройств есть функция сканирования шины. Она была доступна в контроллере Wiren Board и до выхода расширения Быстрый Modbus. С появлением расширения добавилась возможность быстро сканировать шину без необходимости выжидать таймаут для каждого несуществующего адреса.


<!--T:26-->
Поэтому с расширением Быстрый Modbus сканирование работает в двух режимах: быстрое и медленное.  
Поэтому с расширением Быстрый Modbus сканирование работает в двух режимах: быстрое и медленное.  


<!--T:27-->
В медленном сканировании используется скрипт, который перебирает все возможные адреса на шине и ждет от них ответа в течение определенного времени. Процесс занимает несколько минут и зависит от настроек связи устройств: скорости, стоповых битов и т.п. Режим медленного сканирования сохранен для поддержки устройств со старыми версиями прошивок.
В медленном сканировании используется скрипт, который перебирает все возможные адреса на шине и ждет от них ответа в течение определенного времени. Процесс занимает несколько минут и зависит от настроек связи устройств: скорости, стоповых битов и т.п. Режим медленного сканирования сохранен для поддержки устройств со старыми версиями прошивок.


<!--T:28-->
Быстрое сканирование выполняется значительно быстрее и позволяет обнаруживать устройства поддерживающие Быстрый Modbus практически мгновенно. В режиме быстрого сканирования мастер отправляет широковещательный запрос в шину, а устройства по очереди отвечают данными о себе. Очередность определяет арбитраж.
Быстрое сканирование выполняется значительно быстрее и позволяет обнаруживать устройства поддерживающие Быстрый Modbus практически мгновенно. В режиме быстрого сканирования мастер отправляет широковещательный запрос в шину, а устройства по очереди отвечают данными о себе. Очередность определяет арбитраж.


<!--T:29-->
Функция сканирования доступна в веб-интерфейсе контроллера в разделе '''Настройки → Сканирование'''.  
Функция сканирования доступна в веб-интерфейсе контроллера в разделе '''Настройки → Сканирование'''.  


<!--T:30-->
Текущие возможности функции сканирования в веб-интерфейсе:
Текущие возможности функции сканирования в веб-интерфейсе:
*отображение всех устройств Wiren Board, подключенных к контроллеру,
*отображение всех устройств Wiren Board, подключенных к контроллеру,
Строка 74: Строка 138:
*обнаружение устройств с разными параметрами связи на одной шине.
*обнаружение устройств с разными параметрами связи на одной шине.


При запуске функции сканирования в веб-интерфейсе контроллера сначала выполняется быстрое сканирование, затем — медленное. Это можно увидеть в статусе сканирования:
<!--T:31-->
При запуске функции сканирования в веб-интерфейсе контроллера сначала выполняется быстрое сканирование, затем — медленное. Это можно увидеть в статусе сканирования.


===Изменение Modbus-адреса устройств===
===Изменение Modbus-адреса устройств=== <!--T:32-->
Для устройств, которые поддерживают Быстрый Modbus, можно задать новые адреса, обращаясь к устройству по уникальному серийному номеру. Это удобно когда на шине обнаружено несколько устройств с одинаковым адресом.
Для устройств, которые поддерживают Быстрый Modbus, можно задать новые адреса, обращаясь к устройству по уникальному серийному номеру. Это удобно когда на шине обнаружено несколько устройств с одинаковым адресом.
Изменение адресов выполняется с помощью утилиты wb-modbus-scanner и пока не поддерживается веб-интерфейсом. Описание расширенных команд и референсная реализация утилиты доступны в репозитории утилиты.
Изменение адресов выполняется с помощью утилиты ''wb-modbus-scanner'' и пока не поддерживается веб-интерфейсом. Описание расширенных команд и референсная реализация утилиты доступны в [https://github.com/wirenboard/wb-modbus-ext-scanner репозитории утилиты].


Для смены адреса устройства подключитесь к контроллеру через SSH.
<!--T:33-->
Установите утилиту командой:
Для смены адреса устройства подключитесь к контроллеру через [[SSH |SSH]].


<!--T:34-->
#Установите утилиту командой:
#:<syntaxhighlight lang="bash">
apt update && apt install wb-modbus-ext-scanner
apt update && apt install wb-modbus-ext-scanner
 
</syntaxhighlight>
Остановите драйвер wb-mqtt-serial:
#Остановите драйвер wb-mqtt-serial:
 
#:<syntaxhighlight lang="bash">
systemctl stop wb-mqtt-serial
systemctl stop wb-mqtt-serial
 
</syntaxhighlight>
Выполните команду
#Выполните команду
 
#:<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>
 
#:где,      /dev/ttyRS485-1 порт к которому подключено устройство,
где,      /dev/ttyRS485-1 - порт к которому подключено устройство
#:115200 скорость обмена,
115200 - скорость обмена  
#:4267937719 серийный номер устройства,
4267937719 - серийный номер устройства
#:3 новый slave ID.
3 - новый slave ID
#В результате должен появиться такой вывод:
В результате должен появиться такой вывод:
#:<syntaxhighlight lang="bash">
Serial port: /dev/ttyRS485-1
Serial port: /dev/ttyRS485-1
Use baud 115200
Use baud 115200
Change ID for device with serial  4267937719 [FE638FB7] New ID: 3
Change ID for device with serial  4267937719 [FE638FB7] New ID: 3
</syntaxhighlight>
#Запустите обратно драйвер wb-mqtt-serial:
#:<syntaxhighlight lang="bash">
systemctl start wb-mqtt-serial
</syntaxhighlight>


=== Поддержка сканирования в прошивках=== <!--T:35-->


Запустите обратно драйвер wb-mqtt-serial:
<!--T:36-->
 
{|  border="1" class="wikitable"
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
|-
|}


==Полезные ссылки==
==Полезные ссылки== <!--T:37-->
* [https://habr.com/p/772308/ Прокачиваем Modbus: арбитраж, сканирование шины, события] - статья с подробностями реализации расширения
* [https://github.com/wirenboard/wb-modbus-ext-scanner/blob/main/protocol.md Описание расширения на GitHub]
* [[Modbus | Описание протокола Modbus]]
* [https://github.com/wirenboard/wb-modbus-ext-scanner Репозиторий утилиты сканирования]
</translate>

Текущая версия на 16:50, 13 марта 2024

Другие языки:

Общие сведения

Насколько быстр Быстрый Modbus?

Мы производим устройства, которые работают по стандартному протоколу Modbus RTU. Протокол старый и надежный, но его работа основана на последовательном опросе всех регистров на шине. К сожалению это ограничивает скорость опроса при большом количестве устройств. Мы решили исправить этот недостаток и выпустили свое расширение протокола под названием «Быстрый Modbus».

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

Широковещательные команды являются зарезервированной функцией Modbus и не нарушают совместимость со стандартным протоколом. Устройства не поддерживающие Быстрый Modbus работают без проблем.

Быстрый Modbus доступен в текущем релизе ПО контроллера и устройствах Wiren Board со свежими прошивками.

Ниже описаны новые функции расширения Быстрый Modbus: события на шине и быстрое сканирование устройств. Все сказанное применимо только к устройствам Wiren Board.

Статья с техническими подробностями: Прокачиваем Modbus: арбитраж, сканирование шины, события.

События на шине

События представляют собой пакеты данных для ответа на широковещательные запросы от мастера, и генерируются, когда в устройстве происходит изменение значения модбас-регистра.

Не все регистры генерируют события. Отличить регистры, поддерживающие события, можно по значку ⚡ в таблицах Modbus-регистров устройств.

События возникают в двух случаях:

  1. При изменении значения регистра, поддерживающего события.
  2. При перезагрузке устройства. Это единственное событие которое возникает сразу после запуска устройства.

Для аналоговых каналов события по умолчанию в прошивках большинства устройств отключены, такие регистры опрашиваются по стандартному Modbus. Там, где они включены, например уровень движения в WB-MSW4 и значения напряжений в WB-MAP, для избежания спама в линию, события генерируются только при изменении значения на величину записанного в прошивке гистерезиса. Гистерезис для каждого такого канала выбран производителем устройства и не может быть изменён пользователем. Драйвер wb-mqtt-serial такие регистры в параллель событиям опрашивает и по обычному Modbus.

Как это работает?

Опрос регистров в Быстром Modbus и стандартном протоколе
Распределение времени опроса событий

Мастер каждые 50 мс отправляет в шину широковещательный запрос, который получают все устройства на шине. Если устройство сгенерировало событие оно отправляет ответ содержащий идентификатор события, его тип и дополнительные данные. Если таких устройств несколько, они устраивают арбитраж, в котором побеждает устройство у которого Slave ID меньше. Подробнее про арбитраж читайте на github.

Мастер получает ответ от устройства и отправляет подтверждение, о том что сообщение получено. Только после этого устройство сбросит возникшее событие. Если подтверждения нет, устройство отправит этот же ответ снова при следующем запросе.

Опрос событий будет работать только если в сети нет устройств с одинаковым slave ID. Это связано с тем, что арбитраж устройств при опросе событий выполняется по его Modbus-адресу, а не по серийному номеру устройства, как для остальных функций Быстрого Modbus.

События передаются списком. Если с момента последнего опроса в устройстве произошло несколько событий, то при следующем запросе они будут переданы в одном ответе. Размер пакета ограничен 256 байтами. Если какие то события не поместились в отправку, они будут переданы в следующем пакете.

Если между опросами событий значение регистра изменилось несколько раз, например, значение счетчика нажатий увеличилось на несколько единиц, то будет сгенерировано одно событие, а при опросе будет передано последнее актуальное значение счетчика.

Если какое то устройство на шине не поддерживает расширение, то оно все равно будет работать и отвечать на стандартные запросы. Аналогично если устройство с Быстрым Modbus опрашивается мастером, который ничего не знает о расширении, оно будет опрашиваться стандартными функциями чтения и записи.

Работа с событиями

В веб-интерфейсе контроллера пока нет специальных инструментов для работы с событиями. Ниже описаны доступные способы настройки.

Как отключить события?

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

  1. В шаблоне устройства у параметра sporadic сменить значение на false.
  2. Отключить опрос канала совсем. Для этого в веб-интерфейсе контроллера в настройках serial-устройств установить период опроса параметра в значение «Не опрашивать».

Приоритет опроса событий

Настройка приоритета опроса событий в веб-интерфейсе контроллера Wiren Board

На запрос событий одновременно может ответить только одно устройство. Поэтому если события сгенерировали несколько устройств, то первым на запрос ответит то, у которого меньше 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-адреса устройств

Для устройств, которые поддерживают Быстрый Modbus, можно задать новые адреса, обращаясь к устройству по уникальному серийному номеру. Это удобно когда на шине обнаружено несколько устройств с одинаковым адресом. Изменение адресов выполняется с помощью утилиты wb-modbus-scanner и пока не поддерживается веб-интерфейсом. Описание расширенных команд и референсная реализация утилиты доступны в репозитории утилиты.

Для смены адреса устройства подключитесь к контроллеру через SSH.

  1. Установите утилиту командой:
    apt update && apt install wb-modbus-ext-scanner
    
  2. Остановите драйвер wb-mqtt-serial:
    systemctl stop wb-mqtt-serial
    
  3. Выполните команду
    wb-modbus-scanner -d /dev/ttyRS485-1 -b 115200 -s 4267937719 -i 3
    
    где, /dev/ttyRS485-1 — порт к которому подключено устройство,
    115200 — скорость обмена,
    4267937719 — серийный номер устройства,
    3 — новый slave ID.
  4. В результате должен появиться такой вывод:
    Serial port: /dev/ttyRS485-1
    Use baud 115200
    Change ID for device with serial   4267937719 [FE638FB7] New ID: 3
    
  5. Запустите обратно драйвер 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

Полезные ссылки