Skip to main content

Протоколы и данные

Данные от периферийных устройств (Пассер-В, Пассер-Т, Ларус-10) передаются в систему ЛиманИСУ 2.0 по нескольким промышленным и сетевым протоколам.

Обзор протоколов

ПротоколТип данныхИсточникПринимающий модуль
Modbus TCP16-битные регистры (Holding Register)Пассер-В/Тlisu-crud (Java/Spring)
TFTPБинарные файлы сырых сигналов (.bin)Пассер-В/Т -> Ларус-10FastAPI Backend Diagnost
MQTTJSON-объект (RFC 7159)Ларус-10Telemetry Service, Defect Detection Service
S3 (HTTP/HTTPS)Файлы Parquet (Apache Arrow)Ларус-10FastAPI Backend Diagnost, Defect Detection Service
UDPУправляющие команды, NTPЛарус-10, Пассерlisu-crud

Modbus TCP

Устройства Пассер-В/Т работают как Modbus TCP server. Ларус-10 опрашивает регистры пассеров по Modbus и из полученных данных формирует JSON. Этот JSON публикуется в топик MQTT Ларуса и перенаправляется на MQTT-бридж NATS.

Формат данных

Тип данных: 16-битные регистры (Holding Register), big-endian.

Карта регистров Пассер-В/Т

Системные регистры

Номер регистраФорматТипОписаниеДиапазон / По умолчанию
003Int16RВерсия ПО0x1010
004-005Int8*6RСерийный номер0x00000000-0xFFFFFFFF
006-008Int8*4RMAC-адрес0x0080E10000AA
009-010Int8*4R/WIP-адрес192.168.0.100
011-012Int8*4R/WМаска подсети255.255.255.0
013-014Int8*4R/WОсновной шлюз192.168.0.1
015-016Int8*4R/WServer IP-адрес192.168.0.1
017Int16R/WModbus Slave ID (TCP)По умолчанию: 1
018Int16R/WПорт TCP/IP Modbus ServerПо умолчанию: 502

Калибровочные коэффициенты

Номер регистраФорматТипОписаниеКомментарий
020Int16R/WCH1_AI_CalibrКалибровочный коэффициент *1000 (0.431 передается как 431)
001-027Int16R/WCH2-CH8_AI_CalibrАналогично для каналов 2-8
028-029Float32R/WCH1_Vibro_CoefКоэффициент для датчика вибрации V->G
030-031Float32R/WCH2_Vibro_CoefАналогично для канала 2

Пороговые значения (канал AI1)

Номер регистраФорматТипОписание
044Int16R/WCH1_AI_Enable (1 -- канал включен)
046-047Float32R/WCH1_Level_SZK_Notific (порог оповещения)
048-049Float32R/WCH1_Level_SZK_Warning (порог предупреждения)
050-051Float32R/WCH1_Level_SZK_Alarm (порог тревоги)
052Int16R/WCH1_SKZ_Alarm_DO (включение DO при тревоге: bit0-bit4)
054-055Float32R/WCH1_Level_AMP_Notific (порог оповещения)
056-057Float32R/WCH1_Level_AMP_Warning (порог предупреждения)
058-059Float32R/WCH1_Level_AMP_Alarm (порог тревоги)
060Int16R/WCH1_AMP_Alarm_DO
062-067Float32R/WCH1_Level_PP_Notific/Warning/Alarm (пик-пик)
068Int16R/WCH1_PP_Alarm_DO
070-075Float32R/WCH1_Level_PF_Notific/Warning/Alarm (ПикФактор)
076Int16R/WCH1_PF_Alarm_DO
Каналы AI2-AI8

Пороги для каналов AI2-AI8 расположены в регистрах 078-314 с аналогичной структурой (по 32 регистра на канал).

Текущие значения измерений

Номер регистраФорматТипОписание
316-317Float32RCH1_AI_SKZ (значение СКЗ *1000)
318-319Float32RCH1_AI_AMP
320-321Float32RCH1_AI_PP
322-323Float32RCH1_AI_PF
324-379Float32RCH2-CH8: SKZ, AMP, PP, PF (по 8 регистров на канал)
380WORDRCH1_AI_STATE (bit0-SKZ, bit1-AMP, bit2-PP, bit3-PF)
411WORDRCH2-CH8_AI_STATE

Цифровые входы/выходы и управление записью

Номер регистраФорматТипОписание
412Int16RCH_AI_FFT_FREQ (частота для Фурье)
413Int16--CH1_DO_VAL (значение DO1: 0/1)
414Int16--CH1_DO_ALARM_MASK (наличие сработки по превышению SKZ)
422Int16--CH1_DI_ENABLE
423Int16--CH1_DI_VAL (мгновенное значение DI1: 0/1)
424-425Int32--CH1_DI_FREQ (0-65536 Hz)
426-427Int32--CH1_DI_Period (мс)
434Int32WRawRecordCMD (штамп времени для начала записи, 0 для остановки)
436Int16--RawRecordMode (0 -- одиночная 2 сек; 1 -- циклическая)
437Int16--FreqDiv (делитель частоты АЦП, 1-10, оптимально 1)
438Int16--RawSignalTimer (таймер отсылки сырого сигнала, секунды, мин. 10)
Данные в регистрах AI1-AI6

Данные в регистрах AI1-AI6 интерпретируются как вибрация.


TFTP (Trivial File Transfer Protocol)

Устройства Пассер-В/Т передают сырые бинарные файлы (структура tRAW_BUF) на Ларус-10 по протоколу TFTP. Ларус принимает .bin файлы и преобразует их в формат Parquet. После этого утилита rclone периодически отправляет Parquet-файлы в S3 MinIO по HTTP.

Промежуточный протокол

TFTP используется только между Пассером и Ларусом -- не напрямую в системе ЛиманИСУ 2.0. Принимающим сервисом является FastAPI Backend Diagnost, но он получает файлы косвенно через Ларус-10 как промежуточный узел.

Цепочка передачи:

Пассер-В/Т (.bin) --TFTP--> Ларус-10 --convert--> Parquet --rclone/S3--> MinIO

MQTT (Message Queuing Telemetry Transport)

Ларус-10 является MQTT-клиентом и публикует телеметрию в формате JSON (сигналы RMS, ток, температура, тахометр) на брокер NanoMQ, запущенный в системе ЛиманИСУ 2.0.

Топики:

  • На Ларусе топики могут иметь различный вид
  • В системе топики приводятся к стандартизированному виду: telemetry/<location_id>/<unit_id>/<equipment_id>/<measurement_point>
  • Сервисы Telemetry Service и Defect Detection Service подписываются на данные топики

Формат JSON -- Пассер-В

Каналы 1-8 (Вибро)

{
"device": {
"type": "PV-D9MG",
"hardware_version": 20,
"software_version": 1,
"serial_number": "A000000",
"timestamp": "2025-01-24T15:30:00Z",
"channel": 1
},
"telemetry": {
"channel_status": 1,
"acceleration_rms": 0.0,
"velocity_rms": 0.0,
"displacement_rms": 0.0,
"acceleration_absolute": 0.0,
"acceleration_absolute_max": 0.0,
"acceleration_absolute_min": 0.0,
"acceleration_peak_to_peak": 0.0,
"acceleration_half_peak_to_peak": 0.0,
"kurtosis": 0.0,
"crest_factor": 0.0
}
}

Каналы 9-10 (Тахометр)

{
"device": {
"type": "PV-D9MG",
"hardware_version": 20,
"software_version": 1,
"serial_number": "A000000",
"timestamp": "2025-01-24T15:30:00Z",
"channel": 9
},
"telemetry": {
"tachometer_mode": true,
"impulses_per_revolution": 1,
"revolutions_per_second": 0.0,
"revolutions_per_minute": 0.0,
"digital_input_status": null
}
}

Канал 13 (Выход)

{
"device": {
"type": "PV-D9MG",
"hardware_version": 20,
"software_version": 1,
"serial_number": "A000000",
"timestamp": "2025-01-24T15:30:00Z",
"channel": 13
},
"telemetry": {
"external_control_enabled": false,
"digital_output_status": false,
"digital_output_command": false
}
}

Формат JSON -- Пассер-Т

Канал 0 (Общие данные)

{
"device": {
"type": "PT-D9MG",
"hardware_version": 20,
"software_version": 1,
"serial_number": "A000000",
"timestamp": "2025-01-24T15:30:00Z",
"channel": 0
},
"telemetry": {
"equipment_status": 1,
"power_cons_3ph": 0.0,
"work_years": 0,
"work_days": 12,
"work_seconds": 86400
}
}

Каналы 1-3 (Напряжение)

{
"device": {
"type": "PT-D9MG",
"hardware_version": 20,
"software_version": 1,
"serial_number": "A000000",
"timestamp": "2025-01-24T15:30:00Z",
"channel": 1
},
"telemetry": {
"channel_status": 1,
"rms": 0.0,
"amplitude": 0.0,
"peak_to_peak": 0.0,
"absolute_max": 0.0,
"absolute_min": 0.0,
"Frequency": 0.0,
"Sinusoidal_deviation": 0.0,
"Nonlinear_distortion_set": 0.0,
"Angle": 0.0
}
}

Каналы 4-6 (Ток)

{
"device": {
"type": "PT-D9MG",
"hardware_version": 20,
"software_version": 1,
"serial_number": "A000000",
"timestamp": "2025-01-24T15:30:00Z",
"channel": 4
},
"telemetry": {
"channel_status": 1,
"rms": 0.0,
"amplitude": 0.0,
"peak_to_peak": 0.0,
"absolute_max": 0.0,
"absolute_min": 0.0,
"Frequency": 0.0,
"Sinusoidal_deviation": 0.0,
"Nonlinear_distortion_set": 0.0,
"Angle": 0.0,
"power_cons": 0.0,
"inrush_current": 0.0
}
}

Каналы 7-8 (Тахометр)

Структура аналогична Пассер-В, каналы 9-10 (тахометр).

Каналы 9-12 (Выходы)

Структура аналогична Пассер-В, канал 13 (выход).


NATS (внутренний обмен)

NATS -- высокоскоростной брокер сообщений, оптимизированный для передачи в распределенных системах. Поддерживает модели обмена pub/sub и request/reply. Используется для взаимодействия между микросервисами.

Топики и маршрутизация

Очереди/топики выделяются по типу событий:

Тип топикаНазначение
telemetry/vibrationВибрационная телеметрия
telemetry/currentТок электродвигателя
telemetry/voltageНапряжение
telemetry/tachometerТахометрические данные
events.>Состояние оборудования, ошибки
file.eventsПоявление новых файлов в S3

Общая структура сообщений

Все сообщения между устройствами и системой пересылаются в формате JSON. Структура едина:

  • device -- данные об устройстве (тип, версии ПО и аппаратуры, серийный номер, канал, timestamp)
  • telemetry -- телеметрические данные, зависящие от типа канала
Маршрутизация MQTT -> NATS

NanoMQ используется как MQTT-брокер на стороне устройств и принимает JSON без изменений. NATS в облаке хранит и маршрутизирует те же JSON без трансформации. Формат JSON не изменяется при пересылке между NanoMQ и NATS.


S3 (MinIO)

Ларус-10 конвертирует бинарные файлы (.bin) в Parquet-файлы и загружает их напрямую в MinIO (S3-совместимое хранилище системы ЛиманИСУ 2.0) через S3 API.

Формат: Apache Parquet (columnar format)

Путь хранения файлов:

rawdata/<ID_оборудования>/<ГГГГ>/<ММ>/<ДД>/<ЧЧ:ММ:СС>.parquet

Принимающие модули: FastAPI Backend Diagnost, Defect Detection Service

Это основной канал передачи обработанных данных для последующего анализа.


UDP (User Datagram Protocol)

Используется для управляющих команд и синхронизации времени:

  • NTP (Network Time Protocol) работает поверх UDP. Ларус-10 синхронизирует свое время с корпоративным NTP-сервером по UDP
  • Пассеры на forte передают в Ларус телеметрию и сырой сигнал при помощи UDP-пакетов

Принимающий модуль: lisu-crud, встроенный сервис Ларус-10


Форматы представления данных

ФорматНазначение
JSONСтруктурированные данные в REST API и сообщениях NATS/MQTT
ParquetФайлы телеметрических и вибрационных данных (columnar format)
PostgreSQLЗаписи в реляционной базе данных (метаданные, конфигурация)
ClickHouseЗаписи в аналитической базе данных (телеметрия, события)

Диагностические сообщения

КодУсловиеОписаниеДействия программиста
ERR_DB_CONNПотеря соединения с БДНедоступна база данныхПроверить доступность сервиса БД
WARN_NATS_DELAYЗадержка сообщенийПерегрузка очереди сообщенийПроверить брокер NATS
INFO_SERVICE_STARTЗапуск сервисаСервис успешно запущенДействия не требуются