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 – Контрольная сумма
В ответ ведомое устройство (HCQ0-1100) пришлёт, например: 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 – Контрольная сумма
В ответ ведомое устройство (HCQ0-1100) пришлёт, например: 0F 10 0007 0002 F127
Здесь:
0F – Номер(адрес) ведомого устройства
10 – Функция записи внутренних регистров
0007 – Адрес первой ячейки для записи (7-я ячейка)
0002 – Количество записанных регистров
F127 – Контрольная сумма
Как видно из приведённых выше примеров, данные передаются в ведомое устройство и читаются из него в одном запросе только подряд. Если необходимо, например, прочитать несколько ячеек, которые располагаются в памяти в разных местах то на каждую ячейку придётся отправлять отдельный запрос. Это является существенным минусом протокола Modbus, однако при специальном структурировании памяти устройств можно значительно сократить требуемое число запросов и увеличить общую скорость передачи.
В целом, протокол Modbus RTU является простым и эффективным решением для связи между устройствами в системах контроля и управления. Он успешно применяется во многих отраслях промышленности, таких как энергетика, нефтегазовая промышленность, текстильная промышленность, транспорт и другие. Протокол имеет открытую спецификацию и простую реализацию, поэтому он обеспечивает совместимость самого разнообразного оборудования в системах промышленной автоматизации. На его основе разработан протокол передачи данных в Ethernet сетях – Modbus TCP.
Следите за новостями в нашем Телеграм-канале и на сайте HCFA Russia.