# Modbus TCP / RTU over TCP

Регистры устройств Modbus прямо в чате

Регистры Modbus TCP или RTU поверх TCP через назначенный шлюз по карте тегов, только чтение

## Как агент работает с Modbus TCP / RTU over TCP

Данные читает шлюз: программа, которая ставится службой на компьютер или сервер в сети объекта и ходит к устройству по Modbus TCP, порт 502, или к последовательному шлюзу в режиме RTU поверх TCP. В подключении указываются адрес, номер устройства (по умолчанию 1) и карта регистров: по строке на тег путь, адрес и тип, например holding.100 float32. Наружу шлюз отправляет данные только исходящим соединением.

Адрес пишется от нуля, как в запросе: регистр 40001 из руководства это holding.0, а 30010 это input.9. Значения в 2 и 4 регистрах читаются в порядке байт из руководства устройства (ABCD, CDAB, BADC, DCBA), и тег может задать свой. Соседние теги одной области и одного устройства читаются одним запросом, до 125 регистров или 2000 битов; пропуск между тегами по умолчанию 0, потому что регистр без карты даёт исключение всему запросу.

Драйвер только читает: из функций Modbus он посылает чтение катушек, дискретных входов, holding и input регистров (коды 1 до 4). Записи и комбинированных функций в нём нет. Исключение устройства помечает плохими теги этого запроса со своим кодом, а ответ «занято» пропускает один опрос; остальные устройства за тем же шлюзом читаются дальше.

В режиме RTU поверх TCP у кадра нет номера транзакции, поэтому шлюз держит один запрос за раз и после нового соединения выжидает одно время ответа, чтобы поздний ответ прошлого запроса не попал в тег. Для медленного устройства есть паузы после соединения и между запросами. Если связь с облаком рвётся, данные копятся на диске шлюза и приходят после восстановления.

## Сценарии интеграции

### Что сейчас на линии
Агент найдёт теги по пути, например line1/tank, и покажет текущие значения регистров и катушек со временем отсчёта и пометкой, свежие ли они.

### Сводка за сутки
Агент возьмёт историю температуры, давления или мощности за сутки и по часам покажет минимум, максимум, среднее и последнее значение.

### Расход по счётчику
Агент заберёт показания накопительного счётчика из пары регистров за месяц и посчитает расход по дням.

### Задача на выход за порог
Агент заведёт задачу, которая запустится, когда значение тега выйдет за порог и продержится заданное время, а не на каждый отсчёт за порогом.

### Теги с исключением
Агент назовёт теги, на которые устройство ответило исключением, и его код, например 0x02 (нет такого адреса) или 0x0B (устройство за шлюзом не ответило).

### Пропуски в данных
Агент покажет промежутки истории без отсчётов и скажет, на связи ли шлюз объекта сейчас.

## Как подключить

**Перед подключением**

- Устройство Modbus TCP или последовательный шлюз в прозрачном режиме
- Порт 502 или порт шлюза открыт до компьютера шлюза объекта
- Карта регистров из руководства устройства: адреса, типы, порядок байт
- Номер устройства (unit id), если он не 1
- Компьютер в сети объекта для службы шлюза

### Выберите режим передачи шлюза
tcp сопоставляет запрос и ответ по ID транзакции. RTU не различает одинаковые поздние ответы; если шлюз поддерживает Modbus TCP, выберите tcp.

### Для RTU оставьте одного мастера линии
rtu_over_tcp требует прозрачного режима последовательного шлюза. Отключите других мастеров и клиентов TCP, получающих копии того же потока.

## Частые вопросы

### Как подключить Modbus TCP?
Заведите шлюз во вкладке «Шлюзы» и поставьте его службой на компьютер в сети объекта. В подключении укажите адрес устройства, например tcp://10.0.12.5:502, номер устройства, порядок байт и карту регистров: по строке путь, адрес и тип, например line1/tank/level holding.100 float32 unit=°C. Подключение назначается шлюзу, и он начинает опрос.

### Что агент видит в Modbus TCP?
Теги из карты регистров: катушки, дискретные входы, holding и input регистры, целые и дробные значения до 64 бит, отдельные биты регистра и строки. Для каждого тега агент читает текущее значение со временем отсчёта, историю интервалами и сырые отсчёты.

### Меняет ли агент значения в ПЛК?
Нет. Драйвер посылает только функции чтения 1 до 4, функций записи в нём нет. Агент ничего не пишет в устройство.

### Как перевести номер регистра из руководства?
Номер вида 40001 считается от единицы, а первая цифра называет область: 4 это holding, 3 это input. Номер пишется от нуля без этой цифры: 40001 это holding.0, 30010 это input.9. Бит регистра пишется через точку, например holding.100.3.
