В режиме ASCII достигается использованием символа двоеточия ‘:’, указывающего начало кадра, и символов возврата каретки (CR) и перевода строки (LF), указывающих на конец кадра. Символ перевода строки также служит как синхронизирующий символ, который указывает на то, что передающая станция готова для приема ответного сообщения.
Таблица 4
Формат кадра сообщения в режиме ASCII
Начало кадра |
Адрес |
Функция |
Данные |
Контрольная сумма |
EOF |
Готовность приема ответного сообщения |
: |
2 символа 16-бит |
2 символа 16 бит |
N * 4 символа N * 16 бит |
2 символа 16 бит |
CR |
LF |
В режиме RTU может поддерживаться только путем эмулирования синхронного сообщения. Приемное устройство отслеживает время между приемом символов. Если прошло время, равное периоду следования 3.5 символов, а кадр не был завершен или не поступило нового символа, устройство очищает кадр и предполагает, что следующий принимаемый байт - это адрес устройства в новом сообщении.
Таблица 5
Формат кадра сообщения в режиме RTU
Т1 Т2 Т3 |
Адрес |
Функция |
Данные |
Контрольная сумма |
Т1 Т2 Т3 |
|
|
8 бит |
8 бит |
N * 8 бит |
16 бит |
|
|
Поле адреса следует сразу за началом кадра и состоит их одного 8-ми разрядного символа в режиме RTU или 2-х символов в режиме ASCII. Эти биты указывают пользователю адрес SL устройства, которое должно принять сообщение, посланное MS.
Каждый SL должен иметь уникальный адрес и только адресуемое устройство может ответить на запрос, который содержит его адрес. Когда SL посылает ответ, адрес SL информирует MS, с какой SL на связи. В широковещательном режиме используется адрес 0. Все SL интерпретируют такое сообщение как выполнение определенного действия, но без посылки подтверждения.
Поле кода функции указывает адресуемому SL какое действие выполнить. Коды функций Modbus специально разработаны для связи ПК и индустриальных коммуникационных систем Modbus.
Старший бит этого поля устанавливается в единицу SL в случае, если он хочет просигналить MS, что ответное сообщение не нормальное. (Смотри ). Этот бит остается в нуле, если ответное сообщение повторяет запрос или в случае нормального сообщения.
Таблица 6
Коды функций Modbus
Код |
Название |
Действие |
01 |
READ COIL STATUS |
Получение текущего состояния (ON/OFF) группы логических ячеек. |
02 |
READ INPUT STATUS |
Получение текущего состояния (ON/OFF) группы дискретных входов. |
03 |
READ HOLDING REGISTERS |
Получение текущего значения одного или нескольких регистров хранения. |
04 |
READ INPUT REGISTERS |
Получение текущего значения одного или нескольких входных регистров. |
05 |
FORCE SINGLE COIL |
Изменение логической ячейки в состояние ON или OFF. |
06 |
FORCE SINGLE REGISTER |
Запись нового значения в регистр хранения. |
07 |
READ EXCEPTION STATUS |
Получение состояния (ON/OFF) восьми внутренних логических ячеек, чье назначение зависит от типа контроллера. Пользователь может использовать эти ячейки по своему выбору. |
08 |
LOOPBACK DIAGNOSTIC TEST |
Тестовое сообщение, посылаемое SL для получения данных о связи. |
11 |
FETCH EVENT COUNTER COMMUNICATIONS |
Позволяет MS путем последовательной посылки одного сообщения определить выполнение операции. |
12 |
FETCH COMMUNICATIONS EVENT LOG |
Позволяет MS получить журнал связи, который содержит информацию о каждой Modbus транзакции данного SL. Если транзакция не выполнена, в журнал заносится информация об ошибки. |
13 |
PROGRAM |
Позволяет MS программировать SL. |
14 |
POLL PROGRAM COMPLETE |
Позволяет MS связываться с другими SL если один SL выполняет долговременную операцию программирования. SL периодически опрашивается на момент завершения программирования. Данный запрос посылается только в том случае, если предварительно был послан запрос PROGRAM. |
15 |
FORCE MULTIPLE COILS |
Изменить состояние (ON/OFF) нескольких последовательных логических ячеек. |
16 |
FORCE MULTIPLE REGISTERS |
Установить новые значения нескольких последовательных регистров. |
17 |
REPORT SLAVE I.D. |
Позволяет MS определить тип адресуемого SL и его рабочее состояние. |
19 |
RESET COMMUNICATIONS LINK |
Сбрасывает SL в известное состояние после неустранимой ошибки. Сбрасывает счетчик принятых байт. |
20-64 |
Зарезервировано под расширения Modbus |
|
65-72 |
Зарезервировано под пользовательские функции. |
В дальнейшем не будет использоваться в продуктах Modicon. |
73-119 |
ILLEGAL FUNCTION |
|
120-127 |
Зарезервировано |
Зарезервировано Modicon для внутреннего использования. |
128-255 |
Зарезервировано |
Зарезервировано для исключительных ситуаций. |
Поле данных содержит информацию, необходимую SL для выполнения указанной функции, или содержит данные собранные SL для ответа на запрос.
Это поле позволяет MS и SL проверять сообщение на наличие ошибок. Иногда, вследствие электрических помех или других воздействий, сообщение при пересылке от одного устройства к другому может незначительно измениться. Результат проверки контрольной суммы укажет SL или MS реагировать или не реагировать на такое сообщение. Это увеличивает надежность и эффективность систем MODBUS.
В режиме ASCII в поле контрольной суммы используется LRC, а в режиме RTU – CRC.
Если сообщения запроса и ответа могли бы читаться по-английски, то четыре поля этих сообщений выглядели как на рисунке. (Заметьте, что последовательность посылки полей каждый раз одна и та же – Адрес, Код функции, Данные и Контрольная сумма – независимо от направления.)
Таблица 7
MODBUS MS
|
ERROR CHECK |
DATA |
FUNCTION CODE (03) |
ADDRESS (01) |
MODBUS SL
|
Информация используется приемным устройством для проверки сообщения |
Относительный адрес регистра |
Чтение регистра хранения |
Запрос для SL с номером 1 |
||
ADDRESS (01) |
FUNCTION CODE (03) |
DATA |
ERROR CHECK |
||
Ответ от SL с номером 1 |
Чтение регистра хранения |
Значение, содержащееся в указанном регистре хранения |
Информация, используемая приемным устройством для проверки сообщения |
Коды исключительных ситуаций приведены в таблице. Когда SL обнаруживает одну их этих ошибок, он посылает ответное сообщение MS, содержащее адрес SL, код функции, код ошибки и контрольную сумму. Для указания на то, что ответное сообщение – это уведомление об ошибке, старший бит поля кода функции устанавливается в 1. На рисунке и представлен пример некорректного запроса и соответствующего ответа с кодом исключительной ситуации.
Таблица 8
Код |
Название |
Смысл |
01 |
ILLEGAL FUNCTION |
Функция в принятом сообщении не поддерживается на данном SL. Если тип запроса – POLL PROGRAM COMPLETE, этот код указывает, что предварительный запрос не был командой программирования. |
02 |
ILLEGAL DATA ADDRESS |
Адрес, указанный в поле данных, является недопустимым для данного SL. |
03 |
ILLEGAL DATA VALUE |
Значения в поле данных недопустимы для данного SL. |
04 |
FAILURE IN ASSOCIATED DEVICE |
SL не может ответить на запрос или произошла авария. |
05 |
ACKNOWLEDGE |
SL принял запрос и начал выполнять долговременную операцию программирования. Для определения момента завершения операции используйте запрос типа POLL PROGRAM COMPLETE. Если этот запрос был послан до завершения операции программирования, то SL ответит сообщением REJECTED MESSAGE. |
06 |
BUSY, REJECTED MESSAGE |
Сообщение было принято без ошибок, но SL в данный момент выполняет долговременную операцию программирования. Запрос необходимо ретранслировать позднее. |
07 |
NAK-NEGATIVE ACKNOWLEDGMENT |
Функция программирования не может быть выполнена. Используйте опрос для получения детальной аппаратно-зависимой информации об ошибке. |
Таблица 9
Адрес SL |
Функция |
Старший байт адреса |
Младший байт адреса |
Старший байт числа ячеек |
Младший байт числа ячеек |
Контрольная сумма |
0A |
01 |
04 |
A1 |
00 |
01 |
4F |
Этот запрос требует состояние ячейки с номером 1245 в SL с номером 10, и, если этот контроллер имеет 1К ячеек, то этот адрес является ошибочным. Соответственно, будет сгенерировано следующее ответное сообщение.
Таблица 10
Адрес SL |
Функция |
Код исключительной ситуации |
Контрольная сумма |
0A |
81 |
02 |
73 |
Значение в поле функции равно оригинальному значению с установленным в единицу старшим битом. Код исключительной ситуации 02 указывает на ошибочный адрес данных.
Цель данного раздела - определить общий формат соответствующих команд, доступных программисту системы MODBUS. В разделе описаны формат каждого запросного сообщения, выполняемая функция и формат нормального ответного сообщения.
Сообщения с номерами функций 1-6, 15 и 16 ссылаются на конкретные доступные переменные программируемого контроллера. Функция 1, 5 и 15 ссылаются на логические ячейки (0ХХХ(Х)), функция 2 на дискретные входы (1ХХХ(Х)), функция 4 на входные регистры (3ХХХ(Х)), функции 3,6 и 16 на внутренние регистры (4ХХХ(Х)). Все адреса ссылок в сообщениях MODBUS индексируются с нуля. Например, первый внутренний регистр в контроллере 584, будучи 40001-ым, имеет адрес ссылки 0. Точно также, ячейка 00127 будет иметь адрес 0126.
Примеры в данном разделе демонстрируют протокол независимо от режима RTU или ASCII. Программист может использовать следующий метод для корректировки пакета в зависимости от режима передачи.
Во всем разделе протокол будет представлен по возможности в формате, указанном на Рис.3-1. Числа имеют шестнадцатеричный формат.
Таблица 11
Адрес |
Функция |
Старший байт адреса первого регистра |
Младший байт адреса первого регистра |
Старший байт числа требуемых регистров |
Младший байт числа требуемых регистра |
Поле контроль-ной суммы |
|
|
06 |
03 |
00 |
6B |
00 |
03 |
89 |
LRC |
|
Данный пример описывает чтение регистров 4108-4110 из SL с адресом 06. Это сообщение при форматировании в RTU и ASCII выглядит следующим образом:
Таблица 12
ЗАПРОС |
RTU |
ASCII |
||||
Заголовок |
|
|
|
: |
||
Адрес |
0000 |
0110 |
0 |
6 |
||
Функция |
0000 |
0011 |
0 |
3 |
||
Начальный адрес |
H.O. |
0000 |
0000 |
0 |
0 |
|
L.O. |
0110 |
1011 |
6 |
В |
||
Количество требуемых регистров |
H.O. |
0000 |
0000 |
0 |
0 |
|
L.O. |
0000 |
0011 |
0 |
3 |
||
Поле контрольной суммы |
|
0111 |
0101 |
8 |
9 |
|
|
1010 |
0000 |
|
|
||
Trailer |
|
|
CR |
LF |
||
|
||||||
ОТВЕТ |
RTU |
ASCII |
||||
Заголовок |
|
|
|
: |
||
Адрес |
0000 |
0110 |
0 |
6 |
||
Функция |
0000 |
0011 |
0 |
3 |
||
Количество байт данных |
0000 |
0110 |
0 |
6 |
||
Данные |
H.O |
0000 |
0010 |
0 |
2 |
|
L.O. |
0010 |
1011 |
2 |
B |
||
H.O. |
0000 |
0000 |
0 |
0 |
||
L.O. |
0000 |
0000 |
0 |
0 |
||
H.O. |
0000 |
0000 |
0 |
0 |
||
L.O. |
0110 |
0011 |
6 |
3 |
||
Контрольная сумма |
CRC |
6 |
1 |
|||
Trailer |
|
CR |
LF |
|||
Длина пакета |
11 байт |
23 байта |
||||