Uploaded by Николай Андриянов

MODBUS Application Protocol 1 1 b translation

advertisement
СПЕЦИФИКАЦИЯ ПРИКЛАДНОГО ПРОТОКОЛА MODBUS
V1.1b3
Содержание
1
Введение.......................................................................................................................................................... 2
2
1.1
Область применения данного документа .......................................................................................... 2
Сокращения ..................................................................................................................................................... 2
3
Контекст ........................................................................................................................................................... 3
4
Общее описание ............................................................................................................................................. 3
5
4.1
Описание протокола ........................................................................................................................... 3
4.2
Кодирование данных........................................................................................................................... 5
4.3
Модель данных MODBUS ................................................................................................................... 6
4.4
Модель адресации MODBUS ............................................................................................................. 7
4.5
Определение транзакции MODBUS .................................................................................................. 8
Категории кодов функций ............................................................................................................................. 10
6
5.1
Определение кода общедоступной функции .................................................................................. 11
Описания кодов функций .............................................................................................................................. 11
7
01(0x01) Считывание катушек .......................................................................................................... 11
02 (0x02)Читать Дискретные входы........................................................................................... 12
03 (0x03)Читать Ведение реестров ........................................................................................... 15
04 (0x04)Читать Входные регистры ........................................................................................... 16
05 (0x05)НаписатьОдиночная
катушка
17
6.6
06 (0x06)НаписатьЕдиный
регистр
19
6.7
07 (0x07)Читать Статус исключения (только для серийной строки) ....................................... 20
6.8
08(0x08) Диагностика (последовательный портТолько
строка)
21
6.8.1
Подфункционные коды, поддерживаемые устройствами последовательной линии .. 22
6.8.2
Пример и диаграмма состояний ...................................................................................... 24
6.9
11 (0x0B)Получить CСчетчик событий omm (последовательная линия ............................ только)
25
6.10 12 (0x0C)Получить журнал событий связи (только для последовательной линии) ................. 26
6.11 15 (0x0F)
Запись нескольких катушек ............................................................................. 29
6.12 16 (0x10)
Запись нескольких регистров ........................................................................... 30
6.13 17 (0x11)Идентификатор сервера отчетов (только для последовательной линии) ................. 31
6.14 20 (0x14)
Чтение записи файла ................................................................................. 32
6.15 21 (0x15)
Запись файла ........................................................................................ 34
6.16 22 (0x16)
Регистр записи маски ................................................................................. 36
6.17 23 (0x17)
Чтение/запись нескольких регистров ..................................................................... 38
6.18 24 (0x18)
Чтение очереди FIFO.................................................................................. 40
6.19 43 (0x2B) Транспорт инкапсулированного интерфейса .............................................................. 41
6.20 43 / 13(0x2B/0x0D) Общий справочный запрос и ответ CANopen
PDU ................................................................................................................................................... 42
6.21 43 / 14(0x2B/0x0E) Чтение идентификации устройства ................................................................. 43
Ответы на исключения MODBUS ................................................................................................................. 47
6.1
6.2
6.3
6.4
6.5
Приложение A (Информационное): MODBUS RESERVED FUNCTION CODES, SUBCODES AND MEI TYPES
.............................................................................................................................................................. 50
Приложение B (Информационное): ОБЩЕЕ СПРАВОЧНОЕ КОМАНДОВАНИЕ CANOPEN .......................... 50
Введение
1
1.1
Область применения данного документа
MODBUS - протокол обмена сообщениями прикладного уровня, позиционируемый на уровне 7 модели OSI,
который обеспечивает клиент-серверную связь между устройствами, подключенными по разным типам шин
или сетей.
Являясь серийным стандартом де-факто в отрасли с 1979 года, MODBUS продолжает обеспечивать связь
для миллионов устройств автоматизации. Сегодня поддержка простой и элегантной структуры MODBUS
продолжает расти. Интернет-сообщество может получить доступ к MODBUS через зарезервированный
системный порт 502 в стеке TCP/ IP.
MODBUS является протоколом запросов/ответов и предлагает услуги, определяемые кодами функций.
Коды функций MODBUS являются элементами блоков PDU запроса/ответа MODBUS. Целью этого
документа является описание кодов функций, используемых в рамках транзакций MODBUS.
MODBUS - это протокол обмена сообщениями прикладного уровня для связи клиент-сервер между
устройствами, подключенными к шинам или сетям различных типов.
В настоящее время он реализован с использованием:
•
TCP/ IP через Ethernet. См. руководство по внедрению MODBUS Messaging V1.0a.
•
•
Асинхронная последовательная передача по различным носителям (по проводам: EIA/TIA-232-E,
EIA-422, EIA/TIA-485-A; оптоволокно, радио и т.д.)
MODBUS PLUS, высокоскоростная сеть передачи маркеров.
Рисунок. 1: Коммуникационный стек
Ссылки
1. RFC 791, Интернет-протокол, Sep81 DARPA
2Сокращения
ADU блок
прикладных данных
HDLC высокоуровневое управление каналом передачи
данных
HMI
человеко-машинного интерфейса
IETF инженерная группа по
Интернету
Ввод-вывод
IP
протокол Интернета
Управление
доступом к MAC носителям
MB протокол
MODBUS
MODBUS
MBAP прикладной
протокол MODBUS
Блок данных
протокола PDU
PLC
программируемый логический
контроллер
Протокол управления
передачей TCP
3
Контекст
Протокол MODBUS обеспечивает простую связь в рамках всех типов сетевых архитектур.
Рисунок. 2:
Пример сетевой архитектуры MODBUS
Каждый тип устройств (PLC, HMI, панель управления, драйвер, управление движением, устройство
ввода-вывода...) может использовать протокол MODBUS для инициирования удаленной операции.
Та же связь может осуществляться по последовательной линии, что и в сетях Ethernet TCP/ IP. Шлюзы
обеспечивают связь между несколькими типами шин или сетей по протоколу MODBUS.
4
4.1
Общее описание
Описание протокола
Протокол MODBUS определяет блок данных простого протокола (PDU) независимо от нижележащих
уровней связи. Отображение протокола MODBUS на конкретных шинах или сети может вводить некоторые
дополнительные поля в блок прикладных данных (ADU).
Рисунок. 3:
Общая полка MODBUS
Блок прикладных данных MODBUS создается клиентом, который инициирует транзакцию MODBUS. Функция
указывает серверу, какое действие необходимо выполнить. Прикладной протокол MODBUS устанавливает
формат запроса, инициированного клиентом.
Поле кода функции блока данных MODBUS кодируется одним байтом. Допустимые коды находятся в
диапазоне от 1... 255 десятичных (диапазон 128 - 255 зарезервирован и используется для ответов
исключений). При передаче сообщения от клиента на устройство сервера поле кода функции сообщает
серверу, какое действие необходимо выполнить. Недопустимый код функции «0».
Коды подфункций добавляются к некоторым кодам функций для определения нескольких действий.
Поле данных сообщений, передаваемых от клиента на серверные устройства, содержит дополнительную
информацию, которую сервер использует для выполнения действия, определенного кодом функции. Сюда
могут входить такие элементы, как дискретные и регистровые адреса, количество элементов, подлежащих
обработке, и количество действительных байтов данных в поле.
Поле данных может отсутствовать (нулевой длины) в определенных видах запросов, в этом случае сервер
не требует никакой дополнительной информации. Действие указывается только в коде функции.
Если не происходит ошибки, связанной с функцией MODBUS, запрошенной в правильно принятой MODBUS
ADU поле данных ответа сервера клиенту содержит запрошенные данные. Если происходит ошибка,
связанная с запрашиваемой функцией MODBUS, поле содержит код исключения, который серверное
приложение может использовать для определения следующего действия, которое должно быть выполнено.
Например, клиент может считывать состояния
ВКЛ/ВЫКЛ группы дискретных выходов или
входов или
он может считывать/записывать содержимое данных группы регистров.
Когда сервер отвечает
клиенту, он использует поле кода функции, чтобы указать
либо
нормальный (безошибочный) ответ
или
то, что произошла какая-то ошибка
(называемая исключением
ответ). Для нормального ответа сервер просто повторяет на запрос исходный код функции.
Рисунок. 4. Транзакция
MODBUS (без ошибок)
Для ответа на исключение сервер возвращает код, который эквивалентен исходному коду функции из
запроса PDU с его старшим битом, установленным в logic 1.
................................ .. ................................................................................... ...........................................
Примечание: Желательно уложиться в тайм-аут, чтобы не бесконечно ждать ответа, который, возможно, никогда не придет.
Размер PDU MODBUS ограничен ограничением размера, унаследованным от первой реализации MODBUS в
сети последовательной линии (макс. RS485 ADU = 256 байт).
Рисунок. 5: Транзакция
MODBUS (ответ на исключение)
Поэтому:
PDU MODBUS для связи по последовательной линии = 256 - адрес сервера (1 байт) - CRC (2 байта) = 253
байта.
Следовательно:
RS232/ RS485 ADU = 253 байта + Адрес сервера (1 байт) + CRC (2 байта) = 256 байт.
TCP ADU MODBUS
= 253 байта + MBAP (7 байтов) = 260 байтов.
Протокол MODBUS определяет три блока PDU. Это:
•
•
•
PDU запроса MODBUS, mb_req_pdu
MODBUS Response PDU, mb_rsp_pdu
PDU отклика на
исключение MODBUS, mb_excep_rsp_pdu
Этот mb_req_pdu определяется следующим образом:
mb_req_pdu = {function_code, request_data},
где
function_code = [1 байт] Код функции MODBUS, request_data = [n байт] Это поле зависит от
кода функции и обычно содержит такую информацию, как ссылки на переменные,
количество переменных, смещения данных, коды подфункций и т.д.
Этот mb_rsp_pdu определяется следующим образом:
mb_rsp_pdu = {function_code, response_data},
где
function_code = [1 байт] код функции MODBUS
response_data = [n байт] Это поле зависит от кода функции и обычно содержит такую
информацию, как ссылки на переменные,
количество переменных, смещения данных, коды подфункций и т.д.
Этот mb_excep_rsp_pdu определяется следующим образом:
mb_excep_rsp_pdu = {exception-function_code, request_data},
где
exception-function_code = [1 байт] Код функции MODBUS + 0x80 exception_code = [1 байт]
Код исключения MODBUS Определен в таблице
«Коды исключений MODBUS» (см. раздел7).
3.1
Кодирование данных
• MODBUS использует представление «big-Endian» для адресов и элементов данных. Это означает, что при
передаче числовой величины, превышающей один байт, сначала отправляется старший байт. Так,
например
16 - биты
Значение размера регистра
0x1234
первый отправленный байт 0x12, затем 0x34
Примечание: Для получения более подробной информации см. [1].
Модель данных MODBUS
3.2
MODBUS основывает свою модель данных на серии таблиц, которые имеют отличительные характеристики.
Четыре основные таблицы:
Первичные таблицы
Тип объекта
Тип
Дискретный ввод
Одноразрядный
Только для чтения
Катушки
Одноразрядный
Читайте - Пишут
Входные регистры
16-битное слово
Только для чтения
Ведение реестров
16-битное слово
Читайте - Пишут
Комментарии
Этот тип данных может предоставляться системой ввода-вывода.
Этот тип данных может быть изменен прикладной программой.
Этот тип данных может предоставляться системой ввода-вывода
Этот тип данных может быть изменен прикладной программой.
Различия между входными и выходными данными, а также между элементами данных, адресуемыми битами и
словами, не подразумевают какого-либо поведения приложения. Вполне допустимо и очень часто
рассматривать все четыре таблицы как наложенные друг на друга, если это наиболее естественная
интерпретация на рассматриваемой целевой машине.
Для каждой из первичных таблиц протокол допускает индивидуальный выбор 65536 элементов данных, и
операции считывания или записи этих элементов предназначены для того, чтобы охватывать множество
последовательных элементов данных вплоть до предела размера данных, который зависит от кода функции
транзакции.
Очевидно, что все данные, обрабатываемые через MODBUS (биты, регистры), должны находиться в памяти
приложения устройства. Но физический адрес в памяти не следует путать со ссылкой на данные.
Единственное требование - связать ссылку на данные с физическим адресом.
Номера логических ссылок MODBUS, используемые в функциях MODBUS, являются целыми индексами без
знака, начинающимися с нуля.
• Примеры реализации модели MODBUS
В приведенных ниже примерах показаны два способа организации данных в устройстве. Возможны различные
организации, но не все они описаны в этом документе. Каждое устройство может иметь свою собственную
организацию данных в соответствии со своим применением
Пример 1: Устройство, имеющее 4 отдельных блока
В приведенном ниже примере показана организация данных в устройстве, имеющем цифровые и аналоговые
входы и выходы. Каждый блок является отдельным, поскольку данные из разных блоков не имеют корреляции.
Каждый блок, таким образом, доступен с различными функциями MODBUS.
Рис. 6 Модель данных
MODBUS с отдельным блоком
Пример 2: Устройство, имеющее только 1 блок
В этом примере устройство имеет только 1 блок данных. Одни и те же данные могут быть получены с помощью
нескольких функций MODBUS либо через 16-битовый доступ, либо через бит доступа.
Рис. 7 Модель данных MODBUS с одним блоком 1
3.3
Модель адресации MODBUS
Прикладной протокол MODBUS точно определяет PDU правила адресации.
В PDU MODBUS каждая информация адресуется от 0 до 65535.
Он также четко определяет модель данных MODBUS, состоящую из 4 блоков, которые содержат несколько
элементов, пронумерованных от 1 до n.
В модели данных MODBUS каждый элемент в блоке данных пронумерован от 1 до n.
После этого модель данных MODBUS должна быть привязана к приложению устройства (объекту IEC-61131
или другой модели приложения).
Предварительное отображение между моделью данных MODBUS и приложением устройства
полностью зависит от производителя устройства.
Рис. 8. Модель адресации
MODBUS
На предыдущем рисунке показано, что данные MODBUS с номером X адресуются в PDU MODBUS X-1.
3.4
Определение транзакции MODBUS
Следующая диаграмма состояний описывает общую обработку транзакции MODBUS на стороне сервера.
Рис. 9 Схема состояний транзакций
MODBUS
После обработки запроса сервером формируется ответ MODBUS с использованием соответствующей транзакции
сервера MODBUS.
В зависимости от результата обработки строятся два типа ответа:
■ Положительный ответ MODBUS:
■
■
код функции ответа = код функции запроса
Ответ на исключение MODBUS (см. раздел7):
■
цель состоит в том, чтобы предоставить клиенту соответствующую информацию, касающуюся
ошибки, обнаруженной во время обработки;
код функции исключения = код функции запроса + 0x80;
■
код исключения предоставляется для указания причины ошибки.
■
5
Категории кодов функций
Существует три категории кодов функций MODBUS. Это:
Коды функций общего пользования
•
Являются хорошо определенными кодами функций,
•
гарантированно быть уникальным,
•
подтверждено сообществом MODBUS.org,
•
публично задокументировано
•
есть доступный тест соответствия,
•
включает как определенные общедоступные назначенные функциональные коды, так и неназначенные
функциональные коды, зарезервированные для будущего использования.
Коды пользовательских функций
•
существует два диапазона кодов определяемых пользователем функций: От 65 до 72 и от 100 до 110
десятичных.
•
пользователь может выбрать и реализовать код функции, который не поддерживается спецификацией.
•
нет гарантии, что использование выбранного кода функции будет уникальным
•
если пользователь хочет повторно позиционировать функциональность как общедоступный код функции,
он должен
инициирует RFC для внесения изменений в категорию public и присвоения нового кода функции public.
•
MODBUS Organization, Inc явно оставляет за собой право на разработку предлагаемого RFC.
Зарезервированные коды функций
Коды функций, которые в настоящее время используются некоторыми компаниями для
старых продуктов и которые
недоступны для публичного использования.
•
Информационное примечание: Читателя просят обратиться к Приложению A
(Информационное) MODBUS
ЗАРЕЗЕРВИРОВАННЫЕ КОДЫ ФУНКЦИЙ, СУБКОДЫ И ТИПЫ MEI.
Рис. 10 Категории кодов функций
MODBUS
•
5.1 Определение кода общедоступной функции
Физические дискретные Считывание дискретных входных
входы
данных
Считывание катушек
Битовый Внутренние биты или
доступ
Физические катушки Записать одну катушку
Запись нескольких катушек
Коды функций
кодекс
Субкод (шест
надца
терич
02
02
ный)
Физические входные Чтение входного регистра
регистры
Чтение регистров хранения
Доступ к
данным
16-битный
Внутренние регистры Записать один регистр
доступ
или физические
Запись нескольких регистров
выходные регистры Чтение/запись нескольких
регистров
Регистр
записи маски
Чтение очереди FIFO
Чтение записи файла
Доступ к записям файлов
Запись файла
Состояние исключения чтения
Диагностический
Диагностика
Получить счетчик событий Com
Получить журнал событий COM
Идентификатор сервера отчетов
Прочитать идентификацию
устройства
Другое
Транспорт инкапсулированного
интерфейса
Общая ссылка CANopen
6
Раздел
6.2
01
05
15
01
05
0F
6.1
6.5
6.11
04
04
6.4
03
03
6.3
06
06
6.6
16
23
22
24
20
21
07
08
11
12
17
43
43
14
13,14
10
17
16
18
14
15
07
08
ОБЬ
0C
11
2B
2B
6.12
6.17
6.16
6.18
6.14
6.15
6.7
6.8
6.9
6.10
6.13
6.21
6.19
13
2B
6.20
43
00-18,20
Описания кодов функций
6.1
01 (0x01) Катушки считывания
Этот код функции используется для считывания от 1 до 2000 смежных состояний катушек в удаленном устройстве.
В PDU запроса указывается начальный адрес, т.е. адрес первой указанной катушки и количество катушек. В PDU
катушки адресуются, начиная с нуля. Поэтому катушки с номерами 1-16 адресуются как 0-15.
Катушки в ответном сообщении упакованы как одна катушка на бит поля данных. Состояние указывается как 1 =
ON и 0 = OFF. LSB первого байта данных содержит выходные данные, адресуемые в запросе. Другие катушки
следуют к концу высокого порядка этого байта и от низкого порядка к высокому в последующих байтах.
Если возвращаемое выходное количество не кратно восьми, оставшиеся биты в конечном байте данных будут
дополнены нулями (по направлению к верхнему концу байта). Поле Byte Count указывает количество полных
байтов данных.
Запрос
Ответ
Код функции
Начальный адрес
Количество катушек
1 байт
2 байта
2 байта
0x01
0x0000 для 0xFFFF
1-2000 (0x7D0)
Код функции
Количество байтов
Состояние катушки
1 байт
1 байт
n Байт
0x01
N*
n = N или N + 1
* N = количество выводов/8, если остаток отличается от 0 ^ N = N + 1
Ошибка
Код функции
Код исключения
1 байт
1 байт
Код функции + 0x80
01 или 02 или 03 или 04
Вот пример запроса на считывание дискретных выходных данных 20-38:
Запрос
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
Количество выходов Hi
Количество выходов Lo
(шестнадца
теричный)
01
00
13
00
13
Ответ
Имя поля
Функция
Число байтов
Состояние выходов 27-20
Состояние выходных данных 35-28
Состояние выходных данных 38-36
(шестнадца
теричный)
01
03
CD
6B
05
Состояние выходов 27 -20 отображается как значение байта CD шестнадцатеричное или двоичное 1100 1101.
Выход 27 является MSB этого байта, а выход 20 является LSB.
По соглашению биты в байте отображаются слева от MSB, а справа от LSB. Таким образом, выходными данными
в первом байте являются «27-20», слева направо. Следующий байт имеет выходы «от 35 до 28», слева направо.
Поскольку биты передаются последовательно, они перетекают из LSB в MSB: 20... 27, 28 . . . 35 и так далее.
В последнем байте данных состояние выходов 38-36 показано как значение байта 05 шестнадцатеричное, или
двоичное 0000 0101. Выход 38 находится в позиции шестого бита слева, а выход 36 является LSB этого байта.
Пять оставшихся старших битов заполнены нулями.
c § =... ............... ....................................................................................................
Примечание.Пять оставшихся битов (в направлении конца высокого порядка) заполнены нулями.
Рисунок. 11: Диаграмма состояний
5.1
считывающих катушек
02 (0x02) Считывание дискретных входов
Этот код функции используется для считывания от 1 до 2000 последовательных состояний дискретных входов в
удаленном устройстве. В PDU Request указывается начальный адрес, т.е. адрес первого указанного входа, и
количество входов. В PDU дискретные входы адресуются, начиная с нуля. Поэтому дискретные входы с номерами
1-16 адресуются как 0-15.
Дискретные входные сигналы в ответном сообщении упаковываются как один входной сигнал на бит поля данных.
Состояние указывается как 1 = ON; 0 = ВЫКЛ. LSB первого байта данных содержит входные данные, адресуемые
в запросе. Другие входные данные следуют к концу высокого порядка этого байта и от низкого порядка к высокому
в последующих байтах.
Если возвращаемое входное количество не кратно восьми, оставшиеся биты в конечном байте данных будут
дополнены нулями (по направлению к верхнему концу байта). Поле Byte Count указывает количество полных
байтов данных.
Запрос
Код функции
1 байт
0x02
Начальный адрес
2 байта
0x0000 для 0xFFFF
Количество вводимых
ресурсов
2 байта
1-2000 (0x7D0)
Ответ
Код функции
1 байт
0x02
Количество байтов
1 байт
N*
Состояние ввода
N * x 1 байт
* N = количество вводов/8, если остаток отличается от 0 ^ N = N + 1
Ошибка
0x82
Код ошибки
1 байт
Код исключения
1 байт
01 или 02 или 03 или 04
Здесь приведен пример запроса на считывание дискретных входных данных 197-218:
Запрос
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
Количество вводов Hi
Количество вводов Lo
(шестнадца
теричный)
02
00
С4
00
16
Ответ
Имя поля
Функция
Число байтов
Входы Статус 204-197
Состояние входов 212-205
Состояние входов 218-213
(шестнадца
теричный)
02
03
ПЕРЕМ
ЕННЫЙ
БД
ТОК35
Состояние дискретных входов 204-197 показано как значение байта AC hex, или двоичный 1010 1100. Вход 204
является MSB этого байта, а вход 197 является LSB.
Состояние дискретных входов 218-213 показано как значение байта 35 шестнадцатеричное или двоичное 0011
0101. Вход 218 находится в положении третьего бита слева, а вход 213 является LSB.
.. . . ..................................................................... „ ...............................
Примечание.Два оставшихся бита (на стороне высшего порядка) заполнены нулями.
Рисунок. 12: Считывание диаграммы состояний
дискретных входов
5.2
03 (0x03) Чтение удерживающих регистров
Этот код функции используется для считывания содержимого непрерывного блока удерживающих регистров
на удаленном устройстве. В PDU Request указывается адрес начального регистра и количество регистров. В
PDU регистры адресуются, начиная с нуля. Поэтому регистры с номерами 1-16 адресуются как 0-15.
Данные регистра в ответном сообщении упаковываются как два байта на регистр, причем право двоичного
содержимого выравнивается в пределах каждого байта. Для каждого регистра первый байт содержит биты
Запрос
Код функции
Начальный адрес
Количество регистров
1 байт
2 байта
2 байта
0x03
0x0000 для 0xFFFF
От 1 до 125 (0x7D)
Код функции
Количество байтов
Значение регистра
1 байт
1 байт
N * x 2 байта
0x03
2xN*
Ответ
Ошиб
ка
высокого
порядка, а второй - биты низкого порядка.
Код ошибки
Код исключения
1 байт
1 байт
0x83
01 или 02 или 03 или 04
Ниже приведен пример запроса на чтение регистров 108-110:
Запрос
Имя поля
(шестнадца
теричный)
03
00
Функция
Начальный адрес Hi
6B
Начальный адрес Lo
* N = количество
регистров00
Нет. Регистров
Hi
03
Нет. Регистров Ло
Ответ
Имя поля
Функция
Число байтов
Регистровое значение Hi (108)
Значение регистра Lo (108)
Значение регистра Hi (109)
Значение регистра Lo (109)
Значение регистра Hi (110)
Значение регистра Lo (110)
(шестнадца
теричный)
03
06
02
2B
00
00
00
64
Содержимое регистра 108 показано как два байтовых значения из 02 2B шестнадцатеричных, или 555
десятичных. Содержимое регистров 109-110 - 00
00 и 00
64 hex, или 0 и 100 decimal,
соответственно.
Рисунок. 13: Диаграмма состояний регистров удержания
чтения
6.4
04 (0x04) Чтение входных регистров
Этот код функции используется для считывания от 1 до 125 смежных входных регистров в удаленном
устройстве. В PDU Request указывается адрес начального регистра и количество регистров. В PDU регистры
адресуются, начиная с нуля. Поэтому входные регистры с номерами 1-16 адресуются как 0-15.
Данные регистра в ответном сообщении упаковываются как два байта на регистр, причем право двоичного
содержимого выравнивается в пределах каждого байта. Для каждого регистра первый байт содержит биты
высокого порядка, а второй - биты низкого порядка.
Ответ
Код функции
Количество байтов
Входные регистры
1 байт
1 байт
N * x 2 байта
0x04
2xN*
Затребовать __________________________________________________________
Код функции
Начальный адрес
Количество входных регистров
Ошибка
Код ошибки
* N = количество
входных регистров
Код исключения
1 байт
2 байта
2 байта
0x04
0x0000 для 0xFFFF
С 0x0001 по 0x007D
1 байт
1 байт
0x84
01 или 02 или 03 или 04
Ниже приведен пример запроса на чтение входного регистра 9:
Запрос
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
Количество входных рег. Hi
(шестнадца
теричный)
04
00
08
00
Ответ
Имя поля
Функция
Число байтов
Вход рег. 9 Hi
Входной рег. 9 Lo
(шестнадца
теричный)
04
02
00
0A
1
Количество входного рег. ло.
01 II
1
Содержимое входного регистра 9 показано в виде двухбайтовых значений 00 0A шестнадцатеричных или
десятичных 10.
Рисунок. 14. Диаграмма состояний входных регистров
чтения
6.5
05 (0x05) Записать одну катушку
Этот код функции используется для записи одного выхода либо в ON, либо в OFF на удаленном устройстве.
Запрошенное состояние ON/OFF определяется константой в поле данных запроса. Значение FF 00
шестнадцатеричный требует, чтобы выход был ON. Значение 00 00 требует, чтобы он был OFF. Все
остальные значения недопустимы и не влияют на выходные данные.
В PDU Request указывается адрес катушки, подлежащей принудительной передаче. Обращение к катушкам
начинается с нуля. Поэтому катушка с номером 1 адресуется как 0. Запрашиваемое состояние ON/OFF
определяется константой в поле Coil Value. Значение 0XFF00 запрашивает включение катушки. Значение
0X0000 запрашивает выключение катушки. Все остальные значения недопустимы и не влияют на катушку.
Нормальный ответ - это эхо запроса, возвращаемое после записи состояния катушки.
Требуемая e_st _________________ _____________________________________
Код функции
Адрес вывода
Выходное значение
1 байт
2 байта
2 байта
0x05
0x0000 для 0xFFFF
0x0000 или 0xFF00
Код функции
Адрес вывода
1 байт
2 байта
0x05
0x0000 для 0xFFFF
Ответ
Ошиб
ка
Выходное значение
2 байта
0x0000 или 0xFF00
Код ошибки
Код исключения
1 байт
1 байт
0x85
01 или 02 или 03 или 04
Вот пример запроса на запись Coil 173 ON:
Запрос
Имя поля
Функция
Выходной адрес Hi
Выходной адрес Lo
Выходное значение Hi
Выходное значение Lo
(шестнадца
теричный)
05
00
ПЕРЕМЕНН
ЫЙFF
ТОК
00
Ответ
Имя поля
Функция
Выходной адрес Hi
Выходной адрес Lo
Выходное значение Hi
Выходное значение Lo
(шестнадца
теричный)
05
00
ПЕРЕМ
ЕННЫЙ
FF
ТОК00
6,6
Рисунок. 15.
Запись схемы состояний одиночного
06 (0x06) Запись выхода
одного регистра
Этот код функции используется для записи одного регистра хранения в удаленном устройстве.
В PDU Request указывается адрес записываемого регистра. Адреса регистров начинаются с нуля. Поэтому
регистр с номером 1 адресуется как 0.
Запрос
Код функции
Адрес регистра
Значение регистра
1 байт
2 байта
2 байта
0x06
0x0000 для 0xFFFF
0x0000 для 0xFFFF
Код функции
Адрес регистра
Значение регистра
1 байт
2 байта
2 байта
0x06
0x0000 для 0xFFFF
0x0000 для 0xFFFF
Ответ
Обычный ответ - это эхо запроса, возвращаемое после записи содержимого регистра.
Ошибка
Код ошибки
Код исключения
1 байт
1 байт
0x86
01 или 02 или 03 или 04
Вот пример запроса на запись регистра 2 в 00 03 hex:
Запрос
Имя поля
Функция
Регистрация Адрес Привет
Зарегистрировать адрес Lo
Значение регистра Hi
Значение регистра Lo
(шестнадца
теричный)
06
00
01
00
03
Ответ
Имя поля
Функция
Регистрация Адрес Привет
Зарегистрировать адрес Lo
Значение регистра Hi
Значение регистра Lo
(шестнадца
теричный)
06
00
01
00
03
Рисунок. 16.
Запись диаграммы состояний
одиночного регистра
6.7
07 (0x07) Статус исключения чтения (только для последовательной линии)
Этот код функции используется для считывания содержимого восьми выходов Exception Status на
удаленном устройстве.
Функция предоставляет простой метод доступа к этой информации, потому что ссылки Exception Output
известны (ссылка на вывод в функции не требуется).
Обычный ответ содержит состояние восьми выходов Exception Status. Выходные данные упаковываются в
один байт данных с одним битом на выход. Состояние самой низкой выходной ссылки содержится в
младшем значащем бите байта.
Содержимое восьми выходов Exception Status зависит от конкретного устройства.
Запрос
Код функции
1 байт
0x07
Код функции
Выходные данные
1 байт
1 байт
0x07
От 0x00 до 0xFF
Код ошибки
Код исключения
1 байт
1 байт
0x87
01 или 04
Ответ
Ошиб
ка
Вот пример запроса на чтение статуса исключения:
Запрос
Имя поля
Функция
(шестнадца
теричный)
07
Ответ
Имя поля
Функция
Выходные данные
(шестнадца
теричный)
07 6D
В этом примере выходными данными являются шестнадцатеричные 6D (двоичные 0110 1101). Слева
направо выходы находятся в состоянии OFF-ON-ON-OFF-ON-ON-OFF-ON. Состояние отображается от
самого высокого до самого низкого адресного выхода.
Рисунок. 17: Диаграмма состояний состояния исключения
чтения
6.8
08 (0x08) Диагностика (только для последовательной линии)
Код функции MODBUS 08 предоставляет серию тестов для проверки системы связи между клиентским
устройством и сервером или для проверки различных внутренних условий ошибок на сервере.
Функция использует двухбайтовое поле кода подфункции в запросе для определения типа выполняемого
теста. Сервер повторяет как код функции, так и код подфункции в нормальном ответе. Некоторые
диагностические данные вызывают возврат данных от удаленного устройства в поле данных нормального
ответа.
Как правило, выдача функции диагностики удаленному устройству не влияет на выполнение
пользовательской программы на удаленном устройстве. Пользовательская логика, такая как дискретные и
регистры, не доступна для диагностики. Некоторые функции могут дополнительно сбрасывать счетчики
ошибок на удаленном устройстве.
Однако серверное устройство может быть принудительно переведено в режим «Listen Only Mode», в котором
оно будет контролировать сообщения в системе связи, но не отвечать на них. Это может повлиять на
результат работы прикладной программы, если это зависит от дальнейшего обмена данными с удаленным
устройством. Как правило, режим принудительно удаляет неисправное удаленное устройство из системы
связи.
Следующие диагностические функции предназначены для устройств последовательной линии.
Обычным ответом на запрос Return Query Data является закольцовывание тех же данных. Также
Запрос
Код функции
Подфункция
Данные
1 байт
2 байта
N x 2 байта
0x08
воспроизводятся код функции и коды подфункций.
Ответ
Код функции
Подфункция
1 байт
2 байта
0x08
Данные
N x 2 байта
Ошибка
Код ошибки
Код исключения
6.8.1
1 байт
1 байт
0x88
01 или 03 или 04
Подфункционные коды, поддерживаемые устройствами последовательной линии
Здесь приведен список кодов подфункций, поддерживаемых устройствами последовательной линии.
Каждый код подфункции затем перечисляется с примером содержимого поля данных, которое будет
применяться для этой диагностики.
Код подфункции
Ведьма
Декабрь
Имя
00
01
02
03
04
00
01
02
03
04
05.. 09
Вернуть данные запроса
Параметр перезапуска связи
Вернуть диагностический регистр
Изменить разделитель ввода ASCII
Принудительный режим только прослушивания
Зарезервировано
0A
0B
0C
10
11
12
Очистить счетчики и диагностический регистр
Число сообщений шины возврата
Счетчик ошибок связи шины возврата
0D
0E
0F
10
13
14
15
16
Число ошибок исключения шины возврата
Число возвращаемых сообщений сервера
Счетчик отсутствия ответа сервера возврата
Счетчик NAK сервера возврата
11
12
13
17
18
19
Счетчик занятости сервера возврата
Число символов переполнения шины возврата
Зарезервировано
14
Н.А.
20
21 ... 65535
Очистить счетчик переполнения и флаг
Зарезервировано
00 Возврат данных запроса
Данные, переданные в поле данных запроса, должны быть возвращены (закольцованы) в ответе. Все
ответное сообщение должно быть идентично запросу.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 00
Любые данные
эхо-запроса
01 Возможность перезапуска связи
Последовательный порт удаленного устройства должен быть инициализирован и перезапущен, а все его
счетчики событий связи сброшены. Если порт в настоящее время находится в режиме Listen Only, ответ не
возвращается. Эта функция является единственной, которая выводит порт из режима Listen Only. Если порт
в данный момент не находится в режиме Listen Only, возвращается обычный ответ. Это происходит до
выполнения перезапуска.
Когда удаленное устройство получает запрос, оно предпринимает попытку перезапуска и выполняет
проверку надежности включения питания. Успешное завершение тестов позволит перевести порт в
оперативный режим.
Содержимое поля данных запроса FF 00 шестнадцатеричный также приводит к очистке журнала событий
связи порта. Содержимое 00 00 оставляет журнал таким, каким он был до перезапуска.
Подфункция Поле
данных
(запрос)
Поле данных (ответ)
00 01
00 00
Данные эхо-запроса
00 01
FF 00
Данные эхо-запроса
02 Возврат диагностического регистра
Содержимое 16-разрядного диагностического регистра удаленного устройства возвращается в ответе.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 02
00 00
Диагностический регистр Содержание
03 Изменение разделителя входных данных ASCII
Символ «CHAR», переданный в поле данных запроса, становится концом разделителя сообщений для
будущих сообщений (заменяя символ LF по умолчанию). Эта функция полезна в корпусах перевод строки не
требуется в конце сообщений ASCII.
Поле данных (запрос) Поле данных (ответ)
Подфункция
CHAR 00
Данные эхо-запроса
00 03
04 Принудительный режим только для прослушивания
Переводит адресуемое удаленное устройство в режим Listen Only для связи MODBUS. Это изолирует его от
других устройств в сети, позволяя им продолжать обмен данными без прерывания связи с адресуемым
удаленным устройством. Ответ не возвращается.
Когда удаленное устройство переходит в режим Listen Only, все активные элементы управления связью
выключаются. Контрольный таймер Ready может истечь, блокируя элементы управления. Пока устройство
находится в этом режиме, любые сообщения MODBUS, адресованные ему или широковещательные,
контролируются, но никакие действия не будут предприняты, и ответы не будут отправлены.
Единственной функцией, которая будет обработана после входа в режим, будет функция Restart
Communications Option (код функции 8, подфункция 1).
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 04
00 00
Ответ не возвращен
10 (0A шестнадцатеричный) Очистить счетчики и диагностический регистр
Цель - очистить все счетчики и диагностический регистр. Счетчики также очищаются при включении питания.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 0A
00 00 Данные
эхо-запроса
11 (0B шестнадцатеричный формат) Число сообщений шины возврата
Поле данных ответа возвращает количество сообщений, обнаруженных удаленным устройством в системе
связи с момента последнего перезапуска, операции сброса счетчиков или включения питания.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 0B
00 00
Общее число сообщений
12 (0C шестнадцатеричный) Счетчик ошибок связи шины возврата
Поле данных ответа возвращает количество ошибок CRC, обнаруженных удаленным устройством с момента
последнего перезапуска, операции очистки счетчиков или включения питания.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 0C
00 00
CRC Число ошибок
13 (0D шестнадцатеричный) Число ошибок исключения шины возврата
Поле данных ответа возвращает количество ответов об исключениях MODBUS, возвращенных удаленным
устройством с момента последнего перезапуска, операции сброса счетчиков или включения питания.
Ответы на исключения описаны и перечислены в разделе7.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 0D
00 00 Число ошибок
исключения
14 (0E шестнадцатеричное значение) Число возвращаемых сообщений сервера
Поле данных ответа возвращает количество сообщений, адресованных удаленному устройству, или
широковещательных сообщений, которые удаленное устройство обработало с момента последнего
перезапуска, операции сброса счетчиков или включения питания.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 0E
00 00 Количество сообщений
сервера
15 (0F шестнадцатеричный) Вернуть счетчик отсутствия ответа сервера
Поле данных ответа возвращает количество сообщений, адресованных удаленному устройству, для которых
оно не вернуло ответа (ни обычного ответа, ни ответа на исключение), с момента последнего перезапуска,
операции сброса счетчиков или включения питания.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 0F
00 00 Счетчик отсутствия ответа сервера
16 (10 шестнадцатеричных знаков) Возврат счетчика NAK сервера
Поле данных ответа возвращает количество сообщений, адресованных удаленному устройству, для которых
оно возвратило ответ на исключение отрицательного подтверждения (NAK) с момента последнего
перезапуска, операции сброса счетчиков или включения питания. Ответы на исключения описаны и
перечислены в разделе7.
Подфункция Поле
00 10
данных (запрос) Поле данных (ответ)
00 00 Счетчик NAK
сервера
17 (11 шестнадцатеричных) Счетчик занятости сервера возврата
Поле данных ответа возвращает количество сообщений, адресованных удаленному устройству, для
которого оно вернуло ответ на исключение «Занято серверного устройства», с момента последнего
перезапуска, операции сброса счетчиков или включения питания.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 11
00 00 Число занятых
серверных устройств
18 (12 шестнадцатеричных знаков) Количество символов переполнения шины возврата
Поле данных ответа возвращает количество сообщений, адресованных удаленному устройству, которые оно
не смогло обработать из-за переполнения символов с момента последнего перезапуска, операции сброса
счетчиков или включения питания. Переполнение символов вызвано тем, что символы данных прибывают в
порт быстрее, чем они могут быть сохранены, или потерей символа из-за аппаратного сбоя.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 12
00 00 Счетчик переполнения
символов сервера
20 (14 шестнадцатеричных цифр) Сброс счетчика переполнения и флага
Очищает счетчик ошибок переполнения и сбрасывает флаг ошибки.
Подфункция Поле
данных (запрос) Поле данных (ответ)
00 14
00 00 Данные
эхо-запроса
6.8.2
Пример и диаграмма состояний
Ниже приведен пример запроса к удаленному устройству на возврат данных запроса. При этом используется
нулевой код подфункции (00 00 шестнадцатеричный в двухбайтовом поле). Возвращаемые данные
отправляются в двухбайтовом поле данных (A5 37 hex).
Запрос
Имя поля
Функция
Подфункция Hi
Подфункция Lo
Данные Hi
Данные Lo
(шестнадца
теричный)
08
00
00
A5
37
Ответ
Имя поля
Функция
Подфункция Hi
Подфункция Lo
Данные Hi
Данные Lo
(шестнадца
теричный)
08
00
00
A5
37
Поля данных в ответах на запросы других типов могут содержать счетчики ошибок или другие данные,
запрашиваемые кодом подфункции.
Рисунок. 18: Диаграмма
диагностики
6.9
состояния
11 (0x0B) Получение счетчика событий связи (только для последовательной линии)
Этот код функции используется для получения слова состояния и счетчика событий из счетчика событий
связи удаленного устройства.
Выбирая текущий счет до и после серии сообщений, клиент может определить, были ли сообщения
обработаны нормально удаленным устройством.
Счетчик событий устройства увеличивается один раз при каждом успешном завершении сообщения. Оно не
увеличивается для ответов на исключения, команд опроса или команд выборки счетчика событий.
Счетчик событий может быть сброшен с помощью функции Diagnostics (код 08), с подфункцией Restart
Communications Option (код 00 01) или Clear Counters and Diagnostic Register (код 00 0A).
Обычный ответ содержит двухбайтовое слово состояния и двухбайтовое число событий. Слово состояния
будет состоять только из единиц (FF FF hex), если ранее выданная команда программы все еще
обрабатывается удаленным устройством (существует состояние занятости). В противном случае слово
состояния будет состоять только из нулей.
Запрос
Ответ
Код функции
Статус
Код функции
1 байт
2 байта
1-байтовая
0x0B
0x0000 для 0xFFFF
0x0B
Число событий
2 байта
0x0000 для 0xFFFF
Код ошибки
Код исключения
1 байт
1 байт
0x8B
01 или 04
Ошибка
Вот пример запроса на получение счетчика событий связи в удаленном устройстве:
Запрос
Ответ
Имя поля
Функция
(шестнадца
теричный)
0B
Имя поля
Функция
Статус Hi
Статус Lo
Число событий Hi
Число событий Lo
(шестнадца
теричный)
0B
FF
FF
01
08
В этом примере слово состояния - FF FF hex, указывающее, что в удаленном устройстве все еще
выполняется программная функция. Счетчик событий показывает, что 264 (01 08 шестнадцатеричных)
события были подсчитаны устройством.
Рисунок. 19.
6.10
Получение диаграммы состояний счетчика событий связи
12 (0x0C) Получение журнала событий связи (только для последовательной линии)
Этот код функции используется для получения с удаленного устройства слова состояния, количества
событий, количества сообщений и поля байтов событий.
Счетчики слов состояния и событий идентичны счетчикам, возвращаемым функцией Get Communications
Event Counter (11, 0B шестнадцатеричном формате).
Счетчик сообщений содержит количество сообщений, обработанных удаленным устройством с момента его
последнего перезапуска, операции очистки счетчиков или включения питания. Это число идентично числу,
возвращаемому функцией Diagnostic (код 08), подфункцией Return Bus Message Count (код 11,
шестнадцатеричный код 0B).
Поле event bytes содержит 0-64 байта, причем каждый байт соответствует состоянию одной операции
отправки или приема MODBUS для удаленного устройства. Удаленное устройство вводит события в поле в
хронологическом порядке. Байт 0 является самым последним событием. Каждый новый байт удаляет из
поля самый старый байт.
Обычный ответ содержит двухбайтовое поле слова состояния, двухбайтовое поле счетчика событий,
двухбайтовое поле счетчика сообщений и поле, содержащее 0-64 байта событий. Поле подсчета байтов
определяет общую длину данных в этих четырех полях.
Запрос
Код функции
1-байтовая
0x0C
Ответ
Код функции
Число байтов
Статус
Число событий
Число сообщений
События
1 байт
1 байт
2 байта
2 байта
2 байта
(N-6) x 1 байт
0x0C
N*
0x0000 для 0xFFFF
0x0000 для 0xFFFF
0x0000 для 0xFFFF
* N = количество событий + 3 x 2 байта, (длина состояния, число событий и число сообщений)
Ошиб
ка
Код ошибки
Код исключения
1 байт
1 байт
0x8C
01 или 04
Вот пример запроса на получение журнала событий связи на удаленном устройстве:
Запрос
Имя поля
Функция
(шестнадца
теричный)
0C
Ответ
Имя поля
Функция
Число байтов
Статус Hi
Статус Lo
Число событий Hi
Число событий Lo
Число сообщений Hi
Число сообщений Lo
Событие 0
Событие 1
(шестнадца
теричный)
0C
08
00
00
01
08
01
21
20
00
В этом примере слово состояния - 00 00 hex, указывающее, что удаленное устройство не обрабатывает
программную функцию. Счетчик событий показывает, что удаленное устройство подсчитало 264 (01 08
шестнадцатеричных) события. Счетчик сообщений показывает, что 289 (01
21
шестнадцатеричное число) сообщений
были обработаны.
Последнее событие связи отображается в байте Event 0. Его содержимое (20 шестнадцатеричных цифр)
показывает, что удаленное устройство недавно перешло в режим Listen Only.
Предыдущее событие отображается в байте Event 1. Его содержимое (00 hex) показывает, что удаленное
устройство получило Communications Restart.
Структура байтов событий ответа описана ниже.
Что содержат байты событий
Байт события, возвращаемый функцией Get Communications Event Log, может быть любого из четырех
типов. Тип определяется битом 7 (старшим битом) в каждом байте. Он может быть дополнительно
определен битом 6. Это объясняется ниже.
• Удаленное устройство MODBUS Receive Event
Удаленное устройство сохраняет этот тип байта события при получении сообщения запроса. Оно
сохраняется до того, как удаленное устройство обработает сообщение. Это событие определяется
битом 7, установленным в логическое «1». Другие биты будут установлены в логическую «1», если
соответствующее условие ИСТИННО. Битовая компоновка:
0
1
2
3
4
Содержимое бита
Не используется
Ошибка связи
Не используется
Не используется
Переполнение символов
5
6
7
В настоящее время находится в режиме только прослушивания
Получено широковещательных сообщений
1
• Удаленное устройство MODBUS Send Event
Удаленное устройство сохраняет этот тип байта события, когда оно заканчивает обработку
сообщения запроса. Он сохраняется, если удаленное устройство вернуло обычный ответ или ответ
об исключении, или нет ответа. Это событие определяется битом 7, установленным в логическое
«0», с битом 6, установленным в «1». Другие биты будут установлены в логическую «1», если
соответствующее условие ИСТИННО. Битовая компоновка:
Содержимое бита
0 Отправлено исключение
чтения (коды исключений 1-3)
1
Отправлено исключение прерывания сервера (код исключения 4)
2
Отправлено исключение при занятости сервера (коды исключений 5-6)
3
Отправлено исключение NAK серверной программы (код исключения 7)
4
Произошла ошибка времени ожидания записи
5
В настоящее время
находится в режиме только
прослушивания
6
1
7
0
Удаленное устройство вошло в режим только прослушивания
Удаленное устройство сохраняет этот тип байта события при переходе в режим Listen Only.
Событие определяется содержимым 04 hex.
•
Перезапуск связи, инициированный удаленным устройством
Удаленное устройство сохраняет этот тип байта события при перезапуске своего
коммуникационного порта. Удаленное устройство может быть перезапущено функцией диагностики
(код 08) с подфункцией Restart Communications Option (код 00 01).
Эта функция также переводит удаленное устройство в режим «Continue on Error» или «Stop on
Error». Если удаленное устройство переводится в режим «Continue on Error», байт события
добавляется в существующий журнал событий. Если удаленное устройство переводится в режим
«Stop on Error», байт добавляется в журнал, а остальная часть журнала очищается до нулей.
Событие определяется нулевым содержимым.
•
Рисунок. 20.
6.11
Получение диаграммы состояния журнала событий связи
15 (0x0F) Запись нескольких катушек
Этот код функции используется для принудительного включения или выключения каждой катушки в
последовательности катушек в удаленном устройстве. В PDU Request (Запрос) указываются ссылки на
катушки, которые должны быть принудительно установлены. Обращение к катушкам начинается с нуля.
Поэтому катушка с номером 1 адресуется как 0.
Запрошенные состояния включения/выключения определяются содержимым поля данных запроса.
Логический «» 1 «» в битовой позиции поля запрашивает, чтобы соответствующий выход был ON. Логический
«» 0 «» запрашивает, чтобы он был OFF.
Нормальный отклик возвращает код функции, начальный адрес и количество принудительных катушек.
Запрос PDU ____________________ ___ ___________ ___________________ ___
Код функции
Начальный адрес
Количество выводов
Число байтов
Выходное значение
1 байт
2 байта
2 байта
1 байт
N * x 1 байт
0x0F
0x0000 для 0xFFFF
С 0x0001 по 0x07B0
N*
* N = количество выводов/8, если остаток отличается от 0 ^ N = N + 1
Resp onse PDU__________________ _____________ _______________________
Код функции
Начальный адрес
Количество выводов
1 байт
2 байта
2 байта
0x0F
0x0000 для 0xFFFF
С 0x0001 по 0x07B0
Ошибка
Код ошибки
Код исключения
1 байт
1 байт
0x8F
01 или 02 или 03 или 04
Ниже приведен пример запроса на запись последовательности из 10 катушек, начиная с катушки 20:
Содержимое данных запроса - два байта: CD 01 шестнадцатеричный (1100 1101
0000 0001 двоичный).
двоичные биты соответствуют выходам следующим образом:
Бит:
1
1
0
0
1
1
0
1
0
0
0
0
0
0 0
1
Вывод:
27 26 25 24
23 22 21 20 - 29
28
Первый переданный
байт (CD
hex)
адресует выходы
27-20,
с
наименьшим значащим битом
обращение к наименьшему выходу (20) в этом наборе.
Следующий переданный
байт (01
шестнадцатеричный)
адресует
выходы
29-28, с
наименьшим
значащим
битом
обращение к наименьшему выходу (28) в этом наборе. Неиспользуемые биты в последнем байте данных
должны быть заполнены нулями.
Запрос
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
Количество выходов Hi
Количество выходов Lo
Число байтов
Выходное значение Hi
Выходное значение Lo
(шестнадца
теричный)
0F
00
13
00
0A
02
CD
01
Ответ
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
Количество выходов Hi
Количество выходов Lo
(шестнадца
теричный)
0F
00
13
00
0A
Рисунок 21:
6.12
Запись схемы состояний нескольких выходов
16 (0x10) Записать несколько регистров
Этот код функции используется для записи блока смежных регистров (от 1 до 123 регистров) на удаленном
устройстве.
Запрошенные записанные значения указываются в поле данных запроса. Данные упаковываются по два
байта на регистр.
Обычный ответ возвращает код функции, начальный адрес и количество записанных регистров.
Затребовать __________________________________________________________
Код функции
Начальный адрес
Количество регистров
Число байтов
Значение регистров
1 байт
2 байта
2 байта
1 байт
N * x 2 байта
0x10
0x0000 для 0xFFFF
С 0x0001 по 0x007B
2xN*
значение
* N = количество регистров
Resp onse ______________________
Код функции
Начальный адрес
Количество регистров
1 байт
2 байта
2 байта
0x10
0x0000 для 0xFFFF
От 1 до 123 (0x7B)
Ошибка
Код ошибки
1 байт
0x90
Код исключения
1 байт
01 или 02 или 03 или 04
Вот пример запроса на запись двух регистров, начинающихся от 2 до 00 0A и 01 02 hex:
Запрос
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
(шестнадца
теричный)
10
00
01
Ответ
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
(шестнадца
теричный)
10
00
01
Количество регистров Hi
Количество регистров Lo
Число байтов
Регистры Значение Hi
Регистры Значение Lo
Регистры Значение Hi
Регистры Значение Lo
00
02
04
00
0A
01
02
Количество регистров Hi
Количество регистров Lo
00
02
Рисунок 22: Запись схемы состояний нескольких
регистров
6.13
17 (0x11) Идентификатор сервера отчетов (только
для последовательной линии)
Этот код функции используется для считывания описания типа, текущего состояния и другой информации,
относящейся к удаленному устройству.
Формат обычного ответа показан в следующем примере. Содержимое данных зависит от типа устройства.
Запрос
Код функции
1 байт
0x11
Код функции
Число байтов
Идентификатор сервера
1 байт
1 байт
специфичные для
устройства
0x11
Состояние индикатора выполнения
Дополнительные данные
1 байт
0x00 = ВЫКЛ, 0xFF = ВКЛ
Код ошибки
Код исключения
1 байт
1 байт
0x91
01 или 04
Ответ
Ошиб
ка
Вот пример запроса на сообщение идентификатора и состояния:
Запрос
Имя поля
Функция
(шестнадца
теричный)
11
Ответ
Имя поля
Функция
Число байтов
(шестнадцатеричный)
11
Идентификатор сервера
Дополнительные данные о
состоянии индикатора выполнения
Для конкретного
устройства
Для конкретного
устройства
0x00 или 0xFF
Для конкретного
устройства
6.14
Рисунок. 23. Схема состояний идентификаторов
серверов
отчетов
20 (0x14) Чтение записи файла
Этот код функции используется для выполнения считывания записи файла. Все длины данных запроса
предоставляются в виде числа байтов, а все длины записей предоставляются в виде регистров.
Файл - это организация записей. Каждый файл содержит 10000 записей с адресами от 0000 до 9999
десятичных разрядов или от 0X0000 до 0X270F. Например, запись 12 адресуется как 12.
Функция может считывать несколько групп ссылок. Группы могут быть отдельными (несмежными), но ссылки
в каждой группе должны быть последовательными.
Каждая группа определяется в отдельном поле «sub-request», которое содержит 7 байт:
Тип ссылки: 1 байт (должен быть указан как 6)
Номер файла: 2 байта
Номер начальной записи в файле: 2 байта
Длина считываемой записи: 2 байта.
Количество считываемых регистров в сочетании со всеми другими полями в ожидаемом отклике не должно
превышать допустимой длины PDU MODBUS - 253 байта.
Обычный ответ представляет собой ряд «суб-ответов», по одному на каждый «суб-запрос». Поле количества
байтов - это общее количество байтов во всех «суб-ответах». Кроме того, каждый «подчиненный ответ»
содержит поле, которое показывает свой собственный счетчик байтов.
Затребовать ______________________ ____________ _____________________
Код функции
Число байтов
Подзапрос x, тип ссылки
Подзапрос x, номер файла
1 байт
1 байт
1 байт
2 байта
0x14
От 0x07 до 0xF5 байт
06
С 0x0001 по 0xFFFF
Подзапрос x, номер записи
Подзапрос x, длина записи
2 байта
2 байта
0x0000 для 0x270F
N
Ответ
Код функции
Соотв. Длина данных
Подзапрос x, File Resp. длина
Подзапрос x, тип ссылки
Подзапрос x, данные записи
Подзапрос x + 1,...
Ошиб
ка
1 байт
1 байт
1 байт
1 байт
N x 2 байта
Подзапрос x + 1,...
Код ошибки
Код исключения
0x14
От 0x07 до 0xF5
От 0x07 до 0xF5
6
1 байт
1 байт
0x94
01 или 02 или 03 или 04 или
08
Хотя допускается, чтобы номер файла находился в диапазоне от 1 до 0xFFFF, следует отметить, что
взаимодействие с устаревшим оборудованием может быть нарушено, если номер файла больше 10
(0x0A).
Вот пример запроса на чтение двух групп ссылок с удаленного устройства:
■
Группа 1 состоит из двух регистров из файла 4, начиная с регистра 1 (адрес 0001).
■
Группа 2 состоит из двух регистров из файла 3, начиная с регистра 9 (адрес 0009).
Запрос
Имя поля
Функция
Число байтов
Подзапрос 1, тип ссылки
Подзапрос 1, номер файла Hi
Подзапрос 1, номер файла Ло
Подзапрос 1, номер записи Hi
Подзапрос 1, Номер записи Lo
Подзапрос 1, длина записи Hi
Подзапрос 1, длина записи Ло
Подзапрос 2, тип ссылки
Подзапрос 2, номер файла Hi
Подзапрос 2, номер файла Ло
Подзапрос 2, номер записи Hi
Подзапрос 2, Номер записи Ло
Подзапрос 2, длина записи Hi
Подзапрос 2, длина записи Ло
(шестнадца
теричный)
14
0E
06
00
04
00
01
00
02
06
00
03
00
09
00
02
Ответ
Имя поля
Функция
Соотв. Длина данных
Подзапрос 1, файл соотв. длина
Подзапрос 1, тип ссылки
Подзапрос 1, Register.Data Привет
Подзапрос 1, Register.DataLo
Подзапрос 1, Register.Data Привет
Подзапрос 1, Register.DataLo
Подзапрос 2, файл соотв. длина
Подзапрос 2, тип ссылки
Подзапрос 2, Register.Data H
Подзапрос 2, Register.DataLo
Подзапрос 2, Register.Data Привет
Подзапрос 2, Register.DataLo
(шестнадца
теричный)
14
0C
05
06
0D
FE
00
20
05
06
33
CD
00
40
Рисунок. 24. Диаграмма состояний записи файла
чтения
6.15
21 (0x15) Запись файла записи
Этот код функции используется для выполнения записи в файл. Все длины данных запроса
предоставляются в виде количества байтов, а все длины записей предоставляются в виде количества
16-разрядных слов.
Файл - это организация записей. Каждый файл содержит 10000 записей с адресами от 0000 до 9999
десятичных разрядов или от 0X0000 до 0X270F. Например, запись 12 адресуется как 12.
Функция может записывать несколько групп ссылок. Группы могут быть отдельными, т.е. несмежными, но
ссылки внутри каждой группы должны быть последовательными.
Каждая группа определяется в отдельном поле «sub-request», которое содержит 7 байт плюс данные:
Тип ссылки: 1 байт (должен быть указан как 6)
Номер файла: 2 байта
Номер начальной записи в файле: 2 байта
Длина записываемой записи: 2 байта
Записываемые данные: 2 байта на регистр.
Количество регистров, которые должны быть записаны, в сочетании со всеми другими полями в запросе, не
должно превышать допустимую длину PDU MODBUS: 253 байта.
Обычный ответ - это эхо запроса.
Требуемая e_st ____________________ ____________ _____________________
Код функции
Длина данных запроса
Подзапрос x, тип ссылки
Подзапрос x, номер файла
Подзапрос x, номер записи
1 байт
1 байт
1 байт
2 байта
2 байта
0x15
От 0x09 до 0xFB
06
С 0x0001 по 0xFFFF
0x0000 для 0x270F
Подзапрос x, Длина записи
Подзапрос x, запись данных
Подзапрос x + 1,...
2 байта
N x 2 байта
N
Ответ
Ошиб
ка
Код функции
Длина данных ответа
Подзапрос x, тип ссылки
Подзапрос x, номер файла
Подзапрос x, Номер записи
Подзапрос x, Длина записи
1 байт
0x15
1 байт
От 0x09 до 0xFB
1 байт
06
2 байта
С 0x0001 по 0xFFFF
2 байта
0x0000 для 0x270F
2 байта
N
N x 2 байта
Подзапрос x, данные записи
Подзапрос x + 1,...
Код ошибки
1 байт
0x95
Код исключения
1 байт
01 или 02 или 03 или 04 или 08
Хотя допускается, чтобы номер файла находился в диапазоне от 1 до 0xFFFF, следует отметить, что
взаимодействие с устаревшим оборудованием может быть нарушено, если номер файла больше 10
(0x0A).
Вот пример запроса на запись одной группы ссылок в удаленное устройство:
• Группа состоит из трех регистров в файле 4, начиная с регистра 7 (адрес 0007).
Запрос
Имя поля
Функция
Длина данных запроса
Подзапрос 1, тип ссылки
Подзапрос 1, номер файла Hi
Подзапрос 1, номер файла Ло
Подзапрос 1, номер записи Hi
Подзапрос 1, Номер записи Lo
Подзапрос 1, длина записи Hi
Подзапрос 1, Длина записи Lo
Подзапрос 1, данные регистра Хи
Подзапрос 1, данные регистра Ло
Подзапрос 1, данные регистра Хи
Подзапрос 1, данные регистра Ло
Подзапрос 1, данные регистра Хи
Подзапрос 1, данные регистра Ло
(шестнадца
теричный)
15
0D
06
00
04
00
07
00
03
06
AF
04
БЫТЬ
10
0D
Ответ
Имя поля
Функция
Длина данных запроса
Подзапрос 1, тип ссылки
Подзапрос 1, номер файла Hi
Подзапрос 1, номер файла Ло
Подзапрос 1, номер записи Hi
Подзапрос 1, Номер записи Lo
Подзапрос 1, длина записи Hi
Подзапрос 1, Длина записи Lo
Подзапрос 1, данные регистра Хи
Подзапрос 1, данные регистра Ло
Подзапрос 1, данные регистра Хи
Подзапрос 1, данные регистра Ло
Подзапрос 1, данные регистра Хи
Подзапрос 1, данные регистра Ло
(шестнадца
теричный)
15
0D
06
00
04
00
07
00
03
06
AF
04
БЫТЬ
10
0D
Рисунок. 25. Диаграмма состояния записи
6.16
файла
22 (0x16) Регистр записи маски
Этот код функции используется для изменения содержимого указанного регистра хранения с
использованием комбинации маски И, маски ИЛИ и текущего содержимого регистра. Функция может
использоваться для установки или очистки отдельных битов в регистре.
Запрос определяет регистр хранения, который должен быть записан, данные, которые должны быть
использованы в качестве маски И, и данные, которые должны быть использованы в качестве маски ИЛИ.
Адреса регистров начинаются с нуля. Поэтому регистры 1-16 адресуются как 0-15.
Алгоритм функции:
Результат = (Текущее содержимое И And_Mask) ИЛИ (Or_Mask И (НЕ And_Mask))
Например:
Ведь Набор из
ма
двух
Текущее содержимое =
12
0001 0010
предметов
And_Mask =
F2
1111 0010
Or_Mask =
25
0010 0101
(НЕ And_Mask) =
0D
0000 1101
Результат =
17
0001 0111
Примечание:
• Если значение Or_Mask равно нулю, результатом является просто логическое И текущего содержимого и
And_Mask. Если значение And_Mask равно нулю, результат равен значению Or_Mask.
• Содержимое регистра можно прочитать с помощью функции Read Holding Registers (код функции 03).
Однако они могут быть изменены впоследствии, когда контроллер сканирует свою пользовательскую логическую программу.
Запрос
Код функции
Адрес ссылки
И Маска
Или Маска
1 байт
2 байта
2 байта
2 байта
0x16
0x0000 для 0xFFFF
0x0000 для 0xFFFF
0x0000 для 0xFFFF
Код функции
Адрес ссылки
И Маска
Или Маска
1 байт
2 байта
2 байта
2 байта
0x16
0x0000 для 0xFFFF
0x0000 для 0xFFFF
0x0000 для 0xFFFF
Ответ
Обычный ответ - это эхо запроса. Ответ возвращается после записи регистра.
Ошибка
Код ошибки
Код исключения
1 байт
1 байт
0x96
01 или 02 или 03 или 04
Вот пример записи маски для регистрации 5 на удаленном устройстве с использованием указанных выше
значений маски.
Рисунок. 26: Схема состояний регистра удержания записи
маски
6.17
23 (0x17) Чтение/запись Несколько регистров
Этот код функции выполняет комбинацию одной операции считывания и одной операции записи в одной
транзакции MODBUS. Операция записи выполняется перед чтением.
Регистры хранения адресуются, начиная с нуля. Поэтому удерживающие регистры 1-16 адресуются в PDU
как 0-15.
Запрос указывает начальный адрес и количество регистров хранения, которые должны быть считаны, а
также начальный адрес, количество регистров хранения и данные, которые должны быть записаны. Счетчик
байтов определяет количество байтов, которые должны следовать в поле данных записи.
Обычный ответ содержит данные из группы считанных регистров. Поле подсчета байтов указывает
Запрос
Код функции
Прочитать начальный адрес
Количество для чтения
Запись начального адреса
Количество для записи
Число записанных байтов
Запись значения регистров
1 байт
2 байта
2 байта
2 байта
2 байта
1 байт
N * x 2 байта
0x17
0x0000 для 0xFFFF
С 0x0001 по 0x007D
0x0000 для 0xFFFF
С 0x0001 по 0X0079
2xN*
количество байтов, которые должны следовать в поле считывания данных.
Ответ
Код функции
Число байтов
Чтение значения регистров
1 байт
1 байт
N '* x 2 байта
0x17
2 x N '*
* N = количество для записи
* N '= количество для чтения
Ошибка
Код ошибки
Код исключения
1 байт
1 байт
0x97
01 или 02 или 03 или 04
Вот пример запроса на чтение шести регистров, начиная с регистра 4, и на запись трех регистров, начиная с
регистра 15:
Запрос
Имя поля
Функция
Прочитать начальный адрес Привет
Прочитать начальный адрес Lo
Количество для чтения Привет
Количество для чтения Lo
Запись начального адреса Hi
Запись начального адреса Lo
Количество для записи Hi
Количество для записи Lo
Число записанных байтов
Значение регистров записи Hi
Запись значения регистра Lo
Значение регистров записи Hi
Запись значения регистра Lo
Значение регистров записи Hi
Запись значения регистра Lo
(шестнадца
теричный)
17
00
03
00
06
00
0E
00
03
06
00
FF
00
FF
00
FF
Ответ
Имя поля
Функция
Число байтов
Чтение значения регистров Hi
Чтение значения регистров Lo
Чтение значения регистров Hi
Чтение значения регистров Lo
Чтение значения регистров Hi
Чтение значения регистров Lo
Чтение значения регистров Hi
Чтение значения регистров Lo
Чтение значения регистров Hi
Чтение значения регистров Lo
Чтение значения регистров Hi
Чтение значения регистров Lo
(шестнадца
теричный)
17
0C
00
FE
0A
CD
00
01
00
03
00
0D
00
FF
Рисунок. 27. Диаграмма состояний нескольких регистров чтения/записи
6.18
24 (0x18) Чтение очереди FIFO
Этот код функции позволяет считывать содержимое очереди FIFO регистра на удаленном устройстве.
Функция возвращает количество регистров в очереди, за которыми следуют данные из очереди. Можно
считать до 32 регистров: счетчик, плюс до 31 регистра данных в очереди. Сначала возвращается регистр
подсчета очереди, за которым следуют регистры данных в очереди.
Функция считывает содержимое очереди, но не очищает его.
В обычном ответе счетчик байтов показывает количество байтов для отслеживания, включая байты
счетчика очереди и байты регистра значения (но не включая поле проверки ошибок).
Счетчик очереди - это количество регистров данных в очереди (не включая регистр подсчета).
Если число очередей превышает 31, возвращается ответ исключения с кодом ошибки 03 (недопустимое
значение данных).
Ответ
Код функции
Число байтов
Число ФИФО
1 байт
2 байта
2 байта
Регистр значений ФИФО
N * x 2 байта
0x18
< 31
Затребовать ___________________ _____________________________________
Код функции
Адрес указателя FIFO
1 байт
2 байта
0x18
0x0000 для 0xFFFF
Код ошибки
Код исключения
1 байт
1 байт
0x98
01 или 02 или 03 или 04
Ошибка
* N = Число FIFO
Ниже приведен пример запроса чтения очереди FIFO на удаленное устройство. Запрос состоит в
считывании очереди, начиная с регистра указателя 1246 (0x04DE):
Запрос
Имя поля
Функция
Адрес указателя FIFO Hi
Адрес указателя FIFO Lo
(шестнадца
теричный)
18
04
DE
Ответ
Имя поля
Функция
Число байтов Hi
Количество байтов Lo
ФИФО Счет Привет
ФИФО Count Lo
Регистр значений FIFO Hi
Регистр значений FIFO Lo
Регистр значений FIFO Hi
Регистр значений FIFO Lo
(шестнадца
теричный)
18
00
06
00
02
01
B8
12
84
В этом примере регистр указателя FIFO (1246 в запросе) возвращается со счетом очереди 2. Два регистра
данных следуют за счетчиком очереди. Это:
1247 (содержимое 440 десятичное -- 0x01B8); и 1248 (содержание 4740 -- 0x1284).
Рисунок. 28. Диаграмма состояний очереди чтения FIFO
6.19
43 (0x2B) Транспорт инкапсулированного интерфейса
Информационное примечание: Пользователю
(Информационное) MODBUS RESERVED
КОДЫ ФУНКЦИЙ, СУБКОДЫ И ТИПЫ MEI.
предлагается
обратиться
к
Приложению
A
Код функции 43 и его MEI Type 14 для идентификации устройств является одним из двух видов транспорта
инкапсулированного интерфейса, доступных в настоящее время в данной спецификации. Следующие коды
функций и типы MEI не должны быть частью данной опубликованной спецификации, и эти коды функций и
типы MEI специально зарезервированы: 43/0-12 и 43/15-255.
MODBUS Encapsulated Interface (MEI) Transport - это механизм туннелирования запросов услуг и вызовов
методов, а также их возврата внутри MODBUS PDU.
Основной функцией транспорта MEI является инкапсуляция вызовов методов или запросов услуг, которые
являются частью определенного интерфейса, а также возвращаемых данных вызова методов или ответов
услуг.
Рисунок. 29. Транспорт с инкапсулированным интерфейсом
MODBUS
Сетевой интерфейс может представлять собой любой коммуникационный стек, используемый для передачи
PDU MODBUS, например, TCP/ IP или последовательный канал.
Тип MEI является присвоенным номером MODBUS и поэтому будет уникальным. Значения от 0 до 255
зарезервированы в соответствии с Приложением A (информационное), за исключением MEI типа 13 и MEI
типа 14.
Тип MEI используется реализациями транспорта MEI для отправки вызова метода указанному интерфейсу.
Так как транспортная служба MEI не зависит от интерфейса, интерфейс должен обеспечивать любое
определенное поведение или политику, требуемую интерфейсом, например, обработку транзакций MEI,
обработку ошибок интерфейса MEI и т.д.
Требуемая e_st _________________ _____________ _______________________
Код функции
Тип MEI *
1 байт
1 байт
Данные, специфичные для типа MEI
n Байт
0x2B
0x0D или 0x0E
* MEI = интерфейс MODBUS с инкапсуляцией
Resp onse ______________________ _______
Код функции
Тип MEI
1 байт
1 байт
Данные, специфичные для типа MEI
n Байт
0x2B
эхо
типа MEI
Запрос
в
Ошибка
Код функции
1 байт
Код исключения
1 байт
0xAB: Fc 0x2B + 0x80
01 или 02 или 03 или 04
В качестве примера см. Read device identification request.
6.20
43/13 (0x2B/ 0x0D) CANopen Общий справочный запрос и ответ PDU
Общая справочная команда CANopen представляет собой инкапсуляцию служб, которые будут
использоваться для доступа (чтения или записи) к записям словаря объектов устройств CAN-Open, а также
для управления и мониторинга системы и устройств CANopen.
MEI типа 13 (0x0D) - это присвоенный MODBUS номер, лицензированный CiA для общей ссылки CANopen.
Система предназначена для работы в рамках ограничений существующих сетей MODBUS. Поэтому
информация, необходимая для запроса или изменения словарей объектов в системе, преобразуется
в формат сообщения MODBUS. У PDU будет ограничение в 253 байта как в сообщении Request, так и в
сообщении Response.
Информативно:
Пожалуйста, обратитесь к Приложению B для ссылки на спецификацию, которая
обеспечивает
информация о МЭИ типа 13.
43/14 (0x2B/ 0x0E) Чтение идентификации устройства
6.21
Этот код функции позволяет считывать только идентификационные данные и дополнительную информацию,
относящуюся к физическому и функциональному описанию удаленного устройства.
Интерфейс идентификации устройства считывания моделируется как адресное пространство, состоящее из
набора адресуемых элементов данных. Элементы данных называются объектами, и их идентифицирует
идентификатор объекта.
Интерфейс состоит из 3 категорий объектов:
■
Базовая идентификация устройства. Все объекты этой категории являются обязательными:
VendorName,
Код продукта и номер редакции.
Обычная идентификация устройства. В дополнение к объектам основных данных устройство
■
обеспечивает
дополнительные и необязательные объекты данных идентификации и описания. Все объекты этой
категории определены в стандарте, но их реализация не является обязательной.
Расширенная идентификация устройства. Помимо обычных объектов данных, устройство
предоставляет дополнительные и необязательные идентификационные и описательные приватные
■
Запрос
Код функции
Тип MEI *
Чтение кода идентификатора
устройства
Идентификатор объекта
1 байт
1 байт
1 байт
0x2B
0x0E
01 / 02 / 03 / 04
1 байт
От 0x00 до 0xFF
данные о самом физическом устройстве. Все эти данные зависят от устройства.
Идентиф
Имя/описание объекта
икатор
объекта
0x00
Наименование поставщика
0x01
0x02
0x03
0x04
0x05
0x06
0x07
Тип
Строка ASCII
Строка ASCII
Строка ASCII
Строка ASCII
Строка ASCII
Строка ASCII
Строка ASCII
Код продукта
MajorMinorRevision
(МажорнаяМинорнаяРевизия)
URL-адрес поставщика
Название продукта
Имя модели
Имя _ приложения _ пользователя
Зарезервировано
0x7F
0x80
Частные объекты могут быть определены
опционально.
0xFF Диапазон [0x80 - 0xFF] зависит от
продукта.
* MEI = интерфейс MODBUS с инкапсуляцией
Resp onse _____________________ ________
1 байт
1 байт
1 байт
1 байт
0x01 или 0x02 или 0x03 или
0x81 или 0x82 или 0x83
Больше следует
Следующий
идентификатор
объекта
Количество объектов
1 байт
1 байт
1 байт
00/FF
Идентификационный номер
объекта
0x2B
0x0E
01 / 02 / 03 / 04
Список
Ошибка
1 байт
1 байт
Длина объекта
категория
Обязательны Основной
й
Обязательны
й
Обязательны
й
Регулярный
Дополнительн
ый
Дополнительн
ый
Дополнительн
ый
Дополнительн
ый
Дополнительн
ый
зависимость от Дополнительн Расширенны
й
устройства
ый
Код функции
Тип MEI
Чтение
кода
идентификатора
устройства
Уровень соответствия
Идентификатор объекта
Длина объекта
Значение объекта
M/O
В зависимости от идентификатора
объекта
Код функции
1 байт
0xAB: Fc 0x2B + 0x80
Код исключения
1 байт
01 или 02 или 03 или 04
Описание параметров запроса:
Назначенный номер 14 инкапсулированного интерфейса MODBUS идентифицирует запрос на
считывание идентификации.
Параметр «Read Device ID code» позволяет определить четыре типа доступа:
01: запрос на получение базовой идентификации устройства (потоковый доступ)
02: запрос на получение обычной идентификации устройства (потоковый доступ)
03: запрос на получение расширенной идентификации устройства (потоковый доступ)
04: запрос на получение одного конкретного объекта идентификации (индивидуальный доступ)
Код исключения 03 посылается обратно в ответе, если считывание кода идентификатора устройства
является незаконным.
В случае ответа, не умещающегося в единый ответ, необходимо сделать несколько транзакций
(запрос/ответ). Байт Object Id дает идентификацию первого объекта для получения. Для первой
транзакции клиент должен установить Object Id в 0, чтобы получить начало данных идентификации
устройства. Для следующих транзакций клиент должен установить идентификатор объекта на значение,
возвращенное сервером в предыдущем ответе.
Примечание: Объект неделим, поэтому любой объект должен иметь размер, соответствующий размеру
ответа транзакции.
Если идентификатор объекта не соответствует ни одному из известных объектов, сервер отвечает так,
как будто указан объект 0 (перезапуск в начале).
В случае индивидуального доступа: ReadDevId code 04, Object Id в запросе дает идентификацию
объекта для получения, а если Object Id не совпадает ни с одним известным объектом, сервер
возвращает ответ исключения с кодом исключения = 02 (Illegal data address).
Если серверное устройство запрашивает уровень описания (readDevice Code) выше, чем его уровень
соответствия, оно должно ответить в соответствии со своим фактическим уровнем соответствия.
Описание параметра ответа:
Код функции:
Код функции 43 (десятичный) 0x2B (шестнадцатеричный)
Тип MEI
14 (0x0E) Назначенный номер типа MEI для идентификации устройства
Интерфейс
Код ReadDevId:
Уровень соответствия
Больше следует
Следующий
идентификатор объекта
Количество объектов
Object0. Id
Совпадает с кодом ReadDevId запроса: 01, 02, 03 или 04
Уровень соответствия идентификации устройства и тип поддерживаемого
доступа
0x01: базовая идентификация (только потоковый доступ)
0x02: обычная идентификация (только потоковый доступ)
0x03: расширенная идентификация (только потоковый доступ)
0x81: базовая идентификация (потоковый доступ и индивидуальный доступ)
0x82: обычная идентификация (потоковый доступ и индивидуальный
доступ)
0x83: расширенная идентификация (потоковый доступ и индивидуальный
доступ)
В случае кодов ReadDevId 01, 02 или 03 (потоковый доступ), Если
идентификационные данные не укладываются в один ответ, может
потребоваться несколько транзакций запроса/ответа.
0x00: больше нет доступных объектов
0xFF: другие объекты идентификации доступны и далее
Требуются транзакции MODBUS
В случае кода ReadDevId 04 (индивидуальный доступ) в этом поле
должно быть установлено значение 00.
Если «MoreFollows = FF», идентификация следующего запрашиваемого
объекта
.
Если «MoreFollows = 00», необходимо установить значение 00 (бесполезно)
Номер
объекта идентификации, возвращенного
в
ответе
(для индивидуального доступа, количество объектов = 1)
Идентификация первого объекта, возвращенного в PDU (потоковый доступ),
или запрашиваемого объекта (индивидуальный доступ)
Object0. Длина
Object0.Value
Длина первого объекта в байтах
значение первого объекта (Object0.Length байтах)
ObjectN.Id
Идентификация последнего объекта (в рамках ответа)
ObjectN. Длина
Длина последнего объекта в байтах
ObjectN.Value
Значение последнего объекта (ObjectN.Length байт)
Пример запроса Read Device Identification для «Basic device identification»: В этом примере вся
информация отправляется в одном PDU ответа.
Запрос
Имя поля
Функция
MEI Типа чтение кода Dev Id
Идентификатор объекта
Значение
2B
0E
01
00
Ответ
Имя поля
Функция MEI Типа Read Dev
Id Code Уровень
соответствия More Follows
NextObjectId Количество
объектов Идентификатор
объекта Длина объекта
Значение объекта
Идентификатор объекта
Длина объекта Значение
объекта Идентификатор
объекта Длина объекта
Значение объекта
Значение
2B
0E
01
01
00
00
03
00
16
«Идентификация компании» «Text» «All»
01
0D
«Код продукта XX» «Text» «All»
02
05
«V2.11»
В случае устройства, которое потребовало нескольких транзакций для отправки ответа, инициируются
следующие транзакции.
Первая транзакция:
Запрос
Имя поля
Функция
Тип MEI
Чтение кода
идентификатора
разработчика
Идентификатор объекта
Ответ
Значение
Имя поля
2B
Функция
0E
Тип MEI
01
Прочитать
идентификационный
код
00
Уровень соответствия
разработчика
Больше следует
NextObjectId
Количество объектов
Идентификатор объекта
Длина объекта
Значение объекта
Идентификатор объекта
Длина объекта
Значение объекта
Значение
2B
0E
01
01
FF
02
03
00
16
«Идентификация компании» «Text» «All»
01
1С
«Код продукта XXXXXXXXXXXXXXXX» «Text» «All»
Вторая транзакция:
Запрос
Имя поля
Функция
Тип MEI
Прочитать идентификационный код
разработчика
Идентификатор объекта
Значение
2B
0E
01
02
Ответ
Имя поля
Функция MEI Типа Read Dev Id Code
Уровень соответствия More Follows
NextObjectId Количество объектов
Object Id Object Length Object
Значение объекта
Значение
2B
0E
01
01
00
00
03
02
05
«V2.11»
Рисунок. 30.
Диаграмма состояний идентификации устройства
7 откликов об исключении MODBUS
Когда клиентское устройство отправляет запрос серверному устройству, оно ожидает нормальный ответ.
Запрос клиента может вызвать одно из четырех возможных событий:
•
Если серверное устройство принимает запрос без ошибки связи и может нормально обработать запрос,
оно возвращает нормальный ответ.
•
Если сервер не получает запрос из-за ошибки связи, ответ не возвращается. Клиентская программа в
итоге обработает условие тайм-аута для запроса.
•
Если сервер получает запрос, но обнаруживает ошибку связи (четность, LRC, CRC,...), ответ не
возвращается. Клиентская программа в итоге обработает условие тайм-аута для запроса.
•
Если сервер получает запрос без ошибки связи, но не может его обработать (например, если запрос
заключается в чтении несуществующего вывода или регистра), сервер вернет ответ об исключении,
информирующий клиента о характере ошибки.
Сообщение ответа на исключение имеет два поля, которые отличают его от обычного ответа: Поле кода
функции: В нормальном ответе сервер перекликается с кодом функции исходного запроса в поле кода функции
ответа. Все коды функций имеют старший бит (MSB) 0 (все их значения ниже 80 шестнадцатеричных). В ответе
на исключение сервер устанавливает MSB кода функции равным 1. Это делает значение кода функции в ответе
на исключение точно на 80 шестнадцатеричных больше, чем значение было бы для нормального ответа.
С помощью набора MSB кода функции
прикладная программа клиента может
распознавать
exception response и может исследовать поле данных для кода исключения.
Поле данных: В обычном ответе сервер может вернуть данные или статистику в поле данных (любую
информацию, которая была запрошена в запросе). В ответе на исключение сервер возвращает код исключения
в поле данных. Определяет условие сервера, вызвавшее исключение.
Пример запроса клиента и ответа на исключение сервера
Запрос
Имя поля
Функция
Начальный адрес Hi
Начальный адрес Lo
Количество выходов Hi
Количество выходов Lo
(шестнадца
теричный)
01
04
A1
00
01
Ответ
Имя поля
Функция
Код исключения
(шестнадца
теричный)
81
02
В этом примере клиент адресует запрос устройству сервера. Код функции (01) предназначен для операции Read
Output Status. Он запрашивает состояние вывода по адресу 1185 (04A1 шестнадцатеричном формате). Следует
отметить, что считывается только один выход, как определено полем (0001) количества выходов.
Если адрес вывода не существует в устройстве сервера, сервер возвратит ответ об исключении с кодом
исключения, показанным (02). Указывает недопустимый адрес данных для сервера.
Список кодов исключений начинается со следующей страницы.
Коды исключений MODBUS
Кодекс
01
Имя
НЕДОПУСТИМАЯ ФУНКЦИЯ
02
НЕДОПУСТИМЫЙ АДРЕС ДАННЫХ
03
НЕДОПУСТИМОЕ ЗНАЧЕНИЕ ДАННЫХ
04
ОТКАЗ СЕРВЕРНОГО УСТРОЙСТВА
05
ПРИЗНАТЬ
Значение
Полученный в запросе код функции не является
допустимым действием для сервера. Возможно, код
функции применим только к более новым устройствам и не
был реализован в выбранном устройстве. Это также может
указывать на то, что сервер находится в неправильном
состоянии для обработки запроса этого типа, например,
из-за того, что он не настроен и ему требуется вернуть
значения регистра.
Адрес данных, полученный в запросе, не является
допустимым адресом
для
сервера. Еще
в частности, комбинация номера ссылки и длины передачи
является недопустимой. Для контроллера со 100
регистрами PDU обращается к первому регистру как к 0, а к
последнему - как к 99. Если запрос подается с начальным
адресом регистра 96 и количеством регистров 4, то этот
запрос будет успешно работать (по меньшей мере, на
уровне адреса) на регистрах 96, 97,
98,
99. Если
запрос
представленный с начальным адресом регистра 96 и
количеством регистров 5, то этот запрос не будет выполнен
с кодом исключения 0x02 «Недопустимый адрес данных»,
поскольку он пытается работать с регистрами 96, 97, 98, 99 и
100, и нет регистра с адресом 100.
Значение, содержащееся в поле данных запроса, не
является допустимым значением для сервера. Это
указывает на ошибку в структуре оставшейся части
сложного
запроса,
например
на
неправильную
предполагаемую длину. В частности, это НЕ означает, что
элемент данных, представленный для хранения в регистре,
имеет значение, выходящее за рамки ожидания прикладной
программы, поскольку протокол MODBUS не знает о
значении какого-либо конкретного значения какого-либо
конкретного регистра.
При попытке сервера выполнить запрошенное действие
произошла неустранимая ошибка.
Специализированное использование в сочетании с
программированием команд.
Сервер принял запрос и обрабатывает его, но для этого
потребуется длительное время. Этот ответ возвращается
для предотвращения ошибки тайм-аута в клиенте. Затем
клиент может выдать сообщение о завершении опроса
программы, чтобы определить, завершена ли обработка.
06
СЕРВЕРНОЕ УСТРОЙСТВО ЗАНЯТО
08
ОШИБКА ЧЕТНОСТИ ПАМЯТИ
Специализированное использование в сочетании с
программированием команд.
Сервер занят обработкой длительной команды программы.
Клиент должен повторить передачу сообщения позже, когда
сервер освободится.
Специализированное использование в сочетании с кодами
функций 20 и 21 и типом ссылки 6 для указания того, что
расширенная область файла не прошла проверку
согласованности.
Сервер попытался прочитать файл записи, но обнаружил
ошибку четности в памяти. Клиент может повторить запрос,
но может потребоваться обслуживание
на устройстве сервера.
0A
ПУТЬ К ШЛЮЗУ НЕДОСТУПЕН
0B
НЕ ОТВЕЧАЕТ
Специализированное использование в сочетании со
шлюзами указывает на то, что шлюз не смог выделить
внутренний канал связи от входного порта к выходному
порту для обработки запроса. Обычно означает, что шлюз
настроен неправильно или перегружен.
ШЛЮЗОВОЕ ОКОНЕЧНОЕ
Специализированное использование в сочетании со
УСТРОЙСТВО.
шлюзами указывает на то, что ответ от оконечного
устройства получен не был. Обычно означает, что
устройство отсутствует в сети.
Приложение A (Информационное): MODBUS RESERVED FUNCTION CODES, SUBCODES AND MEI
TYPES
Следующие функциональные коды и субкоды не являются частью данной опубликованной спецификации,
и эти функциональные коды и субкоды специально зарезервированы. Формат - код функции/субкод или
просто код функции, где все субкоды (0-255) зарезервированы: 8/19; 8/2165535, 9, 10, 13, 14, 41, 42, 90, 91,
125, 126 и 127.
Код функции 43 и его MEI Type 14 для идентификации устройств и MEI Type 13 для CANopen General
Reference Request and Response PDU являются доступными в настоящее время транспортами
инкапсулированного интерфейса в этой спецификации.
Следующие коды функций и типы MEI не должны быть частью данной опубликованной спецификации, и эти
коды функций и типы MEI специально зарезервированы: 43/0-12 и 43/15-255. В этой спецификации не
поддерживается код определяемой пользователем функции, имеющий тот же или подобный результат, что
и транспорт инкапсулированного интерфейса.
MODBUS является зарегистрированным товарным знаком Schneider Automation Inc.
Приложение B (Информационное): ОБЩЕЕ СПРАВОЧНОЕ КОМАНДОВАНИЕ CANOPEN
Пожалуйста, обратитесь к веб-сайту MODBUS или CiA (CAN in Automation) для получения копии и условий
использования, которые охватывают код функции 43 MEI Type 13.
Download