Диалоговые процедуры и форматы кадров
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Процедура обмена сообщениями Modbus приведена на рис. 13.

Рис. 13. Диалоговая процедура обмена сообщениями в Modbus

 

Сообщения при обмене формируются в кадр из отдельных байт (символов, посылок). Возможные структуры байта в Modbus RTU приведены на рис. 14.

Рис. 14. Структура байта Modbus

а - при наличии бита контроля на четность/нечетность (бит паритета), б - при отсутствии бита паритета

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

Кадры запроса и ответа по протоколу Modbus имеют фиксированный формат. Каждый запрос со стороны ведущего узла включает код команды (чтение, запись и т.д.), адрес абонента, размер поля данных, собственно данные и контрольный CRC-код. Функция обслуживания тайм-аута реализована для фиксирования коллизий при приеме/передаче данных. Размер полей в байтах приведен на рис. 15.

Старт кадра - очередной кадр начинается с интервала тишины (логического сигнала 1) длительностью не менее 3,5 символа (байта) на данной скорости передачи. Стартовое поле необходимо, поскольку используется асинхронная передача, и необходимо в канале связи иметь признак начала передачи.

.

 

Рис. 15. Формат кадра протокола локальной сети подстанции:

А – адрес подчиненного устройства; F – номер функции; D – данные;

CRC – контрольная сумма

 

Адрес подчинённого устройства — первое однобайтное поле кадра. Оно содержит адрес подчинённого устройства, к которому адресован запрос. Подчинённые устройства отвечают только на запросы, поступившие только в их адрес. Ответ также начинается с адреса отвечающего устройства, который может изменяться от 1 до 247. Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство, но ответы не возвращаются.

Номер функции (код команды) сообщает устройству, какие данные или выполнение какого действия требует от него ведущее устройство, принимает значения от 1 до 247.

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

Контрольная сумма – заключительное двухбайтное поле кадра, содержащее циклическую контрольную сумму CRC-16 всех предыдущих полей кадра. При формировании CRC используется образующий полином 1010000000000001 (А001h). Проверяется весь кадр, но действия осуществляются только над областями данных каждого байта данных. Старт и стоп биты, бит паритета, если он используется, не учитываются в контрольной сумме. Поле CRC записывается младшим байтом вперёд. Контрольная сумма завершает кадры запроса и ответа.

Стоп кадра - интервал тишины длительностью не менее 3,5 символа.

Коды команд

Коды команд разделены на четыре группы: стандартные (1-21), резерв (22-64), пользовательские (65-119) и для внутренних нужд (120-255). Назначения некоторых кодов приведены в табл. 9.

Таблица 9

Коды функций (команд) Modbus

КОД ИМЯ СОДЕРЖАНИЕ Смещение адреса
01 Read Discrete Output Coil Чтение значений из нескольких регистров флагов 00001
02 Read Discrete Input Contacts Чтение статуса дискретных входов 10001
03 Read Analog Output Holding Registers Чтение значений из нескольких регистров 40001
04 Read Analog Input Registers Чтение входных регистров 30001
05 Write Single Discrete Output Coil Запись значения в один флаг регистра флагов 10001
06 Write Single Analog Output Holding Register Установка значения в один регистр 40001
08 Diagnostics - Loop-back Тестирование связи  
15 Write multiple Discrete Output Coils Запись значений в несколько регистров флагов 10001
16 Write multiple Analog Holding Register Установка значений в несколько регистров 40001

Обработка ошибок

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

В протоколе Modbus используется следующая диалоговая процедура.

1. Если Slave принимает корректный запрос и может его нормально обработать, то возвращает нормальный ответ, в котором адрес и номер функции совпадает с принятыми от Master.

2. Если Slave не принимает какого либо значения, никакого ответа не отправляется. Master диагностирует ошибку по таймауту.

3. Если Slave принимает запрос, но обнаруживает ошибку (паритет, CRC), никакого ответа не отправляется. Master диагностирует ошибку по таймауту.

4. Если Slave принимает запрос, но не может его обработать, отправляется ответ, содержащий в области данных сведения об ошибке. Кроме того старший бит кода команды в ответе устанавливается в единицу.

Стандартные коды ошибок приведены в табл.10 .

Таблица 10

Стандартные коды логических ошибок

Код Сведения о логической ошибке
01 Принятый код функции не может быть обработан на подчиненном.
02 Адрес данных указанный в запросе не доступен данному подчиненному.
03 Величина содержащаяся в поле данных запроса является не допустимой величиной для подчиненного.
04 Невосстанавливаемая ошибка возникла во время попытки подчиненным выполнить затребованное действие.
05 Подчиненный принял запрос и обрабатывает его, но это требует много времени. Этот ответ предохраняет главного от генерации ошибки таймаута.
06 Подчиненный занят обработкой команды.
07 Подчиненный не может выполнить программную функцию, принятую в запросе.
08 Подчиненный пытается читать расширенную память, но обнаружил ошибку паритета.

Пример. Послан запрос на чтение группы регистров (код функции 03h). Если запрос принят без ошибки, то slave в ответе укажет также код функции 03h, а если обнаружится ошибка то - 83h. Более подробная информация будет размещена в области данных ответа. Маster должен обработать сообщение об ошибке и в типичном случае посылает повторный запрос.

Примеры кадров протокола Modbus

На рис. 16 рассмотрен запрос данных от Master на чтение в устройстве по адресу 6 (Slave Address =06h) трех регистров с 40108 по 40110 (AE41h-AE43h). Особенность указания номеров регистров в Modbus в том, что к указанным в сообщениях значениям в зависимости от кода команды добавляется смещение адреса (в нашем случае 40001). Так для данного запроса в стартовом адресе будет указано 107 (Starting Address Lo = 6Вh, Starting Address Hi=00h). Адрес приходится записывать по частям, поскольку каждое поле содержит только 8 бит, а для указания максимально возможного допустимого адреса без смещения (9998) потребуется 16 бит (270Eh). Запрашиваемое число регистров (0003h) также указывается в виде двух чисел (No. of Registers Lo=03h; No. of Registers Hi=00h). Значение контрольной секции кадра в примере не показано. Ответ, полученный от подчиненного устройства, содержит следующие сведения. Запрос принят и исполнен без обнаруженных ошибок (Function=03h); всего передается содержимое 6-ти байт данных (по два байта на каждый запрошенный регистр (Byte Count=06h); значения запрошенных регистров (Data Нi, Data Lo) составляют: 022Bh, 0000h и 0063h.

запрос от Master
Field Name ( Hex) 8– Bit Field
Slave Address 06 0000 0110
Function 03 0000 0011
Starting Address Hi 00 0000 0000
Starting Address Lo 6B 0110 1011
No. of Registers Hi 00 0000 0000
No. of Registers Lo 03 0000 0011
Error Check   CRC (16 bits)

 

 
Ответ от Slave
Field Name (Hex) 8–Bit Field
Slave Address 06 0000 0110
Function 03 0000 0011
Byte Count 06 0000 0110
Data Hi 02 0000 0010
Data Lo 2B 0010 1011
Data Hi 00 0000 0000
Data Lo 00 0000 0000
Data Hi 00 0000 0000
Data Lo 63 0110 0011
Error Check   CRC (16 bits)

 

Рис. 16. Кадры протокола Modbus при запросе на чтение регистров

На рис. 17 приведен пример установки значения FFh в 40002-й регистр подчиненного устройства (смещение 40001) с адресом 01h. Кадры Master и Slave при успешном выполнении данной операции будут совпадать. Значения полей указано в шестнадцатеричном коде.

 

Slave adress Function Starting Addr Hi Starting Addr Lo Data Hi Data Lo

Error Check

Адрес подчиненного Номер функции Адрес ст байта Адрес мл байта Данные ст.байта Данные мл.байта CRC мл.байт CRC ст.байт
01 06 00  01 FF FF D9 ВA

 

Рис. 17. Кадр протокола Modbus при установке значения в один регистр

 

Пример запроса состояния 37-ми дискретных выходов (с 20 по 56) в устройстве 17 приведен на рис.18. Значение каждого выхода представляется одним битом. В кадре ответа они группируются в байты. Если возвращаемое количество выходов не кратно восьми, то оставшиеся биты в последнем байте сообщения будут установлены в 0. Счетчик байт содержит количество байт передаваемых в поле данных (5).

запрос от Master
Field Name Hex 8– Bit Field
Slave Address 11 0001 0001
Function 01 0000 0001
Starting Address Hi 00 0000 0000
Starting Address Lo 13 0001 0011
No. of Registers Hi 00 0000 0000
No. of Registers Lo 25 0010 0101
Error Check   CRC

 

 
Ответ от Slave
Field Name Hex 8–Bit Field
Slave Address 11 0000 0110
Function 01 0000 0011
Byte Count 05 0000 0110
Data (Output: 27-20) CD 1100 1101
Data (Output: 35-28) 6B 0110 1011
Data (Output: 43-36) B2 1011 0010
Data (Output: 51-44) 0E 0000 1110
Data (Output: 56-52) 1B 0001 1011
Error Check   CRC

 

Рис. 18. Кадры Modbus при чтении группы дискретных данных

 

Дата: 2018-11-18, просмотров: 382.