Fast Modbus: различия между версиями
Matveevrj (обсуждение | вклад) |
Matveevrj (обсуждение | вклад) |
||
(не показаны 33 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
<languages/><translate> | |||
{{DISPLAYTITLE: Быстрый Modbus}} | {{DISPLAYTITLE: Быстрый Modbus ⚡}} | ||
===Общие сведения=== | ===Общие сведения=== <!--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--> | ||
<!--T:19--> | |||
В шаблонах устройств, поддерживающих быстрый Modbus, включена работа по событиям для всех регистров, у которых генерация событий имеет смысл. В некоторых случаях может быть нужно отключить события, например, если использование нестандартных функций протокола запрещено на предприятии политикой безопасности. В веб-интерфейсе контроллера пока нет специальных инструментов для работы с событиями. Поэтому отключить события можно так: | |||
#В шаблоне устройства у параметра '''sporadic''' сменить значение на '''false'''. | |||
#Отключить опрос канала совсем. Для этого в веб-интерфейсе контроллера в настройках serial-устройств установить период опроса параметра в значение «Не опрашивать». | |||
<gallery mode="packed" heights="150px" caption="Отключение опроса событий"> | |||
Image: sporadic1.png | Установить параметр '''sporadic''' в значение '''false''' | |||
Image: sporadic2.png | Установить период опроса в значение «Не опрашивать» | |||
</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 больше. Если несколько устройств имеют высокий приоритет, то арбитраж сначала будет проведен между ними, а потом между устройствами с низким приоритетом. | ||
Установить приоритет можно в веб-интерфейсе контроллера, в настройках драйвера serial-устройств. Если в параметре период опроса указать любое значение отличное от «В порядке очереди», то регистр будет иметь высокий приоритет. | <!--T:22--> | ||
Установить приоритет можно в веб-интерфейсе контроллера, в настройках драйвера 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 | | 2.7.0 | ||
|- | |- | ||
| WB-LED, WB-MRGBW-D | | WB-LED, WB-MRGBW-D | ||
| 3.4.0 | | 3.4.0 | ||
|- | |- | ||
| | | WB-MSWx, WB-MIR v.2 | ||
| 4.31.0 | | 4.31.0 | ||
|- | |- | ||
| WB-M1W2 | | WB-M1W2 | ||
| 4.32.0 | | 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, подключенных к контроллеру, | ||
Строка 95: | Строка 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"> | ||
Строка 130: | Строка 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 RTU. Протокол старый и надежный, но его работа основана на последовательном опросе всех регистров на шине. К сожалению это ограничивает скорость опроса при большом количестве устройств. Мы решили исправить этот недостаток и выпустили свое расширение протокола под названием «Быстрый Modbus».
В расширении используется широковещательные команды, которые позволяют обойтись без поочередного опроса каждого регистра.
Широковещательные команды являются зарезервированной функцией Modbus и не нарушают совместимость со стандартным протоколом. Устройства не поддерживающие Быстрый Modbus работают без проблем.
Быстрый Modbus доступен в текущем релизе ПО контроллера и устройствах Wiren Board со свежими прошивками.
Ниже описаны новые функции расширения Быстрый Modbus: события на шине и быстрое сканирование устройств. Все сказанное применимо только к устройствам Wiren Board.
Статья с техническими подробностями: Прокачиваем Modbus: арбитраж, сканирование шины, события.
События на шине
События представляют собой пакеты данных для ответа на широковещательные запросы от мастера, и генерируются, когда в устройстве происходит изменение значения модбас-регистра.
Не все регистры генерируют события. Отличить регистры, поддерживающие события, можно по значку ⚡ в таблицах Modbus-регистров устройств.
События возникают в двух случаях:
- При изменении значения регистра, поддерживающего события.
- При перезагрузке устройства. Это единственное событие которое возникает сразу после запуска устройства.
Для аналоговых каналов события по умолчанию в прошивках большинства устройств отключены, такие регистры опрашиваются по стандартному Modbus. Там, где они включены, например уровень движения в WB-MSW4 и значения напряжений в WB-MAP, для избежания спама в линию, события генерируются только при изменении значения на величину записанного в прошивке гистерезиса. Гистерезис для каждого такого канала выбран производителем устройства и не может быть изменён пользователем. Драйвер wb-mqtt-serial такие регистры в параллель событиям опрашивает и по обычному 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-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.
- Установите утилиту командой:
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
- Репозиторий утилиты сканирования