Протокол Modbus. Особенности

В данной статье будут рассматриваться основные характеристики протокола Modbus.

Рассмотрим некоторые особенности из широкого спектра различий между протоколами Modbus RTU и Modbus TCP, реализуемыми через последовательный интерфейс и через Ethernet.

Мы также обсудим различные стандарты соединения для последовательной передачи данных.

Далее мы рассмотрим прохождение пакетов Modbus в качестве Мастера и Слейва сети через последовательный интерфейс и в качестве Клиента и Сервера через Ethernet.

Углубимся в особенности адресации данных в протоколе Modbus.

Также мы затронем тему о том, как плавающие и двойные целочисленые значения обрабатываются протоколом Modbus.

Для начала немного истории.

Modbus представляет собой последовательный коммуникационный протокол, разработанный компанией Modicon в 1979 (Schneider Electric) .

Он был создан специально для использования в ПЛК, производимых этой компанией для промышленного применения.

На сегодняшний день Modbus является распространенным открытым протоколом, используемым для широкого спектра средств автоматизации.

Modbus может использоваться как для передачи данных через Ethernet, так и через последовательный интерфейс.

Существуют три основных разновидности протокола Modbus: Modbus ASCII, Modbus RTU и Modbus TCP/IP.

Первоначально Modbus был разработан с использованием ASCII-символов для кодирования сообщений и эта версия протокола все еще используется.

Modbus RTU является самой распространенной реализацией данного протокола, использующей двоичное кодирование и CRC проверку ошибок.

Эти два режима – ASCII и RTU – несовместимы. Поэтому устройство, сконфигурированное для режима ASCII, не может взаимодействовать с другим устройством при помощи Modbus RTU.

Устройства, поддерживающие Modbus RTU, обычно используют один из трех интерфейсов: RS232, RS485, и RS422.

Топология сети «точка – точка» используется для подключения устройств по Интерфейсу RS232.

Если вам требуется подключить друг к другу только два устройства, и расстояние между этими ними составляет менее 15 метров, то стоит использовать RS232.

Для подключения до 32 устройств на одной линии и/или на расстояние большее, чем 100 метров, необходимо использовать RS485 или RS422.

Для Мастера, сообщающегося с несколькими Слейвами, на сегодняшний день наиболее популярным интерфейсом является RS485.

Этот стандарт может поддерживать до 32 узлов в диапазоне до 4000 футов или примерно 1200 метров без повторителей.

Единицей измерения передачи сообщений через Modbus является скорость передачи бит в секунду.

Все устройства в сети RTU должны использовать одинаковую скорость передачи данных.

Различные устройства поддерживают различные скорости передачи, но диапазон между 9600 и 19200 битами является типичным.

Через протокол Modbus модули ввода-вывода могут иметь количество сигналов более 10 000.

В последовательной сети Modbus есть одно устройство-Мастер, который передает команды подчиненным устройствам-Слейвам.

Сами Слейвы информацию не передают, за исключением случаев, когда они получают такую команду от Мастера.

Допустимое максимальное количество Слейв-устройств на одной шине Modbus в последовательной сети составляет 247 единиц, каждое из которых имеет свой уникальный ID-адрес от 1 до 247.

Однако интерфейс RS485 не может управлять более чем 32 узлами в одном сегменте; поэтому если в сети более 32 узлов, то потребуется повторитель.

Мастер может выдавать команды Слейв-устройствам, а также считывать с них данные.

СКАДА-система/человеко-машинный интерфейс обычно являются Мастерами, взаимодействующими с несколькими Слейв-устройствами. Устройства должны быть подключены последовательным соединением; они не могут быть соединены по топологии «звезда».

Modbus через Ethernet работает следующим образом: для связи друг с другом устройства Modbus используют постоянные кабели Ethernet и сетевые свитчи.

Главной отличительной особенностью Modbus TCP/IP является то, что протокол прикладного уровня (MBAP) добавляет сообщение для каждого устройства, подключенного по сети.

ID Слейв-устройства в начале сообщения удаляется так же, как циклический контроль конца сообщения.

Протокол прикладного уровня содержит всю информацию, необходимую для маршрутизации данных в адрес устройства по умолчанию.

Modbus использует порт 502 для связи через TCP/IP.

Это важно, если данные должны пройти через систему сетевой защиты.

Большое количество пользователей использует этот порт для передачи данных через протокол прикладного уровня (MBAP).

Последовательные сообщения Modbus также могут быть отправлены как обычные сообщения RTU в рамках передачи данных внутри и пакета Ethernet TCP/IP (инкапсуляция).

Такие инкапсулированные сообщения могут использовать любой порт, но средства автоматизации настроены на использование порта 2000 по умолчанию.

Обращаем внимание, что инкапсуляция протокола прикладного уровня (MBAP) и RTU не допустима; устройства должны быть настроены на использование либо одного, либо другого протокола.

Сообщения протокола прикладного уровня (MBAP) на сегодняшний день являются самым популярным способом связи через Modbus TCP/IP.

В данной статье мы сделаем упор на рассмотрение Modbus RTU и Modbus TCP/IP с использованием протокола прикладного уровня (MBAP).

Modbus TCP/IP использует понятия «Клиент» и «Сервер» вместо «Мастер» и «Слейв».

Сеть TCP/IP состоит из Клиента, подключенного к сетевому коммутатору (коммутаторам), к которому также подключены все Серверы в сети.

Устройства, поддерживающие Modbus TCP/IP, используют межсетевой протокол для сети Интернет и требуют маску подсети.

IP-адрес и маска подсети представлены упорядоченным набором из 8 бит или иначе – октетом.

IP-адреса местоположения конкретного устройства в сети и Серверов маски подсети упрощают задачу маршрутизации трафика в сети.

Если вы не знаете свой IP-адрес, то IT-группа или администратор сети позволят вам узнать IP-адреса и маску подсети, которые будут необходимы вашим устройствам.

Шлюз по умолчанию является необязательным и не требуется для сетей, которые его не используют.

По этому вопросу вы также сможете проконсультироваться у вашей IT-группы или администратора сети.

А теперь давайте поговорим о нецентровой системе адресации Modbus и разнице между строками в данной таблице.

Здесь представлены 4 строки, в которых хранится информация.

Две строки хранят простые дискретные значения, называемые ячейками, и цифровые 16-битные значения, известные как регистры.

Для каждого типа данных имеется одна строка только для чтения и одна строка для чтения и записи.

Там нет строк для 32-битных типов данных, потому что в то время, когда Modbus был определен и зафиксирован, двойные целые числа и значения с плавающей точкой не были доступны в ПЛК.

Существует способ, чтобы использовать эти типы данных, мы вернемся к этому вопросу чуть позже.

Каждая строка имеет максимум 9999 адресов.

Адреса от 1 до 9999 предназначены для чтения и записи, адреса с 10001 по 19999 предназначены только для чтения для дискретных входов.

Адреса от 30001 до39 999 предназначены только для чтения входных регистров, адреса от 40 001 до 49 999 используются для чтения и записи для регистров временного хранения.

На данный момент эта информация пригодится, чтобы объяснить термины, используемые для типов данных в Modbus.

Ячейки в дискретных входах Modbus, как правило, используются для передачи 1-битных данных или булевых данных. Состояние бита: либо поднят, либо опущен.

Регистром обозначается 1 слово (word) или 16 бит или 2 байта или переменная INTEGER.

Нет регистров для плавающих и двойных целочисленых значений, хотя они могут быть посланы, разделившись при этом на два регистра (WORD).

Значение плавающей переменной выражается в любом числе с десятичной точкой, которое представлено 32-битовым регистром.

Двойные целые числа, или DINTы являются просто двумя 16-битными значениями, сложенными вместе. Также представлены 32 битами.

Это представляется небольшой проблемой, поскольку Modbus не имеет плавающих и двойных целочисленых типов значений.

Решение данной проблемы представляется очевидным: 32 + -битовое значение разбивается на 2 отдельных 16-битных регистра, а затем преобразовывается в 32-битное реальное значение (REAL).

Это достигается путем копирования двух 16-битных регистров в 1 переменную типа REAL. Функциональные коды Modbus представляют собой простые цифровые коды, которые указывают слейв-устройствам на то, какие таблицы данных используются для доступа и какую функцию необходимо выполнить в этой таблице – чтение или запись.

Каждая функция кода относится к определенному диапазону адресов таблицы данных.

Например, функциональный код 1 является это кодом для чтения и индивидуальным битом состояния.

Функциональный код 16 предназначен для записи нескольких регистров временного хранения.

Вот некоторые из наиболее часто используемых функциональных кодов.

Modbus не определяет, как именно данные должны храниться в регистрах.

Различные производители средств автоматизации используют разные способы хранения и передачи данных.

Некоторые устройства будут передавать первым старший байт, а затем младший байт.

Другие же устройства будут делать это с точностью до наоборот.

К тому же, когда регистры объединяются, чтобы представлять 32 + – реальные битовый значения, некоторые устройства будут передавать более высокий 16-бит в первом регистре и младшие 16-бит во втором регистре.

Другие производители делают это с точностью до наоборот.

Последовательность, в которой посылают байты или слова, не имеет значения до тех пор, пока приемное устройство знает, в каком порядке они следуют.

Данные отображаются некорректно, если байт или слово неверные; в этом случае средства автоматизации имеют функцию подкачки байт и слов, которая будет выставлять их в обратный порядок, в котором данные хранятся и отправляются, обеспечивая, тем самым, быстрое решение вопроса.

И в завершении рассмотрим сообщения по Modbus RTU, которые отправляются от Мастера к Слейв-устройствам.

Сообщение содержит ID-адрес Слейв-устройства, которому предназначается команда, функциональный код для чтения или записи данных и сами данные сообщения.

После того, как Слейв-устройство получает команду, оно возвращает запрашиваемые данные к Мастеру в случае, если командой было чтение, или записывает данные в собственную базу данных, а затем посылает обратно к Мастеру исходное сообщение, чтобы подтвердить, что сообщение было получено.

Мы надеемся, что эта статья даст лучшее понимание Modbus и TCP/IP.

#Modbus, #protocol, #features, #модбас, #особенности, #протокола


Если Вы не нашли то, что искали, сообщите об этом в комментарии


Оставьте первый комментарий

Ваш комментарий добавлен


Возврат к списку