Перейти к содержанию

Modbus Slave

Опция Modbus Slave позволяет использовать контроллер Lavritech в качестве ведомого (slave) устройства, предоставляя доступ к своим параметрам через протокол Modbus TCP или Modbus RTU.

Это может быть полезно для интеграции с внешними системами управления: SCADA, PLC, PC, другими контроллерами.

Совместная работа с LoRa

Если на контроллере также включена опция Lora в режиме шлюза (Gateway), контроллер может предоставлять удалённый доступ к данным и обеспечивать удалённое управление устройств, подключенных к LoRa нодам (через связи с Sensors/GPIO/PWM). Соответствующие регистры будут включены в карту регистров Modbus.

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

Доступны два режима:

  • TCP — через Ethernet или Wi-Fi, стандартный порт 502, Slave ID = 1 - режим по-умолчанию
  • RTU — через интерфейс UART / RS-485 - включается при установке соответствующей галочки в конструкторе

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

Остальные настройки относятся к работе в режиме RTU. Рекомендуемые значения этих настроек уже установлены по-умолчанию.

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

Новый вариант опции находится на этапе финального тестирования.
Он доступен для использования при включенной опции Тестовая сборка в конструкторе прошивок.

Modbus TCP

Далее будет описана работа опции в режиме Modbus TCP, как наиболее распространённый вариант.

Работа в режиме Modbus RTU во многом основана на тех же принципах.

Карта регистров Modbus

Опция транслирует в Modbus-регистры доступные системные параметры (значения от подключенных устройств).

Подробнее группы системных параметров (Sensors, GPIO, PWM) и общие моменты по интеграции устройств рассмотрены в разделе "Модель данных"'

Большинство связей устанавливаются автоматически, но также существует возможность формировать карту регистров вручную.

Используются следующие области регистров:

Область Диапазон адресов Тип и количество регистров Описание
User sensors 0-x (до 2000) Holding Registers
2 регистра на значение
Часть карты, которую пользователь формирует вручную.
Установка связей - через веб-интерфейс.
Позволяет транслировать в Holding все виды сущностей (Sensors, GPIO, PWM и др.).
Static sensors 2000-x (до 10000)
может быть несколько групп
Holding Registers
2 регистра на значение
Часть карты, которая формируется автоматически из параметров Sensors на основе шаблонов.
В веб-интерфейсе - регистры показаны как "static registers".
GPIO 0-255 Coils
1 coil на значение
Эта часть карты отображает значения всего диапазона GPIO в Coils.
Чтение и управление всеми GPIO.
Адрес Сoil = номер GPIO.
В веб-интерфейсе - см. диапазон на вкладке "GPIO".
PWM 10000-10255 Holding Registers
1 регистр на значение
Эта часть карты отображает значения всего диапазона PWM в Holding Registers.
Чтение и управление всеми PWM.
Адрес регистра = номер PWM + 10000.
В веб-интерфейсе - см. диапазон на вкладке "PWM".
Допустимые значения: 0-65534,
65535 - если PWM не используется.

В общем случае перечисленные выше области доступны для чтения/записи.
Если нужно только читать области ("read-only" доступ) - желательно обращаться к ним, используя соответствующие типы регистров Modbus, которые поддерживают только чтение:

  • для чтения GPIO использовать в запросах Discrete Inputs вместо Coils
  • для чтения Sensors и PWM - использовать в запросах Input Registers вместо Holding Registers

Совместная работа с LoRa

При работе совместно с функционалом LoRa FS происходят автоматические привязки к данным с Node на стороне Gateway:

  • параметры Sensors отображаются как Holding Registers в область Static sensors
  • параметры GPIO отображаются как Coils в область GPIO
  • параметры PWM отображаются как Holding Registers в область PWM

Особенности

Для областей User sensors и Static sensors на каждое значение выделяется 2 регистра (Holding Registers).

  • попытка записи в один регистр приведёт к ошибке Illegal Data Address.
  • при чтении также надо использовать только чётное количество регистров (2, 4 и т. д.).

Адресация

В некоторых Modbus-утилитах используется 1-based адресация.
При их использовании возможно потребуется прибавлять +1 к фактическому адресу (смещение +1).

Настройка в контроллере

Для доступа к настройкам, в веб-интерфейсе контроллера, на главной странице в блоке "Config" нужно выбрать "Modbus_slave".

конфиг на главной

Пример распределения карты регистров показан на скриншоте ниже:

вкладка в веб

User sensors

Первая часть относится к области User sensors из таблицы областей. Здесь пользователь может вручную задать связи между регистрами Modbus и другими параметрами из системы контроллера. Каждое значение в области User sensors занимает 2 регистра. После выбора привязок нужно сохранить настройки по кнопке "SET"

На скриншоте:

  • первые три параметра настроены на связь с PWM 200, 221, 222. Они будут доступны как Holding Registers по адресам 0, 2, 4.
  • далее первые три параметра настроены на связь с GPIO 200, 221, 222. Они будут доступны как Holding Registers по адресам 6, 8, 10.

Таким образом пользователь получает возможность настраивать "под себя" компактную карту регистров со значениями которые нужны ему в конкретном случае использования.

Настройка через User sensors, показанная выше - это альтернативный способ доступа к GPIO и PWM. Может быть полезен в случаях, если использовать области GPIO (как Сoils) или PWM неудобно или избыточно.

Static sensors

Эта часть карты регистров формируется автоматически. Значения от устройств транслируются в Holding Registers, одно значение занимает 2 регистра. В веб-интерфейсе отображаются как "static registers":

static regs

Рассмотрим работу Static sensors на примере интеграции с LoRa, на скриншоте выше:

  • показано, что одно из назначений текущего контроллера - работа в режиме LoRa Gateway. Если активна эта опция создаётся несколько групп регистров.
  • в данном случае показаны 5 групп регистров - по одной на каждую LoRa Node.
  • в данном случае в каждой группе было выделено по 400 регистров на группу.
  • LoRa Gateway принимает данные от LoRa Node и распределяет их согласно шаблону. В шаблоне указывается структура данных, что в итоге определяет сколько регистров в группе будет использовано.

Примеры работы с ПК

В этом случае на компьютере устанавливают программу (или SCADA-систему), которая выступает в качестве Modbus Master и посылает ему запросы на чтение или запись параметров.

Существует множество SCADA-систем, утилит и программ, которые умеют работать в режиме Modbus Master. Например: MasterOPC, QModbus и другие.

Ниже будут даны примеры для более простой утилиты "modpoll" - Modpoll Modbus Master Simulator. Подобные утилиты может быть удобно использовать для проверки, для однократной записи или для организации простого опроса. "modpoll" использует смещение адресов - ко всем адресам надо прибавлять +1.

Для примера взят адрес контроллера "192.168.1.125"

Использование области "User sensors" - на примере чтение и записи PWM

Настройка карты регистров

Для этих значений предварительно настроены связи в области User sensors через веб-интерфейс: pwm-example

чтение трёх PWM 220, 221, 222

Каждое значение занимает 2 регистра.
Читаем как 6 регистров типа Holding
В утилите указываем адрес со смещением +1, читаем Holding registers по адресу 0.

modpoll -m tcp -a 1 -r 1 -t 4 -c 6 192.168.1.125
[1]: 9
[2]: 0
[3]: 6
[4]: 0
[5]: 27
[6]: 0

запись PWM 220

Пример - установка яркости диммера на 30%.
Записываем 2 Holding регистра по адресу начала области User sensors.
В утилите указываем адрес со смещением +1, пишем в Holding register по адресу 0.

modpoll -m tcp -a 1 -r 1 -t 4 -c 2 192.168.1.125 30 0
Работа с областью "Static sensors" ("static registers")

Доступные регистры

static regs

Чтение (из LoRa-данных)

Читаем первые три из "static" регистров, которые автоматически были связаны с данными принятыми по LoRa из Node под номером 1.
Lora gw dev 1 start reg 2000 - 2400 - группа регистров

modpoll -m tcp -a 1 -r 2001 -t 4 -c 6 192.168.1.125
[2001]: 9
[2002]: 0
[2003]: 1
[2004]: 0
[2005]: 27
[2006]: 0

Запись (LoRa-данные)

Запись "static" регистра, который автоматически связан с параметром на LoRa Node.
Lora gw dev 1 start reg 2000 - 2400 - группа регистров.
Например, запишем в регистр по адресу 2002 (2003 в строке вызова утилиты) - тут от соответствует второму каналу диммера.
Пишем значение как 2 регистра.

modpoll -m tcp -a 1 -r 2003 -t 4 -c 2 192.168.1.125 70 0

Результат: после некоторой задержки - диммер установлен на 70%

Ограничения времени реакции (Class A)

При записи через связь Modbus TCP→LoRa - команде записи требуется время на выполнение. Значение в регистрах после записи может изменятся с задержкой (подробнее об этой особенности описано в разделе про LoRa FS, "Использование и управление").
При работе LoRa Class A - реакция в среднем равна 1 интервалу посылки между пакетами - т.к. команда записи шлётся в ответ на пакет от Node. И ещё может требоваться +1 интервал, чтобы пришёл пакет с актуальными значениями от Node. После прохождение всего пути - значение в регистре Modbus изменится.

Чтение и запись GPIO

чтение GPIO 220

Читаем как один Coil из области Coils.
Учитываем смещение адреса для утилиты в +1.

modpoll -m tcp -a 1 -r 221 -t 0 -c 1 192.168.1.125
[1]: 0

запись "1" в GPIO 220

modpoll -m tcp -a 1 -r 221 -t 0 -c 1 192.168.1.125 1
Чтение и запись PWM

Чтение PWM 221

Чтение второго канала диммера, который заведён на PWM 221.
Читаем один Holding регистр из области PWM.
К номеру PWM прибавляем 10000, а также
учитываем смещение адреса для утилиты в +1.

modpoll -m tcp -a 1 -r 10222 -t 4 -c 1 192.168.1.125

Запись PWM 221

Установка второго канала диммера на 70% через PWM.
Записываем один Holding регистр из области PWM.
К номеру PWM прибавляем 10000, а также
учитываем смещение адреса для утилиты в +1.

modpoll -m tcp -a 1 -r 10222 -t 4 -c 1 192.168.1.125 70

Диагностика и устранение проблем

  • Соединение не устанавливается? — проверьте, что Master использует правильный порт 502 (TCP) или настройки UART (RTU).
  • Неправильные адреса? — возможно, в вашем ПО нужно добавлять смещение (+1) к адресу регистра. Например, попробуйте в утилите прочитать GPIO 0 как Coil по адресу 1.
  • Проблемы с чтением или записью Holding Registers? — убедитесь, что выбран правильный диапазон адресов и верное количество регистров для чтения. Области регистров User sensors и Static sensors используют по 2 регистра на одно значение параметра.
  • Соединение часто рвётся? — попробуйте настроить Master на автоматический реконнект, проверьте, достаточный ли уровень сигнала WiFi (TCP), проверьте целостность линии (если RTU или проводное подключение к LAN)

Примеры использования

  • SCADA/PLC ⇄ Modbus TCP. Интеграция с SCADA через Modbus TCP: чтение входов, управление выходами
  • Modbus TCP ⇄ LoRa. Мониторинг датчиков по беспроводному каналу связи с использованием радио-удлинителя LoRa и трансляцией значений в Modbus и MQTT, а также управление реле/диммерами.
  • Панель оператора по RS-485. Локальное управление выходами (Coils), чтение значений, управление термостатом через Modbus-панель (Holding Registers)
  • Конвертация протоколов. Внешняя система работает только по Modbus — контроллер выступает прокси к данным датчиков c использованием других интерфейсов (LoRa, Modbus RTU, 1-wire и др.).