Modbus
Modbus — это открытый протокол связи, используемый в системах промышленной автоматизации для обмена данными между устройствами, такими как ПЛК, датчики и контроллеры. Протокол разработан в 1979 году и поддерживает последовательные интерфейсы (RTU/ASCII), а также Ethernet (TCP).
Поддержка Modbus
Контроллер Telematic поддерживает протокол Modbus и может работать как в режиме ведущего устройства (Master), так и ведомого (Slave).
Режим Master: Контроллер может опрашивать и управлять подключенными устройствами через интерфейс RS-485. Этот функционал реализуется в пользовательских сценариях на языках Python или C.
Режим Slave: Поддерживается через RTU (RS-485) и TCP. Для активации режима Slave необходимо настроить соответствующие параметры в разделе “Modbus” в настройках контроллера:
- Флажок “Использовать TCP” — включает/отключает Modbus TCP Slave.
- Флажок “Использовать RTU” — включает/отключает Modbus RTU Slave (RS-485).
- Поле ввода “Адрес” — задает Modbus-адрес контроллера для RTU и TCP.
- Раскрывающийся список “RTU битрейт” — задает скорость передачи данных (битрейт) для RTU.
- Раскрывающийся список “RTU четность” — задает контроль четности (parity) для RTU: ’none’, ’even’ или ‘odd’.
- Поле ввода “RTU задержка, мс” — задает задержку перед ответом в миллисекундах. Это может быть полезно для совместимости с медленными устройствами.
Возможности через Modbus Slave
С помощью Modbus можно:
- Читать состояние контроллера и значения входов/выходов.
- Останавливать и запускать пользовательские сценарии.
- Изменять значения выходов.
- Читать и изменять значения пользовательских регистров.
Важно: Чтение и изменение значений входов/выходов или регистров возможно только для элементов, у которых в настройках контроллера установлены уровни доступа “Чтение” и/или “Изменение”.
Карта Modbus-регистров
Регистры Modbus представлены в формате Holding Registers (адреса от 0). Каждый Modbus регистр — 16-битный. Доступ: R — только чтение, RW — чтение и запись.
| Адрес | Доступ | Описание |
|---|---|---|
| 0 | R | Код модели контроллера (например, 100 для модели “X0”). |
| 1 | R | Версия прошивки. |
| 2 | R | Два младших байта uptime (uint32_t) — время в секундах с момента запуска контроллера. |
| 3 | R | Два старших байта uptime (uint32_t) — время в секундах с момента запуска контроллера. |
| 4 | R | Код статуса подключения к серверу: 0 — неизвестно; 1 — отключен; 2 — подключение; 3 — подключен; 4 — ошибка подключения. |
| 5 | R | Набор битов: наличие системных аварий: Бит 0 — HardFault в прошивке контроллера; Бит 1 — HardFault в пользовательском сценарии; Бит 2 — Сработал WatchDog; Бит 3 — Переполнение стека задачи ядра; Бит 4 — Ошибка в пользовательском сценарии (для Python); Бит 5 — Автозапуск сценария отключен (сценарий приводит к нестабильной работе контроллера). |
| 6 | R | Набор битов: наличие пользовательских аварий (младшие два байта). |
| 7 | R | Набор битов: наличие пользовательских аварий (старшие два байта). |
| 8 | RW | Код работающего сценария. При записи задает код сценария, который будет использован для запуска (значение сохраняется локально до момента записи в регистр 9). |
| 9 | RW | Статус работы сценария (запуск/остановка): 0 — сценарий не был запущен; 1 — (R) сценарий работает; (W) запускает сценарий с кодом, заданным в регистре 8; 2 — (R) сценарий остановлен; (W) останавливает работающий сценарий. |
| 10 | R | Код типа работающего сценария: 0 — сценарий не был запущен; 1 — сценарий на Python; 2 — сценарий на C. |
| 11 | R | Код причины запуска сценария: 0 — сценарий не был запущен; 2 — автозапуск при старте контроллера; 3 — сценарий запущен пользователем. |
| 12 | R | Код причины остановки сценария: 0 — сценарий не был остановлен; 1 — остановлен из-за ошибки в сценарии; 2 — остановлен пользователем; 3 — сценарий штатно завершил работу. |
| 13 | R | Время работы сценария в секундах (два младших байта). |
| 14 | R | Время работы сценария в секундах (два старших байта). |
| 15–31 | — | Резерв. |
| 32–63 | RW | Чтение и изменение состояния цифровых выходов Do(0) — Do(31). Значения: 0 или 1. |
| 64–95 | R | Чтение состояния цифровых входов Di(0) — Di(31). Значения: 0 или 1. |
| 96–127 | RW | Чтение и изменение состояния аналоговых выходов Ao(0) — Ao(31). Значения: 0…1000 (где 1000 = 10.00 В). |
| 128–159 | R | Чтение значений аналоговых входов Ai(0) — Ai(31). Для значений температуры и напряжения используется множитель 10. |
| 160–161 | RW | Чтение и изменение пользовательского регистра Reg(0): 160 — младшие два байта; 161 — старшие два байта. |
| … | RW | … |
| 222–223 | RW | Чтение и изменение пользовательского регистра Reg(31): 222 — младшие два байта; 223 — старшие два байта. |