Modbus RTU, ASCII и TCP с SerialTool

Что такое Modbus

Modbus - это протокол последовательной связи, созданный в 1979 году компанией Modicon® (теперь часть Schneider Electric) для подключения своих программируемых логических контроллеров (ПЛК). Он стал фактическим стандартом в промышленной связи и является одним из самых широко используемых протоколов подключения в мире среди промышленных электронных устройств. Modbus - это протокол без лицензионных отчислений, объявленный в спецификациях на сайте The Modbus Organization.

Простыми словами, это метод передачи информации по последовательным линиям между электронными устройствами. Устройство, запрашивающее информацию, называется клиентом Modbus, а устройства, предоставляющие информацию, - серверами Modbus. В стандартной сети Modbus есть один клиент и до 247 серверов, каждый с уникальным адресом сервера от 1 до 247. Клиент также может записывать информацию на сервера.


Изначально разработанный для использования в промышленности, со временем этот протокол был принят в различных отраслях, став одним из самых распространенных протоколов. Даже сегодня, спустя более 40 лет, он доступен во многих устройствах, таких как панели оператора, ПЛК, системы умного дома и даже встроен в простые устройства, такие как Arduino.

Передача Modbus RTU и ASCII через последовательный порт

Когда протокол был создан, коммуникация предполагалась через последовательный порт, поэтому он был реализован в SerialTool. Modbus часто используется для подключения надзорного компьютера к удаленному блоку управления (RTU) в системах надзора, управления и сбора данных (SCADA). В зависимости от формата передачи данных протокол делится на:

  • MODBUS RTU - данные передаются в шестнадцатеричном формате.
  • MODBUS ASCII - данные передаются в ASCII формате.

Контроль ошибок различен в двух случаях; в MODBUS RTU используется циклическая избыточная проверка (CRC) и передается после команд, в то время как в MODBUS ASCII используется продольная избыточная проверка (LRC) и передается после команд.

Передача Modbus TCP

В 1999 году был разработан "Modbus TCP", стандарт, предназначенный для сетей, использующих набор протоколов TCP/IP. Это, по сути, версия серийного Modbus RTU на основе TCP/IP, обеспечивающая связь через сети интернета/внутренние сети. В последние годы версия TCP/IP используется все чаще, потому что она является открытым исходным кодом, легко внедряемой, имеет низкие затраты на разработку и минимальную поддержку аппаратных средств.

Контроль ошибок различен в двух случаях; в MODBUS RTU используется циклическая избыточная проверка (CRC) и передается после команд, в то время как в MODBUS ASCII используется продольная избыточная проверка (LRC) и передается после команд.

Протокол Modbus TCP/IP использует бинарное кодирование данных и механизм обнаружения ошибок TCP/IP. В отличие от последовательного Modbus, версия TCP/IP ориентирована на соединение и позволяет одновременное выполнение на одном и том же устройстве или на нескольких устройствах. Modbus TCP/IP также использует парадигму мастер-рабочий, и эта связь использует четыре типа сообщений.

Modbus размещен на уровне 7 в модели OSI/ISO (прикладной уровень), определяя форматирование сообщения, называемое оформлением, и режим передачи данных и управляющих функций. Общение происходит через парадигму клиент-сервер. Протокол определяет блок передачи протокольных данных (PDU), который не зависит от нижнего уровня связи. Протокольный блок данных приложения (ADU) вводит дополнительные поля для адресации и контроля ошибок.

SerialTool Modbus Client

SerialTool поддерживает режимы передачи RTU, ASCII и Modbus TCP для обеспечения максимальной профессиональной гибкости клиента Modbus.
SerialTool также предлагает возможность отправки сырых команд для удовлетворения любых потребностей разработчика.

Экран с журналом отправленных команд

Экран с отправленными командами низкого уровня


Функции Modbus

Вот функции, которые реализует SerialTool для протокола Modbus.

Function Code Action Table Name
0x01 Read Discrete Output Coils
0x02 Read Discrete Input Contacts
0x03 Read Analog Output Holding Register
0x04 Read Analog Input Registers
0x05 Write Single Discrete Output Coil
0x06 Write Single Analog Output Holding Register
0x0F (dec 15) Write Multiple Discrete Output Coils
0x10 (dec 16) Write Multiple Analog Output Holding Registers

Структуры данных Modbus

Информация хранится в устройстве сервера в четырех различных таблицах. Две таблицы хранят дискретные значения включено/выключено (катушки), и две хранят числовые значения (регистры). И у катушек, и у регистров есть таблица только для чтения и таблица для чтения/записи. Каждая таблица имеет 9999 значений. Каждая катушка или контакт занимает 1 бит и имеет адрес данных от 0000 до 270E. Каждый регистр представляет собой 1 слово = 16 бит = 2 байта и также имеет адрес данных от 0000 до 270E.

Coil/Registers numbers Data Addresses Type Table Name
1-9999 0x0000 to 0x270E Read/Write Discrete Output Coils
10001-19999 0x0000 to 0x270E Read Only Discrete Input Contacts
30001-39999 0x0000 to 0x270E Read Only Analog Input Register
40001-49999 0x0000 to 0x270E Read/Write Analog Output Holding Register