Протоколы и данные
Данные от периферийных устройств (Пассер-В, Пассер-Т, Ларус-10) передаются в систему ЛиманИСУ 2.0 по нескольким промышленным и сетевым протоколам.
Обзор протоколов
| Протокол | Тип данных | Источник | Принимающий модуль |
|---|---|---|---|
| Modbus TCP | 16-битные регистры (Holding Register) | Пассер-В/Т | lisu-crud (Java/Spring) |
| TFTP | Бинарные файлы сырых сигналов (.bin) | Пассер-В/Т -> Ларус-10 | FastAPI Backend Diagnost |
| MQTT | JSON-объект (RFC 7159) | Ларус-10 | Telemetry Service, Defect Detection Service |
| S3 (HTTP/HTTPS) | Файлы Parquet (Apache Arrow) | Ларус-10 | FastAPI 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.
Карта регистров Пассер-В/Т
Системные регистры
| Номер регистра | Формат | Тип | Описание | Диапазон / По умолчанию |
|---|---|---|---|---|
| 003 | Int16 | R | Версия ПО | 0x1010 |
| 004-005 | Int8*6 | R | Серийный номер | 0x00000000-0xFFFFFFFF |
| 006-008 | Int8*4 | R | MAC-адрес | 0x0080E10000AA |
| 009-010 | Int8*4 | R/W | IP-адрес | 192.168.0.100 |
| 011-012 | Int8*4 | R/W | Маска подсети | 255.255.255.0 |
| 013-014 | Int8*4 | R/W | Основной шлю з | 192.168.0.1 |
| 015-016 | Int8*4 | R/W | Server IP-адрес | 192.168.0.1 |
| 017 | Int16 | R/W | Modbus Slave ID (TCP) | По умолчанию: 1 |
| 018 | Int16 | R/W | Порт TCP/IP Modbus Server | По умолчанию: 502 |
Калибровочные коэффициенты
| Номер регистра | Формат | Тип | Описание | Комментарий |
|---|---|---|---|---|
| 020 | Int16 | R/W | CH1_AI_Calibr | Калибровочный коэффициент *1000 (0.431 передается как 431) |
| 001-027 | Int16 | R/W | CH2-CH8_AI_Calibr | Аналогично для каналов 2-8 |
| 028-029 | Float32 | R/W | CH1_Vibro_Coef | Коэффициент для датчика вибрации V->G |
| 030-031 | Float32 | R/W | CH2_Vibro_Coef | Аналогично для канала 2 |
Пороговые значения (канал AI1)
| Номер регистра | Формат | Тип | Описание |
|---|---|---|---|
| 044 | Int16 | R/W | CH1_AI_Enable (1 -- канал включен) |
| 046-047 | Float32 | R/W | CH1_Level_SZK_Notific (порог оповещения) |
| 048-049 | Float32 | R/W | CH1_Level_SZK_Warning (порог предупреждения) |
| 050-051 | Float32 | R/W | CH1_Level_SZK_Alarm (порог тревоги) |
| 052 | Int16 | R/W | CH1_SKZ_Alarm_DO (включение DO при тревоге: bit0-bit4) |
| 054-055 | Float32 | R/W | CH1_Level_AMP_Notific (порог оповещения) |
| 056-057 | Float32 | R/W | CH1_Level_AMP_Warning (порог предупреждения) |
| 058-059 | Float32 | R/W | CH1_Level_AMP_Alarm (порог тревоги) |
| 060 | Int16 | R/W | CH1_AMP_Alarm_DO |
| 062-067 | Float32 | R/W | CH1_Level_PP_Notific/Warning/Alarm (пик-пик) |
| 068 | Int16 | R/W | CH1_PP_Alarm_DO |
| 070-075 | Float32 | R/W | CH1_Level_PF_Notific/Warning/Alarm (ПикФактор) |
| 076 | Int16 | R/W | CH1_PF_Alarm_DO |
Пороги для каналов AI2-AI8 расположены в регистрах 078-314 с аналогичной структурой (по 32 регистра на канал).
Текущие значения измерений
| Номер регистра | Формат | Тип | Описание |
|---|---|---|---|
| 316-317 | Float32 | R | CH1_AI_SKZ (значение СКЗ *1000) |
| 318-319 | Float32 | R | CH1_AI_AMP |
| 320-321 | Float32 | R | CH1_AI_PP |
| 322-323 | Float32 | R | CH1_AI_PF |
| 324-379 | Float32 | R | CH2-CH8: SKZ, AMP, PP, PF (по 8 регистров на канал) |
| 380 | WORD | R | CH1_AI_STATE (bit0-SKZ, bit1-AMP, bit2-PP, bit3-PF) |
| 411 | WORD | R | CH2-CH8_AI_STATE |
Цифровые входы/выходы и управление записью
| Номер регистра | Формат | Тип | Описание |
|---|---|---|---|
| 412 | Int16 | R | CH_AI_FFT_FREQ (частота для Фурье) |
| 413 | Int16 | -- | CH1_DO_VAL (значение DO1: 0/1) |
| 414 | Int16 | -- | CH1_DO_ALARM_MASK (наличие сработки по превышению SKZ) |
| 422 | Int16 | -- | CH1_DI_ENABLE |
| 423 | Int16 | -- | CH1_DI_VAL (мгновенное значение DI1: 0/1) |
| 424-425 | Int32 | -- | CH1_DI_FREQ (0-65536 Hz) |
| 426-427 | Int32 | -- | CH1_DI_Period (мс) |
| 434 | Int32 | W | RawRecordCMD (штамп времени для начала записи, 0 для остановки) |
| 436 | Int16 | -- | RawRecordMode (0 -- одиночная 2 сек; 1 -- циклическая) |
| 437 | Int16 | -- | FreqDiv (делитель частоты АЦП, 1-10, оптимально 1) |
| 438 | Int16 | -- | RawSignalTimer (таймер отсылки сырого сигнала, секунды, мин. 10) |
Дан ные в регистрах 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 -- телеметрические данные, зависящие от типа канала
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 | Запуск сервиса | Сервис успешно запущен | Действия не требуются |