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 — старшие два байта.