Обзор протокола Modbus RTU
Modbus RTU (Remote Terminal Unit) является одним из наиболее распространенных протоколов связи в промышленной автоматизации. Он разработан для обмена данными между электронными устройствами в системах контроля и управления. Протокол Modbus RTU был разработан фирмой Modicon (Modular Digital Controller) в 1979 году и с тех пор стал широко распространенным стандартом.
Modbus RTU использует последовательный интерфейс (RS-232 или RS-485) для связи между устройствами. Протокол основан на принципе "ведущий-ведомый" (master-slave), где устройство-мастер инициирует обмен данными с подчинёнными устройствами. Ведомыми могут быть различные устройства и элементы системы, например, датчики, другие контроллеры, преобразователи частоты, измерительные приборы, исполнительные устройства и другие.
Основными преимуществами протокола Modbus RTU являются его простота, открытость и распространённость. Протокол ориентирован на минимизацию нагрузки на сеть и обеспечение высокой скорости передачи данных. Кроме того, он предлагает широкую поддержку различных типов данных, таких как биты, 16-битные целые числа, числа с плавающей запятой и другие.
Для использования протокола Modbus RTU необходимо наличие соответствующих устройств и программного обеспечения и выполнение некоторых других условий. В сети RS485 должно быть только одно ведущее устройство (у ведущего устройства нет адреса), а адреса ведомых устройств должны быть разными (от 1 до 247). Существует множество устройств и контроллеров, поддерживающих протокол Modbus RTU, а также библиотек и программного обеспечения для разработки приложений, основанных на этом протоколе. Некоторые производители простых устройств автоматизации реализуют протокол Modbus в своих продуктах не полностью, а прописывая только основные функции.
Modbus RTU имеет простой формат сообщений, состоящий из адреса устройства, функции, данных и контрольной суммы. Мастер-устройство отправляет запросы к подчинённым устройствам, а они, в свою очередь, отвечают на эти запросы. Протокол поддерживает различные функции, такие как чтение, запить, чтение и запись одного или нескольких регистров, чтение, запить, чтение и запись одного или нескольких битовых значений, а также выполнение специфических функций, таких как передача статуса или управление.
Основными функциями в протоколе Modbus RTU являются:
01Hex (1) | - чтение нескольких дискретных выходов | - Read Coils. |
02Hex (2) | - чтение нескольких дискретных входов | - Read Inputs. |
03Hex (3) | - чтение нескольких внутренних регистров | - Read Holding Registers |
04Hex (4) | - чтение нескольких входных регистров | - Read Input Registers. |
05Hex (5) | - запись одного дискретного выхода | - Write Single Coil. |
06Hex (6) | - запись в один внутренний регистр | - Write Single Register. |
0FHex (15) | - запись в несколько дискретных выходов | - Write Multiple Coils. |
10Hex (16) | - запись в несколько внутренних регистров | - Write Multiple Registers. |
Реализация памяти входных и внутренних регистров зависит от конкретного производителя. Это могут быть две разные области памяти, два разных диапазона в одной области, одна область (функции 03 и 04 воспринимаются одинаково), а также, иногда встречается реализация только одного из диапазонов (запрос не реализованной области вызывает ошибку). Также в интеллектуальных устройствах можно встретить настраиваемые диапазоны. Например, в контроллерах HCFA по умолчанию и внутренние и входные регистры находятся в одних и тех же ячейках памяти, но при помощи настроек их можно разнести или ограничить. Это также очень важно с точки зрения безопасности (сторонние устройства не смогут получить доступ к чувствительной информации или изменить параметры выполнения).
Для конкретики рассмотрим связь панели HMI TP2507 и ПЛК HCQ1-1200, производства компании HCFA. В данном случае, панель будет ведущим устройством связи и будет инициировать запросы. Разберём примеры сообщений для двух самых распространённых случаев – чтение регистров командой 03Hex (3) и запись регистров командой 10Hex (16).
Пример отправки мастером (TP2507) запроса на чтение: 08 03 000A 0002 E490
Здесь:
08 | – Номер(адрес) ведомого устройства |
03 | – Функция чтения внутренних регистров |
000A | – Адрес первой ячейки для чтения (10-я ячейка) |
0002 | – Количество 16-разрядных регистров для чтения (2 штуки) |
E490 | – Контрольная сумма |
В ответ ведомое устройство (HCQ1-1200) пришлёт, например:
08 03 04 1234 5678 C70C
Здесь:
08 | – Номер(адрес) ведомого устройства |
03 | – Функция чтения внутренних регистров |
04 | – Количество байт данных (следующие 4 байта – полученные значения регистров) |
1234 | – Значение 10-й ячейки |
5678 | – Значение 11-й ячейки |
C70C |
– Контрольная сумма
|
Пример отправки мастером (TP2507) запроса на запись:
0F 10 0007 0002 04 1234 5678 FD95
Здесь:
0F | – Номер(адрес) ведомого устройства |
10 | – Функция записи внутренних регистров |
0007 | – Адрес первой ячейки для записи (7-я ячейка) |
0002 | – Количество регистров для записи |
04 | – Количество байт данных далее (следующие 4 байта – данные для записи) |
1234 | – Значение для первого регистра |
5678 | – Значение для второго регистра |
FD95 | – Контрольная сумма |
В ответ ведомое устройство (HCQ1-1200) пришлёт, например:
0F 10 0007 0002 F127
Здесь:
0F | – Номер(адрес) ведомого устройства |
10 | – Функция записи внутренних регистров |
0007 | – Адрес первой ячейки для записи (7-я ячейка) |
0002 | – Количество записанных регистров |
F127 | – Контрольная сумма |
Как видно из приведённых выше примеров, данные передаются в ведомое устройство и читаются из него в одном запросе только подряд. Если необходимо, например, прочитать несколько ячеек, которые располагаются в памяти в разных местах то на каждую ячейку придётся отправлять отдельный запрос. Это является существенным минусом протокола Modbus, однако при специальном структурировании памяти устройств можно значительно сократить требуемое число запросов и увеличить общую скорость передачи.
В целом, протокол Modbus RTU является простым и эффективным решением для связи между устройствами в системах контроля и управления. Он успешно применяется во многих отраслях промышленности, таких как энергетика, нефтегазовая промышленность, текстильная промышленность, транспорт и другие. Протокол имеет открытую спецификацию и простую реализацию, поэтому он обеспечивает совместимость самого разнообразного оборудования в системах промышленной автоматизации. На его основе разработан протокол передачи данных в Ethernet сетях – Modbus TCP.