Какво е Modbus
Modbus е прост, отворен протокол за обмен на данни между устройства в индустриални системи. Създаден от Modicon (днес Schneider Electric) през 1979 г., той е де факто стандарт за полеви комуникации. В енергетиката Modbus се среща навсякъде — от домашни инвертори до подстанционни power meters.
Варианти
| Вариант | Физическа среда | Формат | Типична скорост |
|---|---|---|---|
| Modbus RTU | RS-485, RS-232 | Бинарен, CRC-16 | 9600–115200 bit/s |
| Modbus ASCII | RS-485, RS-232 | ASCII (hex символи), LRC | 9600–19200 bit/s |
| Modbus TCP | Ethernet (TCP/IP, порт 502) | Бинарен, без CRC (TCP осигурява контрол) | 10/100/1000 Mbit/s |
Modbus ASCII е рядък в енергетиката. На практика се ползват Modbus RTU и Modbus TCP.
Модел Master-Slave / Client-Server
При Modbus RTU:
- Master — SCADA, PLC или data logger, който инициира всяка заявка.
- Slave — устройството с адрес от 1 до 247, което отговаря.
- На една RS-485 линия има само един master и до 32 slave-а (или 128 с повторител).
При Modbus TCP:
- Client — еквивалент на master. Отваря TCP връзка към сървъра.
- Server — еквивалент на slave. Слуша на порт 502.
- Множество клиенти могат да се свързват едновременно с един сървър.
Адресно пространство
Modbus дефинира четири области на данни:
| Област | Тип | Достъп | Традиционен адресен диапазон |
|---|---|---|---|
| Coils | 1-битови | Read/Write | 00001–09999 |
| Discrete Inputs | 1-битови | Read only | 10001–19999 |
| Input Registers | 16-битови | Read only | 30001–39999 |
| Holding Registers | 16-битови | Read/Write | 40001–49999 |
В практиката повечето енергийни устройства ползват Holding Registers и Input Registers за аналогови величини (ток, напрежение, мощност, енергия) и Coils / Discrete Inputs за състояния и команди.
Основни функционални кодове
| Код | Име | Описание |
|---|---|---|
| 01 | Read Coils | Четене на група дискретни изходи |
| 02 | Read Discrete Inputs | Четене на група дискретни входове |
| 03 | Read Holding Registers | Четене на група holding регистри |
| 04 | Read Input Registers | Четене на група input регистри |
| 05 | Write Single Coil | Запис на един дискретен изход |
| 06 | Write Single Register | Запис на един holding регистър |
| 15 | Write Multiple Coils | Запис на група дискретни изходи |
| 16 | Write Multiple Registers | Запис на група holding регистри |
При грешка устройството отговаря с exception response (функционален код OR 0x80) и exception code (01 — Illegal Function, 02 — Illegal Data Address, 03 — Illegal Data Value, 04 — Slave Device Failure).
Структура на кадъра
Modbus RTU
| Поле | Размер |
|---|---|
| Slave Address | 1 байт |
| Function Code | 1 байт |
| Data | N байта (зависи от функцията) |
| CRC-16 | 2 байта |
Кадрите се разделят с тишина от минимум 3.5 символни интервала.
Modbus TCP (MBAP Header)
| Поле | Размер | Описание |
|---|---|---|
| Transaction ID | 2 байта | Идентификатор на заявката (за съпоставяне на отговора) |
| Protocol ID | 2 байта | 0x0000 за Modbus |
| Length | 2 байта | Брой оставащи байтове |
| Unit ID | 1 байт | Адрес на slave (за gateway към RS-485) |
CRC не се ползва — TCP/IP осигурява контрол на целостта. Transaction ID позволява множество паралелни заявки.
Типове данни и byte order
Modbus дефинира само 16-битови регистри. За по-сложни типове данни се ползват комбинации:
| Тип | Регистри | Забележка |
|---|---|---|
| UINT16 | 1 | Без знак, 0–65535 |
| INT16 | 1 | Със знак, -32768–32767 |
| UINT32 / INT32 | 2 | Big-endian или little-endian — зависи от производителя |
| FLOAT32 (IEEE 754) | 2 | Byte order (ABCD, CDAB, BADC, DCBA) — задължително да се провери |
| UINT64 / INT64 | 4 | Енергийни броячи (Wh, kWh) |
Byte order е най-честият източник на грешки при интеграция. Различните производители подреждат байтовете по различен начин и това трябва да се провери в документацията или емпирично.
Приложения в енергетиката
- Електромери — четене на активна/реактивна енергия, мощност, напрежение, ток, Power Factor. Типично Modbus RTU (RS-485) на 9600 bit/s.
- Фотоволтаични инвертори — SMA, Fronius, Huawei, SolarEdge ползват Modbus TCP или RTU за мониторинг (DC/AC мощност, честота, температура) и управление (ограничаване на мощност, реактивна компенсация).
- Power meters — Schneider PM5xxx, ABB M4M, Janitza UMG — многоканални измервателни уреди с Modbus RTU/TCP.
- Батерийни системи (BESS) — SOC, SOH, DC напрежение, ток, температура.
- Дизелгенератори — контролери (ComAp, DEIF) с Modbus RTU.
Modbus RTU спрямо Modbus TCP
| Характеристика | Modbus RTU | Modbus TCP |
|---|---|---|
| Физическа среда | RS-485 / RS-232 | Ethernet |
| Скорост | 9600–115200 bit/s | 10/100/1000 Mbit/s |
| Максимален брой устройства | 32 на сегмент (247 адреса) | Практически неограничен |
| Проверка на целостта | CRC-16 | TCP checksum |
| Паралелни заявки | Не (master чака отговор) | Да (Transaction ID) |
| Максимална дължина | 1200 m (RS-485) | 100 m (Ethernet), без ограничение с комутатори |
Gateway RTU ↔ TCP
Modbus gateway преобразува Modbus TCP заявки от SCADA в Modbus RTU заявки по RS-485 и обратно. Един gateway обслужва до 32 устройства на RS-485 шината. При конфигурацията е важно да се настрои правилно:
- Скорост, паритет и стоп-битове за RS-485.
- Response timeout (колко дълго gateway-ят чака отговор от slave).
- Inter-frame delay (3.5 символни интервала, или по-дълъг при бавни устройства).
Въвеждане в експлоатация
- Свързване по RS-485 (A/B, GND) или Ethernet.
- Настройка на серийните параметри: скорост (9600 е по подразбиране), 8N1 или 8E1.
- Задаване на slave адрес (1–247) на всяко устройство.
- Определяне на регистровата карта от документацията на производителя.
- Проверка на byte order за 32-битови и float стойности.
- Тест с Modbus poll инструмент (ModbusPoll, QModMaster, mbpoll от терминала).
- Настройка на polling интервал в SCADA — обикновено 1–10 секунди.
Типични проблеми
- Грешен byte order — стойностите изглеждат безсмислени (напр. 0.0 вместо 230.5 V).
- Offset ±1 — някои производители броят регистрите от 0, други от 1; SCADA системата може да добави допълнителен offset.
- Колизии на RS-485 при два master-а на една шина.
- Response timeout — бавно устройство не отговаря навреме, master-ът отчита грешка.
- Прекалено бърз polling — устройството не встига да обработи заявките.
- Липса на терминираща резистор (120 Ω) в края на RS-485 линията.
Ограничения на Modbus
- Няма стандартизирана регистрова карта — всеки производител подрежда данните различно.
- Няма спонтанно предаване — master-ът трябва постоянно да пита (polling).
- Няма времеви печати — SCADA слага своя timestamp, не на устройството.
- Няма вградена сигурност — данните пътуват незащитени (Modbus Security, IEC 62351, TLS добавят защита, но не са широко разпространени).
Кога се избира Modbus
Modbus е правилният избор, когато устройството не поддържа нищо по-модерно (IEC 104, DNP3, IEC 61850), при интеграция на устройства от различни производители (практически всяко индустриално устройство поддържа Modbus), и за вътрешни полеви шини, където простотата и ниската цена на RS-485 са предимство. За критична телемеханика с времеви печати и спонтанно предаване се предпочита IEC 104 или DNP3.