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

Материал из Wiren Board
 
(не показано 28 промежуточных версий 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.
===Как это работает?=== <!--T:11-->
[[File:register_polling.png|500px|thumb|right|Опрос регистров в Быстром Modbus и стандартном протоколе]]
[[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].
Мастер каждые 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-->


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


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


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


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


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


===Поддержка события в прошивках устройств===
===Поддержка событий в прошивках=== <!--T:24-->
В таблице указаны устройства и версии прошивок, в которых появилась поддержка событий.
В таблице указаны устройства и версии прошивок, в которых появилась поддержка событий.
{|  border="1" class="wikitable"  
{|  border="1" class="wikitable"  
! Устройство || Версия прошивки, в которой появилась поддержка событий
! Устройство || Версия прошивки, в которой появились события
|-
|-
| WB-MRx, WB-MWAC
| WB-MRx, WB-MWAC
| 1.20.0
| 1.20.0
|-
| WB-MAPx
| 2.8.0
|-
|-
| WB-MDM3
| WB-MDM3
| 2.7.0 (в testing)
| 2.7.0
|-
|-
| WB-LED, WB-MRGBW-D
| WB-LED, WB-MRGBW-D
| 3.4.0
| 3.4.0
|-
|-
| WB-MSWx
| WB-MSWx, WB-MIR v.2
| 4.31.0 (в testing)
| 4.31.0
|-
|-
| WB-M1W2
| WB-M1W2
| 4.32.0 (в testing)
| 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, подключенных к контроллеру,
Строка 98: Строка 138:
*обнаружение устройств с разными параметрами связи на одной шине.
*обнаружение устройств с разными параметрами связи на одной шине.


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


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


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


<!--T:34-->
#Установите утилиту командой:
#Установите утилиту командой:
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
Строка 133: Строка 176:
</syntaxhighlight>
</syntaxhighlight>


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

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