ModBus — это протокол связи, используемый для подключения оборудования автоматизации (например, ПЛК, контроллера температуры и т. д.) и компьютеров. Он широко используется в промышленных системах управления и поддерживает различные методы связи, включая ModBus RTU, ModBus ASCII и ModBus TCP. В этой статье в основном объясняются различия и сценарии применения этих трех методов связи.
Базовая структура всех протоколов ModBus
Независимо от варианта, все стандартные коммуникации ModBus имеют одну и ту же структуру сообщений. Все вращается вокруг сохранения значений в регистрах и последующего их чтения. Здесь задействовано несколько типов данных.
Например, дискретные входы могут храниться как отдельные биты. В более широком смысле, входные регистры хранят значения, собираемые устройствами на базе ModBus. Несколько дискретных устройств хранятся в виде отдельных битов, тогда как аналоговые значения или даже символы ASCII могут храниться в 8-битных регистрах (младший бит — 0 бит, старший бит — 64 бита).
Различные типы регистров классифицируются по функциональному коду, используемому для их опроса. «1» в поле функционального кода используется для «чтения катушки» (проверки состояния управляющего реле). «2» означает «прочитать дискретный вход» (проверить состояние дискретного входа). «3» — «регистр хранения чтения» (собирает данные из многоцелевого регистра чтения/записи). В спецификации ModBus есть еще кое-что. Регистр запрашивается по его «начальному адресу», который представляет собой 16-битное значение, уникально идентифицирующее каждый регистр в устройстве. Главные запросы к RTU или другому устройству всегда будут ссылаться на необходимый регистр, о котором необходимо сообщить.
ModBus RTU (удаленный терминальный блок) является наиболее распространенной реализацией протокола ModBus. Он использует передачу двоичных данных и имеет высокую эффективность и стабильность передачи. Он использует последовательную связь и поддерживает интерфейсы RS232 и RS485. В режиме RTU в одном байте можно передавать два шестнадцатеричных символа. Например, 0xAB будет отправлен непосредственно в шестнадцатеричном виде 0xAB (двоичный код 10101011). Формат кадра сообщения состоит из следующих частей:
В режиме RTU используется 16-битная проверка CRC, а последующие команды/данные имеют контрольную сумму циклического избыточного кода. Режим RTU используется чаще, тогда как ASCII обычно используется редко.
ModBus TCP (протокол управления передачей) является расширением протокола ModBus. Он использует протокол TCP/IP для связи и может передавать данные между локальной сетью (LAN) и глобальной сетью (WAN). ModBus TCP поддерживает различные сетевые устройства, включая компьютеры, серверы, коммутаторы, маршрутизаторы и т. д. Он подходит для удаленного мониторинга и управления и широко используется в промышленных сетях и приложениях IoT. Физический уровень, уровень канала передачи данных, сетевой уровень и транспортный уровень этого протокола основаны на протоколе TCP. Он инкапсулирует протокол ModBus только на прикладном уровне. Затем принимающая сторона распаковывает пакет данных TCP, восстанавливает исходный кадр ModBus, затем анализирует его в соответствии со спецификацией протокола ModBus, повторно инкапсулирует возвращенный пакет данных в протокол TCP и отправляет его обратно на отправляющую сторону. В отличие от формата передачи последовательной связи, режим TCP удаляет дополнительный адрес и контрольную сумму и добавляет заголовок сообщения, как показано на рисунке ниже.
При передаче через Ethernet режим TCP используется без проверки, поскольку протокол TCP является надежным протоколом, ориентированным на соединение.
ModBus RTU и ModBus TCP являются двумя основными вариантами протокола ModBus. ModBus RTU (тот, который должен передавать информацию обратно на ведущее устройство ModBus или SCADA HMI) традиционно используется многими различными типами устройств. ModBus RTU обычно передается последовательно через RS485. Этот последовательный канал связи позволяет нескольким устройствам передавать данные на один порт HMI в конфигурации «главный-подчиненный». Каждое подчиненное устройство может обмениваться данными, отправляя трафик главному устройству. Это делает структуру сети ModBus достаточно простой.
ModBus ASCII (Американский стандартный код обмена информацией) использует код ASCII для передачи текстовой информации, и каждый 8-битный байт отправляется как два символа ASCII. По сравнению с ModBus RTU эффективность его передачи ниже, но читаемость лучше. ModBus ASCII также использует последовательную связь и поддерживает интерфейсы RS232 и RS485, что подходит для связи на небольших расстояниях. В режиме ASCII каждый 8-битный байт для передачи разделяется на два символа ASCII. Кадр сообщения начинается с английского двоеточия «:» и заканчивается символом возврата каретки и перевода строки (CRLF). Например, шестнадцатеричное число 0xAB при передаче будет разложено на символы ASCII «A» и «B».
Режим ASCII допускает интервал до 1 с между двумя символами, не вызывая сбоев связи. Формат ASCII использует контрольную сумму продольного избыточного кода (LRC).
Разница между тремя
Основное различие между ModBus RTU и ModBus TCP заключается в том, что ModBus RTU использует шлейфовую сеть, поэтому вся сеть может быть подключена через два провода и взаимодействовать с каждым устройством, присваивая каждому узлу уникальный адрес. ModBus TCP использует звездообразную сеть, в которой каждый узел имеет отдельный кабель Cat 5 или Cat 6. Их можно подключить с помощью роутера. Они также имеют уникальный персональный адрес для каждого узла в сети. Адреса могут быть от 1 до 255, что означает, что теоретически в одной сети может быть 254 устройства. ModBus TCP также можно использовать через Интернет.
В ModBus RTU и ModBus ASCII связь осуществляется через последовательный интерфейс, что означает, что они могут обмениваться данными только на более коротких расстояниях. Поэтому, если вам необходимо общаться на больших расстояниях, вам необходимо использовать ModBus TCP. С другой стороны, ModBus RTU и ModBus ASCII используют для передачи данных двоичные коды и коды ASCII соответственно, поэтому существуют различия в их эффективности передачи и читаемости. При выборе метода связи ModBus необходимо учитывать множество факторов, включая расстояние связи, эффективность передачи и читаемость. Для связи на малом расстоянии в качестве опции доступны ModBus RTU и ModBus ASCII. Если вам нужна более высокая эффективность передачи, вы можете выбрать ModBus RTU, если вам нужна лучшая читаемость, вы можете выбрать ModBus ASCII; Для связи на больших расстояниях можно использовать только ModBus TCP.