Modbus
Узлы Modbus связывают программу зала с оборудованием, которое работает по Modbus TCP (по сети) или Modbus RTU и ASCII (по последовательной линии). Это датчики температуры и освещённости, реле и модули ввода-вывода, климатические контроллеры. Контроллер опрашивает устройство, показывает значение на панели и по кнопке панели записывает в устройство команду.
Как открыть окно узла и где найти справку — на странице «Узлы U-Logic». Подписи полей даны так, как они показаны в окне: у узлов Modbus они английские. Адреса и протоколы узлов задаются в программе; порты исходящих подключений к оборудованию — на странице «Сетевые порты и протоколы».
Подключение к устройству
Подключение настраивается один раз и общее для всех привязанных к нему узлов Modbus. В окне любого узла рядом с полем «Server» нажмите кнопку с карандашом (или «+» для нового подключения): откроется окно «Добавить новый конфиг узел modbus-client». Узлы обращаются к устройству через это подключение по очереди: запросы всех узлов встают в общую очередь.
Окно разбито на вкладки Settings, Queues и Optionals. Главное — на первой.
Окно подключения Modbus, вкладка Settings (Type — TCP): 1 — Type, 2 — Host, 3 — Port, 4 — TCP Type, 5 — Unit-Id, 6 — Timeout (ms)
№ |
Поле |
Что значит |
|---|---|---|
— |
Имя |
подпись подключения в списке |
1 |
Type |
|
2 |
Host |
для |
3 |
Port |
для |
4 |
TCP Type |
для |
— |
Serial port, Baud rate |
для |
— |
Serial type |
для |
5 |
Unit-Id |
номер устройства на линии или за шлюзом; по умолчанию 1. Если в узле поле Unit-Id оставить пустым, узел использует это значение |
6 |
Timeout (ms) |
сколько ждать ответа; по умолчанию 1000 |
— |
Reconnect on timeout, Reconnect timeout (ms) |
переподключаться ли после тайм-аута и через сколько; по умолчанию 2000 |
На вкладке Queues: Queue commands (ставить запросы в очередь), Queue delay (ms) (пауза между запросами) и UnitId’s in parallel queues (параллельные очереди для разных Unit-Id; по умолчанию включено, для последовательной линии без шлюза выключите). На вкладке Optionals — журналы подключения; для начала работы их не трогайте.
Адрес, порт, Unit-Id и скорость возьмите из описания устройства или у интегратора. При неверном значении любого из них результат один: ответа нет.
Пример: температура зала на панели
Зачем. Показать на панели зала текущую температуру с датчика Modbus. Цепочка: Modbus - Read → change → api - helper - 2 → UI - Panel out.
Перетащите на рабочую область
Modbus - Read. Откройте его двойным щелчком.Рядом с «Server» создайте подключение, как описано выше: Type —
TCP, Host — адрес вашего датчика, Port и Unit-Id — по описанию датчика. Нажмите «Добавить».Заполните узел:
Поле
Значение в примере
FC
FC 3: Read Holding Registers(если в описании датчика значение лежит во входных регистрах —FC 4: Read Input Registers)Address
адрес регистра с температурой из описания датчика; допустимы числа от 0 до 65535
Quantity
1 — сколько регистров прочитать подряд
Poll Rate
5, единица —
second(s)Нажмите «Готово». В поле «Имя» можно вписать «Температура зала».
Подключите к первому выходу
Modbus - Readузелchange. Правило: установитьmsg.topicс типом «выражение»:{"Fp_Temp_lb": $string(payload[0] / 10) & " °C"}Первый выход отдаёт в
msg.payloadсписок прочитанных значений, поэтому нужное число —payload[0]. Деление на 10 — для датчика, который передаёт температуру в десятых долях градуса. Масштаб и знак значения смотрите в описании вашего датчика.Fp_Temp_lbзамените именем своей надписи в интерфейсе.Подключите
changeкapi - helper - 2: «Интерфейс (UI)» — ваш интерфейс, «Тип сообщения» —uiState, «Источник входных данных» —msg.topic, в «Объектах управления» добавьте надписьFp_Temp_lbс событием «Текст». Как устроен этот узел и как выбрать элемент — на странице «Изменение вида на панели».Выход
api - helper - 2подключите кUI - Panel out(если на вкладке его ещё нет, перетащите). Нажмите «Развернуть».
Цепочка примера: Modbus - Read «Температура зала» → change «Значение → надпись» → api - helper - 2 «Надпись температуры» → UI - Panel out; к первому выходу Modbus - Read подключён также debug «Что прочитал»
Что увидите. Раз в 5 секунд узел опрашивает датчик, и надпись на панели показывает значение вида 22.5 °C. Чтобы убедиться, что опрос идёт, подключите к первому выходу Modbus - Read узел debug («весь msg объект сообщения»): в payload будет список из одного числа.
Частые ошибки:
Надпись не меняется, в отладке пусто: чаще всего неверный Host, Port или Unit-Id в подключении либо датчик недоступен из сети контроллера.
Приходит не то число или ноль: функция не соответствует типу регистра (Holding вместо Input или наоборот) либо адрес сдвинут на единицу. В окне адрес вводится числом от 0 до 65535; если в описании датчика адрес записан иначе, пересчитайте его.
Второй выход
Modbus - Readотдаёт ответ устройства «как есть» (сырой буфер) — для показа значений его не используйте.Слишком частый опрос (малый Poll Rate при многих узлах на одном подключении) забивает общую очередь запросов: увеличьте период.
Запись значения по кнопке панели
Зачем. Включить реле или записать значение в регистр, когда в зале нажали кнопку. Цепочка: UI - Panel in → ui - switch → два change → Modbus - Write.
Соедините
UI - Panel inсui - switch(еслиUI - Panel inна вкладке уже есть, подключитесь к нему). Вui - switchпервое правило — кнопка «включить» с событиемpush; второе правило — кнопка «выключить» с событиемpush(или событиеreleaseкнопки «включить», если реле должно работать, пока кнопку держат). Как принимать события панели — на странице «Приём событий».К первому выходу подключите
change: установитьmsg.payload— число1. Ко второму — отдельныйchangeсmsg.payload— число0. Одно правилоchangeне подойдёт: второе правило того же узла затёрло бы первое.Оба
changeподключите к одномуModbus - Write: «Server» — то же подключение, что и в примере выше; FC —FC 5: Force Single Coil(одно реле); Address — адрес реле из описания устройства. ПриFC 5поля «Quantity» в окне нет.
Цепочка примера: UI - Panel in → ui - switch «Кнопки реле» → два change «Включить: 1» и «Выключить: 0» → Modbus - Write «Реле зала»
Что увидите. После нажатия кнопки «включить» реле включается, после «выключить» — выключается. Проверьте это на самом устройстве или прочитайте то же значение узлом Modbus - Read.
Какую функцию выбрать и что подать в msg.payload:
FC |
Что записывает |
Что в |
|---|---|---|
|
одно реле |
|
|
один регистр |
число от 0 до 65535 |
|
несколько реле |
список из |
|
несколько регистров |
список чисел от 0 до 65535 |
Предупреждение
Запись меняет состояние реального оборудования. Проверяйте адрес и значение по описанию устройства и не пробуйте запись «наугад» на включённом оборудовании.
Все узлы Modbus
В палитре 12 узлов Modbus. Для большинства задач достаточно Modbus - Read и Modbus - Write; остальные нужны, когда параметры запроса приходят в сообщении или нужна диагностика. Таблица — обзор; у каждого узла ниже свой раздел.
Узел |
Вход / выход |
Что делает |
Чем отличается; ключевые поля |
|---|---|---|---|
|
0 / 2 |
читает регистры сам, по таймеру |
Unit-Id, FC ( |
|
1 / 2 |
читает по входящему сообщению |
те же поля, но без Poll Rate: опрос запускает любое сообщение на входе (например, кнопка или |
|
1 / 2 |
читает, параметры берёт из сообщения |
в окне Server и «Delay to activate input»; Unit-Id, функция, адрес и количество приходят в |
|
1 / 2 |
записывает значение из |
Unit-Id, FC ( |
|
1 / 2 |
записывает, параметры берёт из сообщения |
в окне Server и «Delay to activate input»; в |
|
1 / 2 |
выполняет серию запросов по списку |
Server и список операций: Name, Function, Unit ID, Address, Quantity; список можно подменить сообщением |
|
1 / 1 |
запрос с нестандартным кодом функции |
Name, Unit ID, Server, Path to Map JSON, Select FC Map, Request Map Editor, Response Map Editor; для редких устройств |
|
1 / 1 |
меняет параметры подключения «на лету» |
Server, Empty Message on Modbus failure, Config msg on Modbus-Change, Show Activities, Show Errors; новые параметры ( |
|
1 / 1 |
следит за очередью запросов |
Unit-Id, Interval Time, уровни Low low level, Low level, High level, High high level, Server |
|
1 / 0 |
показывает ответ в состоянии узла |
Name, Register Max.; для диагностики |
|
1 / 1 |
выбирает значения из ответа по описанию регистров (IO-файлу) |
Filter, Registers, IO-File, Filter Response Buffer, Filter Values, Filter Input; для начала работы не нужен |
|
1 / 5 |
тестовый сервер Modbus TCP со своей памятью |
Hostname, Port, Coils, Holdings, Inputs, Discretes, Show Activities, Show Errors, Logging; только для проверки и отладки, не для работы с оборудованием |
У узлов с двумя выходами первый выход отдаёт данные (у чтения — прочитанные значения, у записи — записанные), а второй — ответ устройства «как есть».
Во всех узлах с полем «Server» выбирается подключение к устройству: оно общее, его настройка описана выше. Вкладка Optionals в окнах узлов — журнал и состояние узла (поля «Show Activities», «Show Errors», «Show Warnings» и другие); для начала работы её не трогайте.
Modbus - Read
Вход / выход: 0 / 2. Сам опрашивает устройство по таймеру и отдаёт прочитанное: на первом выходе — список значений, на втором — ответ устройства «как есть». Это основной узел для показа значений на панели: он использован в примере «Температура зала на панели».
Окно узла Modbus - Read: 1 — «Server», 2 — «Unit-Id», 3 — «FC», 4 — «Address», 5 — «Quantity», 6 — «Poll Rate»
Ключевые поля окна:
«Server» — подключение к устройству.
«Unit-Id» — номер устройства на линии; если оставить пустым, берётся значение из подключения.
«FC» — что читать:
FC 1: Read Coil Status,FC 2: Read Input Status,FC 3: Read Holding RegistersилиFC 4: Read Input Registers.«Address» — адрес первого регистра, число от 0 до 65535.
«Quantity» — сколько регистров или битов прочитать подряд.
«Poll Rate» — как часто опрашивать, и единица:
millisecond(s),second(s),minute(s)илиhour(s).
Ещё в окне: «Имя», «Тема», «Allow oversized messages» и «Delay to activate input» (при этой отметке появляется поле «Delay Time»). Вкладка Optionals: «Empty msg on Modbus fail», «Show Activities», «Show Errors», «Show Warnings», «Using IO-File».
Modbus - Getter
Вход / выход: 1 / 2. Читает те же данные, что Modbus - Read, но не по таймеру, а когда на вход пришло любое сообщение — например, от кнопки или от inject. Выходы те же: значения и ответ устройства «как есть».
Окно узла Modbus - Getter: 1 — «Server», 2 — «Unit-Id», 3 — «FC», 4 — «Address», 5 — «Quantity»
Ключевые поля окна:
«Server» — подключение к устройству.
«Unit-Id» — номер устройства; пусто — из подключения.
«FC» — функция чтения (
FC 1–FC 4).«Address» — адрес первого регистра.
«Quantity» — сколько прочитать.
От Modbus - Read отличается тем, что нет «Poll Rate» и «Тема». Ещё в окне: «Имя», «Allow oversized messages» и «Delay to activate input» (при этой отметке появляется «Delay Time»). На вкладке Optionals есть также «Keep Msg Properties».
Modbus - Flex - Getter
Вход / выход: 1 / 2. Читает, но параметры запроса берёт не из окна, а из входящего сообщения. Подходит, когда адрес или номер устройства становятся известны во время работы программы.
Окно узла Modbus - Flex - Getter: 1 — «Server», 2 — «Delay to activate input»
Ключевые поля окна:
«Server» — подключение к устройству.
«Delay to activate input» — отметка задержки перед тем, как узел начнёт принимать сообщения; после отметки появляется поле «Delay Time».
Ещё в окне: «Имя» и «Allow oversized messages». Параметры запроса приходят в msg.payload: unitid, fc, address, quantity.
Modbus - Write
Вход / выход: 1 / 2. Записывает в устройство значение из msg.payload: включает реле, пишет число в регистр. Использован в примере «Запись значения по кнопке панели»; что подавать в msg.payload для каждой функции — в таблице этого примера.
Окно узла Modbus - Write (FC по умолчанию): 1 — «Server», 2 — «Unit-Id», 3 — «FC», 4 — «Address»
Ключевые поля окна:
«Server» — подключение к устройству.
«Unit-Id» — номер устройства; пусто — из подключения.
«FC» — что записывать:
FC 5: Force Single Coil,FC 6: Preset Single Register,FC 15: Force Multiple CoilsилиFC 16: Preset Multiple Registers.«Address» — адрес реле или регистра.
Поле «Quantity» — сколько записать — для FC 5 в окне не показывается: записывается одно реле. Для FC 15 и FC 16 укажите количество в «Quantity». Ещё в окне: «Name» и «Delay to activate input».
Первый выход отдаёт записанное, второй — ответ устройства «как есть». На вкладке Optionals есть «Negative UInt» и «Keep Msg Properties».
Modbus - Flex - Write
Вход / выход: 1 / 2. Записывает, а все параметры запроса берёт из входящего сообщения.
Окно узла Modbus - Flex - Write: 1 — «Server», 2 — «Delay to activate input»
Ключевые поля окна:
«Server» — подключение к устройству.
«Delay to activate input» — отметка задержки перед началом приёма сообщений; после отметки появляется поле «Delay Time».
Параметры приходят в msg.payload: unitid, fc (5, 6, 15 или 16), address, quantity, value.
Modbus - Flex - Sequencer
Вход / выход: 1 / 2. Выполняет серию запросов по списку: за одно сообщение — несколько операций подряд. Нужен, когда с одного устройства снимают разные группы регистров.
Окно узла Modbus - Flex - Sequencer с одной заполненной операцией: 1 — «Server», 2 — «Name», 3 — «Function», 4 — «Unit ID», 5 — «Address», 6 — «Quantity»
Ключевые поля окна:
«Server» — подключение к устройству.
«Name» — подпись операции в списке; операции выполняются по порядку списка.
«Function» — код функции (по умолчанию
FC 1: Read Coil Status).«Unit ID» — номер устройства.
«Address» — адрес.
«Quantity» — количество.
Ещё в окне — отметка «Delay to activate input».
Список операций можно подменить сообщением: он приходит в msg.sequences.
Modbus - Flex - FC
Вход / выход: 1 / 1. Отправляет запрос с нестандартным кодом функции, который описан в «карте» функций. Нужен для редких устройств; с обычными устройствами используйте Modbus - Read и Modbus - Write.
Окно узла Modbus - Flex - FC: 1 — «Server», 2 — «Path to Map JSON», 3 — «Select FC Map», 4 — «Request Map Editor», 5 — «Response Map Editor» (нижний редактор виден не полностью)
Ключевые поля окна:
«Server» — подключение к устройству.
«Path to Map JSON» — путь к файлу карты.
«Select FC Map» — выбор функции из карты.
«Request Map Editor» — описание запроса.
«Response Map Editor» — описание ответа.
Ещё в окне: «Name» и обязательное поле «Unit ID». Содержимое карты возьмите из документации изготовителя устройства.
Modbus - Flex - Connector
Вход / выход: 1 / 1. Меняет параметры подключения «на лету»: новые адрес, порт и номер устройства приходят в сообщении. Нужен, когда одной программе приходится обслуживать то одно, то другое устройство.
Окно узла Modbus - Flex - Connector: 1 — «Server», 2 — «Empty Message on Modbus failure», 3 — «Config msg on Modbus-Change», 4 — «Show Activities», 5 — «Show Errors»
Ключевые поля окна:
«Server» — подключение, которое меняется.
«Empty Message on Modbus failure» — при ошибке Modbus отправлять пустое сообщение.
«Config msg on Modbus-Change» — после смены параметров подключения отправлять сообщение с применённой конфигурацией.
«Show Activities» — показывать действия в состоянии узла.
«Show Errors» — показывать ошибки в состоянии узла.
Новые параметры приходят в msg.payload: tcpHost, tcpPort, unitId. Подключение общее для всех узлов, которые к нему привязаны: меняя его, вы меняете их всех.
Modbus - Queue - Info
Вход / выход: 1 / 1. Следит за очередью запросов подключения и сообщает, когда она выходит за заданные уровни. Нужен для диагностики, если опрос «тормозит».
Окно узла Modbus - Queue - Info: 1 — «Server», 2 — «Unit-Id», 3 — «Interval Time», 4 — нижние уровни («Low low level», «Low level»), 5 — верхние уровни («High level», «High high level»)
Ключевые поля окна:
«Server» — подключение, чью очередь смотреть.
«Unit-Id» — номер устройства.
«Interval Time» — как часто проверять очередь.
«Low low level» и «Low level» — нижние уровни.
«High level» и «High high level» — верхние уровни.
Ещё в окне: «Error on high level», «Show All Updates» и «All Queues».
Modbus - Response
Вход / выход: 1 / 0. Показывает ответ устройства в состоянии узла (под узлом на вкладке). Выходов нет. Нужен для диагностики; подключается к выходу чтения или записи.
Окно узла Modbus - Response: 1 — «Имя», 2 — «Register Max.»
Ключевые поля окна:
«Имя» — подпись на вкладке.
«Register Max.» — предел числа регистров для показа.
Modbus - Response - Filter
Вход / выход: 1 / 1. Выбирает значения из ответа по описанию регистров (IO-файлу). Для начала работы не нужен: нужное число проще взять из msg.payload узлом change.
Окно узла Modbus - Response - Filter: 1 — «Filter» (ниже «Registers»), 2 — «IO-File», 3 — «Filter Response Buffer» (ниже «Filter Values» и «Filter Input»)
Ключевые поля окна:
«Filter» (со строкой поиска) и «Registers» — что отбирать из ответа.
«IO-File» — описание регистров.
«Filter Response Buffer», «Filter Values», «Filter Input» — какую часть ответа фильтровать.
Modbus - Server
Вход / выход: 1 / 5. Тестовый сервер Modbus TCP со своей памятью. С ним можно проверить узлы чтения и записи, когда реального устройства под рукой нет. Для работы с оборудованием не используйте.
Окно узла Modbus - Server: 1 — «Hostname», 2 — «Port», 3 — «Coils» (ниже «Holdings», «Inputs», «Discretes»), 4 — «Logging»
Ключевые поля окна:
«Hostname» — адрес, на котором работает тестовый сервер.
«Port» — порт тестового сервера.
«Coils», «Holdings», «Inputs», «Discretes» — размер памяти сервера по типам (в окне по умолчанию 10000).
«Logging» — журнал обращений.
Ещё в окне: «Имя», «Show Activities» и «Show Errors».
Все поля узлов — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.