Сбор данных и логгирование Modbus-датчиков
Введение
В этой статье мы научимся писать конфигурации опроса через Telegraf для Modbus датчиков c сохранением данных с датчиков базу данных influxdb2.
- Научимся работать с шаблонами датчиков
- Разберем шаблоны датчиков для ModbusTCP и ModbusRTU
- Научимся "ловить" данные с датчиков
- Научимся редактировать шаблоны и тестировать конфигурации
- Разберем шаблон для реального устройства (датчика)
- Проверим данные с этого устройства.
Эта инструкция подходит для любого Сборщика
Мы будем основываться на том, что мы совершаем все действия на устройстве с RS485м портом, Ethernet и установленной NapiLinux, в котором уже предустановлен telegraf, influxdb2 и имеется Веб-интерфейс управления NapiConfig.
Для любого датчика, мы должны знать
- Modbus адрес устройства
- Список и тип регистров, которые можно прочесть из датчика
- Для ModBus RTU - параметры последовательного порта
Сначала мы опросим датчик "без названия", у которого
modbus address = 1
и есть как минимум первый регистр с адресом 0. Далее, мы рассмотрим уже реальный датчик с его регистрами.
Конфиг Telegraf для Modbus TCP
Опросим наш датчик по Modbus TCP. Мы должны знать IP адрес опрашиваемого устройства.
☝ ** Если на нашем Сборщике работает сервис шлюза ModbusRTU - ModbusTCP, то нужно опрашивать адрес 127.0.0.1 **
Шаблон конфига, принимающего данные для Telegraf для Modbus TCP выглядит следующим образом
## Any sensor with address=1. hold-register=0 (first) on localhost
[[inputs.modbus]]
#change name="YOUR_SENSOR" and measurement="YOUR_SENSOR"
name = "anysensor-modbus-localhost"
#change to your modbus address if your address is not equal 1
slave_id = 1
## Timeout for each request
timeout = "1s"
# TCP - connect via Modbus/TCP
controller = "tcp://127.0.0.1:502"
input_registers = [
{ measurement="anysensor-modbus-localhost", name = "First_Hold_Register", byte_order = "AB", data_type = "UINT16", scale=1.0, address = [0]},
]
В интерфейсе NapiConfig его можно найти в "Датчики" - "Управление датчиками"
Шаблон датчика - конфиг файл для Telegraf, описывающий механизм сбор данных. Из интерфейса NapiConfig можно править конфигурацию, загружать новые шаблоны, активировать и деактивировать шаблоны.
Рассмотрим шаблон
- (1) name, measurement - имя датчика, например DL-303
- (2) slave_id - modbus адрес устройства
- (3) controller - IP адрес и TCP порт modbus устройства. если на Сборщике работает mbusd (шлюз Modbus RTU - TCP), то адрес будет 127.0.0.1 (так как отвечать на запросы будет сам сборщик)
- (4) measurement имя измерения (должно совпадать с именем датчика и быть уникальным для устройства)
Если устройств одинаковых несколько, надо дать каждому уникальное измерение
-
(5) name произвольное имя, согласно которому регистр попадет в базу данных. Например это может быть temperature или current (то есть фактически то, что выдает этот регистр из устройства)
-
(6) byte_order - порядок байт для целочисленных значений (обычно нужно оставить по умолчанию, если нет, то надо сверится с документацией на устройство)
-
(7) data_type - тип данных
-
(8) scale - множитель \ делитель
-
(9) address - адрес регистра
Если устройство имеет modbus адрес "1" и имеет регистр "0" типа int, то наш шаблон "по молчанию" (Any sensor) корректно опросит устройство и его 1-й регистр.
Конфиг Telegraf для Modbus RTU
Для Modbus RTU в шаблоне указывается не IP-адрес, а параметры последовательного порта. Шаблон конфига для Telegraf ModbusRTU датчика "по умолчанию" выглядит так:
## Any sensor with address=1. hold-register=0 (first) on /dev/ttyS3 (FCC device) with 9600\8n1 (sensor parameter)
[[inputs.modbus]]
#change name="YOUR_SENSOR" and measurement="YOUR_SENSOR"
name = "anysensor-modbus-rtu"
#change to your modbus address if your address is not equal 1
slave_id = 1
#change to your port settings, if you need
baud_rate = 9600
data_bits = 8
parity = "N"
stop_bits = 1
#change ti your port (ttyS1 \ ttyUSB0 \ etc)
controller = "file:///dev/ttyS3"
transmission_mode = "RTU"
input_registers = [
{ measurement="anysensor-modbus-rtu", name = "First_Hold_Register", byte_order = "AB", data_type = "UINT16", scale=1.0, address = [0]},
В интерфейсе NapiConfig
Разберемся в отличиях с ModbusTCP
(5) - последовательный порт, из которого Telegraf будет читать данные (6) - ражим работы Modbus
Далее идут стандартные параметры последовательного порта
(1) baud_rate - скорость (2) data_bits - количество бит (3) parity - четность (4) stop_bits - стоп-бит
Эти данные есть в настройках или в паспорте датчика. Как правило это 8N1\8E1 (биты, четность, стоп-бит). Скорость во многих датчика по умолчанию 9600, но может быть и 115200. 🔥** Если указать эти параметры неверно, данные читаться и датчика не будут !**
🔥 Остальные настройки и параметры точно такие же, как для ModbusTCP 🔥