Connecting Third Party Devices to Wiren Board: различия между версиями
(добавил информацию про обнаружение устройств) |
|||
(не показано 46 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Как | {{DISPLAYTITLE: Как подключить Modbus RTU-устройство стороннего производителя к контроллеру Wirenboard?}} | ||
== Введение == | == Введение == | ||
Modbus RTU — один из распространенных протоколов для связи устройств. Если устройство стороннего производителя поддерживает протокол Modbus RTU, то его можно подключить к контроллеру Wirenboard. | |||
Список всех поддерживаемых контроллером протоколов можно найти в [[Supported_devices | Таблице поддерживаемых устройств]]. | |||
Некоторые производители Modbus-устройств не придерживаются стандартов протокола, что может сказаться на работе всей шины. Поэтому рекомендуем проверять работу новых устройств на отдельной шине и только после того, как добьётесь стабильной работы, подключать к ней другие Modbus-устройства. | Некоторые производители Modbus-устройств не придерживаются стандартов протокола, что может сказаться на работе всей шины. Поэтому рекомендуем проверять работу новых устройств на отдельной шине и только после того, как добьётесь стабильной работы, подключать к ней другие Modbus-устройства. | ||
== | == Подключите устройство == | ||
Для подключения стороннего устройства по протоколу Modbus RTU: | |||
# Откройте документацию на устройство и | # Откройте документацию на устройство и убедитесь, что оно имеет интерфейс RS-485 и поддерживает протокол Modbus RTU. | ||
# Проверьте, нет ли вашего устройства в [[Supported_devices | Таблице поддерживаемых устройств]]. Если устройство там есть — используйте указанные в таблице рекомендации по подключению. | |||
# Определите, какая информация вам нужна и в каких регистрах она находится. | |||
# Подключите устройство к контроллеру по [[RS-485 | шине RS-485]]. | # Подключите устройство к контроллеру по [[RS-485 | шине RS-485]]. | ||
# Узнайте в документации на устройство параметры подключения: скорость (Baud rate), Количество битов данных (Data bits), Бит чётности (Parity), Количество стоповых битов (Stop bits), Modbus-адрес устройства. | |||
# Проверьте связь с устройством и правильность подключения: | # Проверьте связь с устройством и правильность подключения: | ||
#* {{Wbincludes:Stop wb-mqtt-serial}} | #* {{Wbincludes:Stop wb-mqtt-serial}} | ||
#* Подключитесь к устройству с помощью утилиты [[modbus_client]] и считайте данные из любого известного вам регистра. | #* Подключитесь к устройству с помощью утилиты [[modbus_client]] и считайте данные из любого известного вам регистра. | ||
Если чтение данных пройдёт успешно — вы верно подключили устройство и настроили параметры соединения. | |||
== Поиск подключенных устройств на шине == | |||
После физического подключения устройства не всегда получается сразу установить с ним связь: параметры обмена могут быть неизвестны или забыты. Для этого можно воспользоваться утилитой [[Wb-mb-explorer | '''wb-mb-explorer''']]. Она позволяет просканировать шину на наличие устройств: проверить наличие подключенных устройств с указанными параметрами обмена, подобрать параметры обмена для устройства с указанным адресом, провести полный перебор все возможных комбинаций параметров обмена. Если будет обнаружено устройство Wirenboard, то для него будет выведена информация о модели устройства, его серийном номере, версии прошивки и параметрах обмена. Для стороннего modbus-устройства будут выведены только параметры обмена. | |||
== | |||
== | == Создайте шаблон == | ||
Для удобства использования устройства [https://github.com/wirenboard/wb-mqtt-serial#%D0%A4%D0%B0%D0%B9%D0%BB-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D0%B8-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B создайте шаблон для драйвера wb-mqtt-serial] в шаблоне укажите: | |||
# | * регистры, в которых хранятся нужные вам данные; | ||
* параметры инициализации, если они необходимы; | |||
* обязательно в шаблоне задайте параметр <code>guard_interval_us</code> (задержка перед записью каждого запроса в порт), значение которого должно быть не менее 3.5 символа при выбранной скорости. Нужное значение рассчитывается по формуле: | |||
<code>guard_interval_us = (3.5*11*10<sup>6</sup>)/(скорость в бит/с)</code>. | |||
< | <p>Например, для скорости 9600 бит/с <code>guard_interval_us = (3.5*11*10<sup>6</sup>)/9600 = 4000 мкс</code>. При проблемах с подключением стороннего устройства для теста это значение можно увеличить (например до 100000 мкс), так как сторонние устройства иногда работают не совсем корректно.</p> | ||
* для проверки корректности шаблона выполните на контроллере команду <code>wb-mqtt-serial -g</code>. | |||
Эта команда проверит на корректность файлы шаблонов в директориях <code>/usr/share/wb-mqtt-serial/templates</code> (директория предустановленных шаблонов) и <code>/etc/wb-mqtt-serial.conf.d/templates</code> (директория для пользовательских шаблонов). Если в шаблонах содержатся ошибки, то на экран будут выведены диагностические сообщения с указанием имени шаблона и ошибка. | |||
== | == Особенности реализации Modbus RTU в устройствах Wiren Board == | ||
Стандартом Modbus RTU предусмотрен обязательный интервал тишины в 3.5 символа между фреймами данных (под символом подразумевается посылка, состоящая из стартового бита, битов данных, бита четности и стоп-битов). | Стандартом Modbus RTU предусмотрен обязательный интервал тишины в 3.5 символа между фреймами данных (под символом подразумевается посылка, состоящая из стартового бита, битов данных, бита четности и стоп-битов). | ||
Строка 164: | Строка 39: | ||
Поэтому, чтобы соответствовать требованиям протокола Modbus-RTU, нужно для сторонних устройств задавать параметр ''guard_interval_us''. Этот параметр задает задержку перед записью каждого запроса в порт. | Поэтому, чтобы соответствовать требованиям протокола Modbus-RTU, нужно для сторонних устройств задавать параметр ''guard_interval_us''. Этот параметр задает задержку перед записью каждого запроса в порт. | ||
== Совместная работа модулей Wiren Board и устройств сторонних производителей на одной шине== | |||
При работе модулей Wirenboard и устройств сторонних производителей на одной шине RS-485 параметр <code>guard_interval_us</code> следует задавать целиком для порта, также следует изменить параметр '''RS-485 Response Delay (ms)''' (Задержка перед ответом по RS-485) у модулей Wirenboard (если такой параметр имеется), например установив значение 8 мс. Это необходимо, так как несоблюдение интервалов тишины при обращении к модулям Wirenboard приводит к сбою в работе некоторых устройств сторонних производителей. | |||
== Полезные ссылки == | == Полезные ссылки == | ||
Строка 270: | Строка 47: | ||
* [[RS-485|Описание шины RS-485]] | * [[RS-485|Описание шины RS-485]] | ||
* [https://github.com/wirenboard/wb-mqtt-serial Документация wb-mqtt-serial] | * [https://github.com/wirenboard/wb-mqtt-serial Документация wb-mqtt-serial] | ||
* [https://github.com/wirenboard/ | * [https://github.com/wirenboard/homeui/blob/master/conventions.md Описание соглашений MQTT] | ||
* [http://json.parser.online.fr Онлайн проверка JSON] | * [http://json.parser.online.fr Онлайн проверка JSON] | ||
* Темы на | * Темы на форуме: | ||
** [https://support.wirenboard.com/t/oshibki-pri-chtenii-bolid-s2000-pp/8080 Ошибки при чтении Bolid С2000-ПП] | ** [https://support.wirenboard.com/t/oshibki-pri-chtenii-bolid-s2000-pp/8080 Ошибки при чтении Bolid С2000-ПП] | ||
** [https://support.wirenboard.com/t/request-timed-out/8344/17 Request timed out] | ** [https://support.wirenboard.com/t/request-timed-out/8344/17 Request timed out] |
Версия 09:56, 30 июня 2022
Введение
Modbus RTU — один из распространенных протоколов для связи устройств. Если устройство стороннего производителя поддерживает протокол Modbus RTU, то его можно подключить к контроллеру Wirenboard.
Список всех поддерживаемых контроллером протоколов можно найти в Таблице поддерживаемых устройств.
Некоторые производители Modbus-устройств не придерживаются стандартов протокола, что может сказаться на работе всей шины. Поэтому рекомендуем проверять работу новых устройств на отдельной шине и только после того, как добьётесь стабильной работы, подключать к ней другие Modbus-устройства.
Подключите устройство
Для подключения стороннего устройства по протоколу Modbus RTU:
- Откройте документацию на устройство и убедитесь, что оно имеет интерфейс RS-485 и поддерживает протокол Modbus RTU.
- Проверьте, нет ли вашего устройства в Таблице поддерживаемых устройств. Если устройство там есть — используйте указанные в таблице рекомендации по подключению.
- Определите, какая информация вам нужна и в каких регистрах она находится.
- Подключите устройство к контроллеру по шине RS-485.
- Узнайте в документации на устройство параметры подключения: скорость (Baud rate), Количество битов данных (Data bits), Бит чётности (Parity), Количество стоповых битов (Stop bits), Modbus-адрес устройства.
- Проверьте связь с устройством и правильность подключения:
- Остановите драйвер wb-mqtt-serial или иное ПО, которое опрашивает устройство.
- Подключитесь к устройству с помощью утилиты modbus_client и считайте данные из любого известного вам регистра.
Если чтение данных пройдёт успешно — вы верно подключили устройство и настроили параметры соединения.
Поиск подключенных устройств на шине
После физического подключения устройства не всегда получается сразу установить с ним связь: параметры обмена могут быть неизвестны или забыты. Для этого можно воспользоваться утилитой wb-mb-explorer. Она позволяет просканировать шину на наличие устройств: проверить наличие подключенных устройств с указанными параметрами обмена, подобрать параметры обмена для устройства с указанным адресом, провести полный перебор все возможных комбинаций параметров обмена. Если будет обнаружено устройство Wirenboard, то для него будет выведена информация о модели устройства, его серийном номере, версии прошивки и параметрах обмена. Для стороннего modbus-устройства будут выведены только параметры обмена.
Создайте шаблон
Для удобства использования устройства создайте шаблон для драйвера wb-mqtt-serial в шаблоне укажите:
- регистры, в которых хранятся нужные вам данные;
- параметры инициализации, если они необходимы;
- обязательно в шаблоне задайте параметр
guard_interval_us
(задержка перед записью каждого запроса в порт), значение которого должно быть не менее 3.5 символа при выбранной скорости. Нужное значение рассчитывается по формуле:
guard_interval_us = (3.5*11*106)/(скорость в бит/с)
.
Например, для скорости 9600 бит/с guard_interval_us = (3.5*11*106)/9600 = 4000 мкс
. При проблемах с подключением стороннего устройства для теста это значение можно увеличить (например до 100000 мкс), так как сторонние устройства иногда работают не совсем корректно.
- для проверки корректности шаблона выполните на контроллере команду
wb-mqtt-serial -g
.
Эта команда проверит на корректность файлы шаблонов в директориях /usr/share/wb-mqtt-serial/templates
(директория предустановленных шаблонов) и /etc/wb-mqtt-serial.conf.d/templates
(директория для пользовательских шаблонов). Если в шаблонах содержатся ошибки, то на экран будут выведены диагностические сообщения с указанием имени шаблона и ошибка.
Особенности реализации Modbus RTU в устройствах Wiren Board
Стандартом Modbus RTU предусмотрен обязательный интервал тишины в 3.5 символа между фреймами данных (под символом подразумевается посылка, состоящая из стартового бита, битов данных, бита четности и стоп-битов).
Для ускорения опроса устройств Wiren Board мы соблюдаем этот интервал только перед первым запросом к следующему в цикле опроса устройству (параметр frame_timeout_ms в шаблонах устройств).
Поэтому, чтобы соответствовать требованиям протокола Modbus-RTU, нужно для сторонних устройств задавать параметр guard_interval_us. Этот параметр задает задержку перед записью каждого запроса в порт.
Совместная работа модулей Wiren Board и устройств сторонних производителей на одной шине
При работе модулей Wirenboard и устройств сторонних производителей на одной шине RS-485 параметр guard_interval_us
следует задавать целиком для порта, также следует изменить параметр RS-485 Response Delay (ms) (Задержка перед ответом по RS-485) у модулей Wirenboard (если такой параметр имеется), например установив значение 8 мс. Это необходимо, так как несоблюдение интервалов тишины при обращении к модулям Wirenboard приводит к сбою в работе некоторых устройств сторонних производителей.