Обзор протокола Modbus TCP
Протокол ModbusTCP является одним из наиболее широко используемых и популярных протоколов в автоматизации промышленности. Он основан на формате сообщений протокола Modbus, который изначально разработан для передачи данных через последовательные интерфейсы, такие как RS-485.
Основное отличие ModbusTCP от ModbusRTU заключается в протоколе транспортного уровня. В то время как ModbusRTU использует для передачи данных на физическом уровне интерфейс RS-485, ModbusTCP использует сети Ethernet и протокол TCP/IP, состоящий из стека протоколов, включающего IP (Internet Protocol) и TCP (Transmission Control Protocol).
Протокол TCP является одним из основных протоколов в сетях Ethernet и обеспечивает установление надежного соединения между двумя или более узлами сети. Перед передачей сообщений сначала устанавливается связь между определёнными портами устройств (по умолчанию, в ModbusTCP используется порт 502). После передачи связь между портами закрывается. Данные, передаваемые по протоколу TCP, разделяются на пакеты, которые доставляются в порядке отправления и проверяются на целостность. Если какой-либо пакет данных потерян или поврежден, TCP повторно отправляет его, чтобы гарантировать надежную передачу данных.
Ещё одно существенное различие — это архитектура сети устройств. Архитектура Master-Slave в протоколе ModbusRTU предполагает наличие только одного ведущего и нескольких ведомых устройств. Мастер отправляет запросы к подчинённым устройствам для получения данных или выполнения определенных действий. А они, в свою очередь, могут отвечать на запросы мастера, предоставлять запрашиваемые данные или выполнять запрошенные действия.
С другой стороны, архитектура Server-Client в протоколе ModbusTCP допускает наличие нескольких серверов и нескольких клиентов. Клиенты отправляют запросы к серверам для получения данных или выполнения определенных действий. Серверы отвечают на запросы клиента, предоставляют необходимые данные или выполняют запрошенные действия.
Также стоит отметить, что протокол ModbusRTU в основном используется для связи с полевыми устройствами, такими как датчики и преобразователи частоты, в то время как протокол ModbusTCP более широко применяется в системах среднего и верхнего уровня.
ModbusTCP обладает следующими преимуществами:
- Открытость: Modbus – открытый и простой протокол. Поэтому большинство производителей промышленного оборудования добавляют реализацию основных функций этого протокола в свои продукты.
- Легкость настройки: ModbusTCP не требует сложной настройки и установки дополнительных аппаратных средств. Это значительно упрощает процесс интеграции в существующую систему.
- Надежность: Использование протокола TCP в качестве транспортного обеспечивает надежную передачу данных, что важно для промышленных систем. Протокол автоматически контролирует передачу данных, гарантируя их надёжную доставку.
- Скорость: Возможно использование высокоскоростных сетей FastEthernet, что позволяет создавать системы с высокими требованиями к скорости передачи данных между устройствами.
- Совместимость: Широкая поддержка и использование протокола ModbusTCP в промышленности обеспечивает его совместимость с большим количеством устройств и систем. Большинство ПК и серверов уже имеют Ethernet порты, поэтому обмен данными с системой верхнего уровня обычно можно реализовать на существующем сетевом оборудовании.
Разберём отличие формата посылки RTU и TCP версий протокола Modbus. Более подробно с форматом посылок ModbusRTU можно познакомиться в этой статье. Так как надёжную передачу сообщения гарантирует протокол TCP, то потребность в дополнительной контрольной сумме отпадает. Также, так как протокол IP уже предполагает наличие уникального адреса устройства в сети, то из посылки можно было бы убрать и дополнительный адрес подчинённого устройства. Но для однообразия формата посылок RTU и TCP он был оставлен. Однако реализации протокола от различных производителей оборудования по-разному реагируют на байт адреса устройства в посылке. Некоторые реализации требуют уникального номера, некоторые реагируют только на число FF (255), а некоторые вообще никак не реагируют на этот байт. Также вначале TCP посылки пересылается два байта TransactionID (зависит от конкретной реализации и обычно заполняется нулями), затем два байта ProtocolID (заполняется нулями), затем два байта длины остального сообщения (в байтах). Разберём формат сообщений на том же примере, что был использован в статье про ModbusRTU. Но теперь в качестве клиента будет выступать другая панель HMI производства HCFA, а именно - TP2507-E со встроенным портом Ethernet. Контроллер HCQ1-1200 кроме двух портов RS485 также имеет два встроенных порта Ethernet, поэтому его тоже можно использовать в качестве сервера ModbusTCP:
Пример отправки клиентом (TP2507-E) запроса на чтение:
0000 0000 0006 08 03 000A 0002
Здесь:
0000 | – ID сообщения / ID сообщения |
0006 | – Длина посылки (6 байт далее) |
08 | – Номер (адрес) ведомого устройства |
03 | – Функция чтения внутренних регистров |
000A | – Адрес первой ячейки для чтения (10-я ячейка) |
0002 | – Количество 16-разрядных регистров для чтения (2 штуки) |
В ответ сервер (HCQ1-1200) пришлёт, например:
0000 0000 0007 08 03 04 1234 5678
Здесь:
0000 |
– ID сообщения / ID сообщения |
0007 | – Длина посылки (7 байт далее) |
08 | – Номер(адрес) ведомого устройства |
03 | – Функция чтения внутренних регистров |
04 | – Количество байт данных (следующие 4 байта – полученные значения регистров) |
1234 | – Значение 10-й ячейки |
5678 | – Значение 11-й ячейки |
В заключение, ModbusTCP является удобным и распространённым протоколом, основанным на формате сообщения Modbus, который обеспечивает надежную и эффективную передачу данных между устройствами и узлами в системах автоматизации. Поддержка протокола TCP обеспечивает надежность и скорость передачи данных, а также облегчает интеграцию с другими сетями и системами.