Fast Modbus ⚡

Материал из Wiren Board
Версия от 16:02, 29 декабря 2023; A.Degtyarev (обсуждение | вклад) (Новая страница: «{{DISPLAYTITLE: Fast Modbus ⚡}} ===General information=== We produce devices that operate on the standard Modbus RTU protocol. The protocol is old and reliable, but its operation is based on sequentially polling all the registers on the bus. Unfortunately, this limits the polling speed when there are a large number of devices. We have decided to address this limitation and have released our own protocol extension called "Fast Modbus".»)

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

General information

We produce devices that operate on the standard Modbus RTU protocol. The protocol is old and reliable, but its operation is based on sequentially polling all the registers on the bus. Unfortunately, this limits the polling speed when there are a large number of devices. We have decided to address this limitation and have released our own protocol extension called "Fast Modbus".

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

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

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

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

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

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

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

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

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

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

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

Опрос регистров в Быстром 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-MDM3 2.7.0 (в testing)
WB-LED, WB-MRGBW-D 3.4.0
WB-MSWx 4.31.0 (в testing)
WB-M1W2 4.32.0 (в testing)

Сканирование устройств на шине

Сканирование устройств на вкладке Настройки → Сканирование

Обычно инсталляция содержит несколько 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