Введение в протокол Modbus

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

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

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

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

 

1.1 Метод передачи

При обмене данными в режиме RTU по шине Modbus каждый 8-битный байт сообщения делится на два 4-битных шестнадцатеричных символа, и каждое сообщение должно передаваться непрерывно. Следующие режимы передачи определены как совместимые с протоколом Modebus – режим RTU.

Кодовая система

– 8-битный двоичный код, шестнадцатеричные числа 0…9, A….9, A….F

– Каждое 8-битное поле в сообщении состоит из одного из двух шестнадцатеричных символов.

Бит на байт 1-8-N-1

– 1 стартовый бит

– 8 бит данных, младший бит отправляется первым

– 1 бит четности, нет четности, затем нет

– 1 стоповый бит (с четностью), 2 бита (без четности)

Поле обнаружения ошибок

– CRC (обнаружение циклической избыточности)

Протокол 1.2 года

Когда информационный фрейм поступает на оконечное устройство, он поступает на адресованное устройство через простой «порт», который удаляет «оболочку» (заголовок данных) фрейма данных, считывает данные, выполняет запрошенную данными задачу, если есть нет ошибок, а затем добавляет их. Затем он добавляет сгенерированные данные в полученный «конверт» и возвращает фрейм данных отправителю. Возвращаемые данные ответа содержат следующее содержимое: адрес ведомого терминала (Адрес), выполненная команда (Функция), запрошенные данные, сгенерированные выполненной командой (Данные), и код проверки (Проверка). Не будет успешного ответа для любой ошибки.

1.2.1 Кадры сообщений

 

Адрес

Функция

Данные

Проверьте

 

8-битный

8-битный

N x 8 бит

16-битный

 

Рисунок 1 – 1. Формат кадра сообщения

Примечание. Максимальная длина кадра сообщения Modbus составляет 256 байтов, т. е. N больше или равно нулю и меньше или равно 252 (N{0, 252}).

Другими словами, всего данных 256, а осталось 253 данных.

1.2.2 Адресное поле

Поле адреса информационного фрейма (информационный адрес) находится в начале фрейма и состоит из 8 бит, допустимый диапазон адресов ведомого устройства 0-247 (десятичный), а диапазон адресации каждого ведомого устройства 1 -247. Когда ведомое устройство отвечает, оно помещает свой собственный адрес в адресную область ответного сообщения, чтобы хост мог идентифицировать адрес ответившего ведомого устройства.

Адрес 0 — это широковещательный адрес, который распознается всеми ведомыми устройствами. Когда протокол Modbus используется в продвинутых сетях, никакая широковещательная рассылка или другие замены не допускаются.

1.2.3 Функциональное поле

Код функционального поля кадра сообщения сообщает, какую функцию выполняет адресуемый терминал. Допустимые коды находятся в диапазоне от 1 до 225 (десятичные), некоторые коды применимы ко всем контроллерам, некоторые адаптированы для определенных контроллеров, а некоторые зарезервированы для последующего использования. Полный список кодов подстановки функций см. в Приложении A.

Когда хост отправляет сообщение ведомому, код функции указывает ведомому действие, которое должно быть выполнено. Например, прочитать состояние ON/OFF набора дискретных катушек или входных сигналов, прочитать данные набора регистров, прочитать диагностический статус ведомого устройства, записать катушки (или регистры), разрешить перехват, запись, подтвердить программу в ведомом устройстве и т. д. Когда ведомое устройство отвечает на хост, функциональный код может указывать на нормальный ответ или ошибку (т.е. ненормальный ответ), когда нормальный ответ, из предложения просто вернуться к исходному функциональному коду; ненормальный ответ, ведомое устройство возвращает код, эквивалентный исходному коду, а старший допустимый бит устанавливается в «1».

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

0000 0011 (hex 03) Если ведомое устройство правильно получает запрошенную информацию о действии, оно возвращает то же значение кода, что и обычный ответ. При обнаружении ошибки возвращается сообщение об аномальном звонке, как показано ниже.

1000 0011 (шестнадцатеричный 83)

Подчиненное устройство отвечает за обработку аномального ответа, обычно путем отправки тестового и диагностического сообщения подчиненному устройству с хоста и уведомления оператора. В Таблице 1–1 перечислены все общие функциональные коды для устройства, их значение и исходная функция.

Таблица 1-1 Общие функциональные коды

 

Код:

Имя и фамилия

Функция

 

01

Читать состояние катушки

Получить текущее состояние (ВКЛ/ВЫКЛ) набора логических катушек

 

02

Чтение состояния ввода

Получить текущее состояние набора переключающих входов (ВКЛ/ВЫКЛ)

 

03

Чтение регистров хранения

Получить текущее двоичное значение в одном или нескольких регистрах хранения

 

04

Чтение входных регистров

Получить текущее двоичное значение в одном или нескольких входных регистрах

 

05

Силовая одиночная катушка

Принудительное включение/выключение состояния логической катушки

 

06

Предустановка одного регистра

Размещение определенного двоичного значения в одном регистре

 

07

Чтение статуса исключения

Получить статус включения / выключения 8 внутренних катушек

 

15

Принуждение нескольких катушек

Принудительное включение и выключение цепочки последовательных логических катушек

 

16

Предустановка нескольких регистров

Помещает серию определенных двоичных значений в серию нескольких регистров.

 

17

Сообщить об идентификации подчиненного устройства

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

 

1.2.4 Поля данных

Поле данных содержит данные, необходимые терминалу для выполнения определенной функции, или данные, собранные терминалом в ответ на запрос. Содержимым этих данных могут быть числовые значения, справочные адреса или предельные значения. Он состоит из двух шестнадцатеричных битов данных (от 2 до восьмой степени числа 256) в диапазоне данных 00-FF (шестнадцатеричный). Например: код функционального поля указывает терминалу прочитать регистр, в то время как поле данных должно указывать, с какого регистра начинать и сколько данных читать, со встроенными адресами и данными, которые варьируются в зависимости от типа и возможностей ведомого устройства. Если ошибки не возникает, ответное сообщение от подчиненного устройства к хосту содержит запрошенные данные, а если возникает ошибка, в данных присутствует ненормальный код, который позволяет хосту определить и выполнить следующее действие. Длина области данных может быть «нулевой», чтобы указать определенный тип информации.

1.2.5 Поле проверки ошибок

Домен позволяет хосту и терминалу проверять наличие ошибок в процессе передачи. Иногда из-за электрических помех и других помех в наборе данных при передаче от одного устройства к другому устройству на линии могут быть некоторые изменения, проверка ошибок, чтобы гарантировать, что хост или терминал не реагируют на эти изменения в процессе передачи. данных, что повышает безопасность и эффективность системы, проверка ошибок с помощью 16-битного метода циклической избыточности, то есть контрольной суммы CRC.

Поле обнаружения ошибок содержит 16-битное значение (реализовано двумя 8-битными символами). Содержимое поля обнаружения ошибок получено из метода обнаружения циклической избыточности для содержимого сообщения. Поле CRC добавляется в конец сообщения, и сначала добавляется младший байт, а затем старший байт. Следовательно, старший байт CRC является последним байтом отправленного сообщения.

1.2.6 Последовательная передача символов

Когда сообщение передается по стандартной сети семейства Modbus, каждый символ или байт отправляется в последовательности слева направо:

Наименьший значащий бит (LSB)…. Максимальный значащий бит (MSB).

Последовательность битов такова:

С паритетом

 

Начальный бит

1

2

3

4

5

6

7

8

Бит четности

Стоповые биты

 

Нет проверки четности

 

Начальный бит

1

2

3

4

5

6

7

8

Стоп биты

Стоп биты

 

Рисунок 1 – 2. Битовая последовательность (RTU)

1.2 Обнаружение ошибок

1. Проверка четности

Пользователь может настроить контроллер на контроль четности или даже контроль четности или отсутствие контроля четности. Это определит, как бит четности установлен в каждом символе.

Если указана четность, количество битов «1» будет учитываться в количестве битов на символ (7 битов данных в режиме ASCII, 8 битов данных в RTU). Например, символьный фрейм RTU содержит следующие 8 битов данных: 1 1 0 0 0 1 0 1

Общее количество «1» равно 4. Если используется четность, бит четности кадра будет равен 0, поэтому количество «1» по-прежнему равно 4. Если используется нечетная четность, бит четности кадра будет равен 1. будет 1, а количество «5» будет XNUMX.

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

2、Обнаружение CRC

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

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

CRC начинается с установки всех 16 бит регистра в «1», а затем помещения данных двух соседних 8-битных байтов в текущий регистр, только 8-битные данные каждого символа используются для генерации CRC, стартовый бит, стоповый бит и бит четности не добавляются в CRC.

При формировании CRC каждый 8-битный байт изо-ор с содержимым регистра, затем результат сдвигается в младший бит, старший бит дополняется «0», младший бит (LSB) сдвигается наружу и обнаружен, если он равен 1, регистр iso-or с предустановленным фиксированным значением, если младший бит равен 0, обработка не выполняется.

После сдвига последнего бита (8-го бита) следующий 8-битный байт и текущее значение запоминающего устройства будут выполнять операцию iso-or, и будет выполняться еще одна операция 8-битного сдвига iso-or.

Процесс генерации CRC:

1. Установите 16-битный регистр в 0FFFFH (все 1), называемый регистром CRC.

2. Выполните операцию iso-or между первым 8-битным байтом в кадре данных и младшим байтом в регистре CRC и сохраните результат обратно в регистр CRC.

3. Сдвиньте регистр CRC на один бит вправо, заполните старший бит 0, младший бит сдвинется и будет обнаружен.

4. Если младший бит равен 0: повторите шаг 3 (следующий сдвиг).

Если младший бит равен 1: установите в регистре CRC предустановленное фиксированное значение (0A001H) для выполнения операции iso-or.

5. Повторяйте шаг 3 и шаг 4 до 8 смен. Это завершает обработку полных восьми битов.

6、 Повторяйте шаги со 2 по 5 для обработки следующего октета, пока не будут обработаны все байты.

7、 Окончательное значение регистра CRC является значением CRC.

Когда значение CRC добавляется к сообщению, младший бит идет первым, а старший бит — вторым. Посмотрите пример в Приложении C, в котором подробно объясняется контрольная сумма CRC.

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

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

Ваш электронный адрес не будет опубликован.


*