Exception error 15 modbus

Описание возможностей протокола MODBUS (serial, TCP) для прикладных задач.

MODBUS это протокол обмена сообщениями уровня приложения, позиционируемый как уровень 7 модели OSI (Open Systems Interconnection). Modbus предоставляет способ обмена данными типа клиент/сервер между устройствами, подключенных к различным типам шин или сетей. Непонятные термины и сокращения см. в разделе «Словарик», в конце статьи.

В индустрии широко применяются в основном 2 варианта соединения устройств — последовательный (с 1979 года, на основе RS-232), и через сеть стека TCP/IP, через порт 502.

Протокол MODBUS работает по принципу запрос/ответ, и предоставляет службы, определенных функциональными кодами. Функциональные коды MODBUS это элементы запроса/ответа PDU (Protocol Data Unit). Назначение этого документа (перевод спецификации [1]) — описать функциональные коды, используемые в рабочей среде транзакций MODBUS.

Как уже упоминалось, MODBUS работает на уровне приложений, для обмена по типу клиент/сервер между устройствами, подключенными к разным типам шин или сетей. В настоящий момент реализованы следующие виды сетей:

• TCP/IP over Ethernet [2].
• Асинхронное последовательное соединение через различные физические реализации (проводные: EIA/TIA-232-E, EIA-422, EIA/TIA-485-A; оптика, радио, и т. д.).
• MODBUS PLUS, высокоскоростная сеть с передачей маркеров (high speed token passing network).

MODBUS communication stack fig01

Рис. 1. Стек коммуникаций MODBUS.

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

MODBUS Network Architecture example fig02

Рис. 2: Пример архитектуры сети MODBUS.

Каждый тип устройствEvery type of devices (PLC, HMI, панель управления, драйвер, система управления движением, устройство I/O, …) может использовать протокол MODBUS для инициирования сетевых (дистанционных) операций.

Один и тот же обмен данными может быть реализован как через последовательную линию связи (RS-232 и его производные), так и через сети Ethernet TCP/IP. Шлюзы позволяют осуществить коммуникацию между различными типами шин или сетей, используя протокол MODBUS.

[4. Общее описание протокола]

В протоколе MODBUS определена простая единица обмена данными (Protocol Data Unit, PDU), которая не зависит от нижележащих слоев обмена данными. Отображение протокола MODBUS на определенные шины или сети могут вводить дополнительные поля на единице обмена данных приложения (Application Data Unit, ADU).

MODBUS general frame fig03

Рис. 3. Основной фрейм MODBUS.

MODBUS ADU формируется клиентом, который инициирует транзакцию MODBUS. Функция указывает серверу, какое действие следует выполнить. Протокол приложения MODBUS устанавливает формат запроса, инициированного клиентом.

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

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

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

Поле данных может отсутствовать (иметь нулевую длину) в определенных видах запросов — в этом случае сервер не требует дополнительную информацию. Код функции сам по себе определяет действие.

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

Например, клиент может прочитать состояния ON/OFF группы дискретных выходов или входов, или может прочитать/записать содержимое данных группы регистров.

Когда сервер отвечает клиенту, он использует поле кода функции, чтобы показать нормальный (безошибочный) ответ, или некоторый вид произошедшей ошибки (это называется ответ исключения, exception response). Для нормального ответа сервер просто как эхо выдает в ответ на запрос оригинальный код функции.

MODBUS transaction error free fig04

Рис. 4. Транзакция MODBUS (без ошибки).

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

MODBUS transaction exception response fig05

Рис. 5. Транзакция MODBUS (exception response, в случае ошибки).

Примечание: желательно отслеживать тайм-аут ответа, чтобы не ждать бесконечно ответа, который возможно никогда не придет.

Размер MODBUS PDU ограничен значением, унаследованным от реализации MODBUS на основе проводной последовательной сети (максимум RS485 ADU = 256 байт).

Таким образом, MODBUS PDU для последовательной линии обмена = 256 — адрес сервера (1 байт) — CRC (2 байта) = 253 байта.

Следовательно:

RS232 / RS485 ADU = 253 байта + адрес сервера (1 байт) + CRC (2 байта) = 256 байт.
TCP MODBUS ADU = 253 байта + MBAP (7 байт) = 260 байт.

Протокол MODBUS определяет три вида PDU:

• MODBUS Request PDU (PDU запроса), mb_req_pdu.
• MODBUS Response PDU (PDU ответа), mb_rsp_pdu.
• MODBUS Exception Response PDU (PDU ответа исключения), 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
request_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 Exception Code), определенный в таблице кодов исключений MODBUS (см. секцию 7 в конце статьи).

4.2. Кодирование данных. MODBUS использует big-Endian представление для адресов и элементов данных. Это значит, что если числовое значение использует для кодирования и передачи больше одного байта, то тогда сначала передается самый старший байт (в памяти самый старший байт размещается первым, т. е. по самому младшему адресу). Например, если размер регистра 16 бит, и в нем находится значение 0x1234, то сначала передается байт 0x12, затем 0x34. Подробнее см. [3, 4].

4.3. Модель данных MODBUS. MODBUS базируется на модели данных из серии таблиц, обладающих разными характеристиками. 4 главные таблицы следующие:

Основные таблицы Тип объекта Режим доступа Комментарии
Discretes Input (цифровые входы) Одиночный бит Read-Only (только чтение) Этот тип данных может быть предоставлен подсистемой ввода/вывода.
Coils («обмотки», цифровые выходы) Одиночный бит Read-Write (чтение и запись) Этот тип данных программа приложения может изменять.
Input Registers (входные регистры) 16-битное слово Read-Only (только чтение) Этот тип данных может быть предоставлен подсистемой ввода/вывода.
Holding Registers (регистры хранения) 16-битное слово Read-Write (чтение и запись) Этот тип данных программа приложения может изменять.

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

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

Очевидно, что все данные, обрабатываемые через MODBUS (биты, регистры) должны находиться в памяти приложения устройства. Однако физическое размещение в памяти (адрес) не следует путать со ссылкой на данные. The only requirement is to link data reference with physical address.

Логические ссылочные номера MODBUS, которые используются в функциях MODBUS, это беззнаковые целочисленные индексы (uint16_t), начинающиеся с 0.

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

[Пример 1: в устройстве 4 отдельных блока данных]

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

MODBUS Data Model with separate block fig06

Рис. 6. Модель данных MODBUS с отдельными блоками.

[Пример 2: в устройстве только один блок данных]

В этом примере одни и те же данные могут быть доступны через разные функции MODBUS, либо через 16-битный доступ, либо через одноразрядный.

MODBUS Data Model with only 1 block fig07

Рис. 7. Модель данных MODBUS с одним блоком.

Модель адресации MODBUS. Протокол приложения MODBUS точно определяет правила адресации PDU. В MODBUS PDU каждые данные адресуется индексом от 0 до 65535.

Также ясно определена модель данных MODBUS, составленная из 4 блоков, каждый из которых пронумерован от 1 до n. Модели данных MODBUS каждый элемент в блоке нумеруется от 1 до n.

После этого модель данных MODBUS должна быть связана с приложением устройства (объект IEC-61131, или другая модель приложения). Предварительное отображение между моделью данных MODBUS и приложением устройства полностью определяется его производителем, и зависит от специфики устройства.

На рисунке ниже показано, как данные MODBUS с номером X адресованы в MODBUS PDU X-1.

MODBUS Addressing model fig08

Рис. 8. Модель адресации MODBUS.

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

MODBUS transaction state diagram fig09

Рис. 9. Диаграмма состояний транзакции MODBUS.

Как только запрос был обработан сервером, он строит ответ с адекватной транзакцией MODBUS. В зависимости от результата обработки будет собран один из двух типов ответа:

• Положительный ответ MODBUS:
   — Код функции ответа = коду функции запроса.

• Ответ исключения (MODBUS Exception response, см. секцию 7):
   — Цель ответа предоставить клиенту подходящую информацию, описывающую ошибку, детектированную при обработке запроса.
   — Код исключения (exception function code) = коду функции запроса + 0x80;
   — Предоставляет код исключения, показывающий причину ошибки.

[5. Категории кода функции]

Существует 3 категории кодов функции MODBUS:

Публичные коды (Public Function Codes)

• Коды функций, которые хорошо определены.
• Гарантированно уникальные.
• Поддерживаются комьюнити MODBUS-IDA.org.
• Документация опубликована.
• Доступен тест совместимости.
• Включают как публично назначенные коды функций, так и не назначенные коды, зарезервированные для использования в будущем.

Пользовательские коды (User-Defined Function Codes)

• Два диапазона определяемых пользователем кдов, от 65 до 72 и от 100 до 110.
• Пользователь может выбрать и реализовать код функции, который не поддерживается спецификацией.
• Нет гарантии, что выбранный код функции будет уникальным.
• Если пользователь захочет сменить позиционирование функционала своего кода функции как публичного, он должен инициировать RFC, чтобы внести изменение в публичную категорию, в которой будет назначен новый функциональный код.
• Организация MODBUS, Inc явно оставляет за собой право разработки предлагаемого RFC.

Зарезервированные коды (Reserved Function Codes)

• Коды функции, используемые в настоящее время некоторыми компаниями в своих старых продуктах. Эти коды недоступны для публичного использования.

Дополнительно см. Приложение A «Зарезервированные коды MODBUS, субкоды и типы MEI» в конце этой документации.

MODBUS Function Code Categories fig10

Рис. 10. Категории кодов функции.

Публичные коды функций:

  Функция Коды функций HEX Секция
Код Субкод
Данные Доступ
к битам
Физические дискретные
входы, внутренние биты
или физические выходы
(«обмотки», coils)
Read Coils 01   01 6.1
Read Discrete Inputs 02   02 6.2
Write Single Coil 05   05 6.5
Write Multiple Coils 15   0F 6.11
16-битный
доступ
Физические входные регистры Read Input Registers 04   04 6.4
Внутренние регистры
или физические
выходные регистры
Read Holding Registers 03   03 6.3
Write Single Register 06   06 6.6
Write Multiple Registers 16   10 6.12
Read/Write Multiple Registers 23   17 6.17
Mask Write Register 22   16 6.16
Read FIFO queue 24   18 6.18
Файл Доступ к элементам файла Read File record 20   14 6.14
Write File record 21   15 6.15
Диагностика Read Exception status 07   07 6.7
Diagnostic 08 00-18, 20 08 6.8
Get Com event counter 11   0B 6.9
Get Com Event Log 12   0C 6.10
Report Slave ID 17   11 6.13
Read device Identification 43 14 2B 6.21
Другое Encapsulated Interface Transport 43 13, 14 2B 6.19

[6. Описания кодов функции]

6.1. 01 (0x01) Read Coils

Этот код функции используется для чтения от 1 до 2000 смежных состояний обмоток в сетевом устройстве. Запрос PDU задает начальный адрес, т. е. адрес первой обмотки, и количество обмоток. В PDU обмотки адресуются от нуля. Таким образом, обмотки с номерами 1 .. 16 адресуются как 0 .. 15.

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

Если возвращаемое количество выходов не делится нацело на 8, то оставшиеся биты последнего байта данных будут дополнены нулями (в направлении к старшим битам, до конца байта). Поле количества байт (Byte Count) указывает количество полных байт данных.

Запрос:

Код функции 1 байт 0x01
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество выходов (coils) 2 байта 1 .. 2000 (0x0000 .. 0x07D0)

Ответ:

Код функции 1 байт 0x01
Количество байт 1 байт N*
Статус обмоток n байт n = N или N+1

Примечание *: N = количество выходов / 8, и если остаток не равен 0, то N = N+1.

Ошибка:

Код функции 1 байт Оригинальный код функции + 0x80
Код исключения (exception code) 1 байт Один из кодов от 01 до 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 01 Функция 01
Старший байт адреса 00 Количество байт 03
Младший байт адреса 13 Статус выходов 27..20 CD
Старший байт количества выходов 00 Статус выходов 35..28 6B
Младший байт количества выходов 13 Статус выходов 38..36 05

Статус выходов 27 .. 20 показан как значение байта 0xCD (hex), или бинарное значение 11001101. Выход 27 находится в MSB этого байта, и выход 20 в LSB.

По принятому соглашению биты в байте показаны с MSB слева, а LSB справа. Таким образом, выходы в первом байте от 27 до 20, слева направо. Следующий байт данных содержит выходы от 35 до 28, слева направо. Поскольку биты передаются последовательно, то их поток передает биты от LSB до MSB: 20, …, 27, 28, …, 35, и так далее.

В последнем байте данных статус выходов 38 .. 36 показан как байт со значением 0x05 (hex), или в двоичном виде 00000101. Выход 38 соответствует шестая позиции бита слева, и выход 36 соответствует LSB в этом байте. 5 оставшихся более старших бит заполнены нулями.

MODBUS Read Coils state diagram fig11

Рис. 11. Диаграмма состояний Read Coils.

6.2. 02 (0x02) Read Discrete Inputs

Этот код функции используется для чтения от 1 до 2000 смежных дискретных входов сетевого устройства. Запрос PDU задает начальный адрес, т. е. адрес первого заданного входа, и количество входов. В PDU Discrete Inputs адресация начинается с 0. Таким образом дискретные входы, пронумерованные 1 .. 16, адресуются как 0 .. 15.

Дискретные входы в сообщении ответа упакованы по одному входу на бит в поле данных. Состояние ON показывается как лог. 1, OFF как лог. 0. LSB первого байта данных содержит вход первый вход, адресованный в запросе. Другие входы помещаются в более старших битах, вплоть до конца байта, и снова начинаются с младших бит следующих байт.

Если возвращаемое количество входов не делится нацело на 8, то оставшиеся биты последнего байта данных будут дополнены нулями (в направлении к старшим битам, до конца байта). Поле количества байт (Byte Count) указывает количество полных байт данных.

Запрос:

Код функции 1 байт 0x02
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество входов 2 байта 1 .. 2000 (0x0001 .. 0x07D0)

Ответ:

Код функции 1 байт 0x02
Количество байт 1 байт N*
Статус входов N* байт  

Примечание *: N = Количество входов / 8, и если остаток отличается от 0, то N = N+1.

Ошибка:

Код функции 1 байт 0x82
Код исключения (exception code) 1 байт Один из кодов от 01 до 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 02 Функция 02
Старший байт адреса 00 Количество байт 03
Младший байт адреса C4 Статус входов 204..197 AC
Старший байт количества входов 00 Статус входов 212..205 DB
Младший байт количества входов 16 Статус входов 218..213 35

Статус дискретных входов 204 .. 197 показан как байт со значением 0xAC (hex), или двоичное значение 10101100. Вход 204 соответствует MSB в этом байте, а 197 соответствует LSB.

Статус дискретных входов 218 .. 213 показан как байт со значением 0x35 (hex), или двоичное значение 00110101. Вход 218 соответствует третьей позиции бита слева и вход 213 соответствует LSB. Оставшиеся не используемые биты второго байта заполнены нулями.

MODBUS Read Discrete Inputs state diagram fig12

Рис. 12. Диаграмма состояний чтения входов (Read Discrete Inputs).

6.3. 03 (0x03) Read Holding Registers

Этот код функции используется для чтения содержимого блока смежных регистров временного хранения информации (holding registers) в сетевом устройстве. Запрос PDU задает начальный адрес регистра и количество регистров. В PDU регистры адресуются начиная с нуля. Таким образом, регистры с номерами 1 .. 16 адресуются как 0 .. 15.

Данные регистров в сообщении ответа упакованы как 2 байта на регистр, с двоичным содержанием, выравненным вправо в каждом байте. Для каждого регистра первый байт содержит старшие биты, и второй байт содержит младшие биты регистра.

Запрос:

Код функции 1 байт 0x03
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество регистров 2 байта 1 .. 125 (0x0001 .. 0x007D)

Ответ:

Код функции 1 байт 0x03
Количество байт 1 байт 2 x N*
Значение регистров N* x 2 байт  

Примечание *: N = количество регистров.

Ошибка:

Код функции 1 байт 0x83
Код исключения (exception code) 1 байт Один из кодов от 01 до 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 03 Функция 03
Старший байт адреса 00 Количество байт 06
Младший байт адреса 6B Старший байт значения регистра 108 02
Старший байт количества регистров 00 Младший байт значения регистра 108 2B
Младший байт количества регистров 03 Старший байт значения регистра 109 00
    Младший байт значения регистра 109 00
    Старший байт значения регистра 110 00
    Младший байт значения регистра 110 64

Содержимое регистра 108 показано как 2 байта 0x02 0x2B (hex), или 555 в десятичном значении. Содержимое регистров 109 .. 110 показано соответственно как 0x00 0x00 и 0x00 0x64 (hex), или 0 и 100 в десятичном значении.

MODBUS Read Holding Registers state diagram fig13

Рис. 13. Диаграмма состояний чтения регистров (Read Holding Registers).

6.4. 04 (0x04) Read Input Registers

Этот код функции используется для чтения 1 .. 125 смежных входных регистров сетевого устройства. Запрос PDU задает начальный адрес регистра и количество регистров. В PDU регистры адресуются начиная с нуля. Таким образом регистры, пронумерованные 1 .. 16 адресуются как 0 .. 15.

Данные регистров в сообщении ответа упакованы как 2 байта на регистр, с двоичным содержанием, выравненным вправо в каждом байте. Для каждого регистра первый байт содержит старшие биты, и второй байт содержит младшие биты регистра.

Запрос:

Код функции 1 байт 0x04
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество входных регистров 2 байта 1 .. 125 (0x0001 .. 0x007D)

Ответ:

Код функции 1 байт 0x04
Количество байт 1 байт 2 x N*
Входные регистры N* x 2 байт  

Примечание *: N = количество входных регистров.

Ошибка:

Код функции 1 байт 0x84
Код исключения (exception code) 1 байт Один из кодов от 01 до 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 04 Функция 04
Старший байт адреса 00 Количество байт 02
Младший байт адреса 08 Старший байт значения регистра 9 00
Старший байт количества регистров 00 Младший байт значения регистра 9 0A
Младший байт количества регистров 01    

Содержимое регистра 9 показано как 2 байта 0x00 0x0A (hex), или 10 в десятичном значении.

MODBUS Read Input Registers state diagram fig14

Рис. 14. Диаграмма состояний чтения входных регистров (Read Input Registers).

6.5. 05 (0x05) Write Single Coil

Этот код функции используется для записи одного выхода сетевого устройства в состояние ON или OFF. Запрошенное состояние ON/OFF задается константой в поле данных запроса. Значение запроса 0xFF 0x00 (hex) задает состояние ON выхода, а значение 0x00 0x00 задает OFF. Все другие значения недопустимы, и не влияют на выход.

Запрос PDU задает адрес обмотки, которая управляется. Обмотки адресуются начиная с нуля. Таким образом, обмотка с номером 1 адресуется как 0. Запрашиваемое состояние ON/OFF задается константой в поле Coil Value. Значение 0XFF00 соответствует ON, значение 0X0000 соответствует OFF. Все другие значения недопустимы, и не повлияют на состояние обмотки.

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

Запрос:

Код функции 1 байт 0x05
Адрес выхода 2 байта 0x0000 .. 0xFFFF
Значение выхода 2 байта 0 или 65280 (0x0000 или 0xFF00)

Ответ:

Код функции 1 байт 0x05
Адрес выхода 2 байта 0x0000 .. 0xFFFF
Значение выхода 2 байта 0 или 65280 (0x0000 или 0xFF00)

Ошибка:

Код функции 1 байт 0x85
Код исключения (exception code) 1 байт Один из кодов от 01 до 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 05 Функция 05
Старший байт адреса 00 Старший байт адреса 00
Младший байт адреса AC Младший байт адреса AC
Старший байт значения выхода FF Старший байт значения выхода FF
Младший байт значения выхода 00 Младший байт значения выхода 00

MODBUS Write Single Output state diagram fig15

Рис. 15. Диаграмма состояний записи одного выхода.

6.6. 06 (0x06) Write Single Register

Этот код функции используется для записи одного регистра временного хранения в сетевом устройстве. Запрос PDU задает адрес записываемого регистра. Регистры адресуются начиная с 0. Таким образом регистр номер 1 адресуется как 0.

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

Запрос:

Код функции 1 байт 0x06
Адрес регистра 2 байта 0x0000 .. 0xFFFF
Значение регистра 2 байта 0x0000 .. 0xFFFF

Ответ:

Код функции 1 байт 0x06
Адрес регистра 2 байта 0x0000 .. 0xFFFF
Значение регистра 2 байта 0x0000 .. 0xFFFF

Ошибка:

Код функции 1 байт 0x86
Код исключения (exception code) 1 байт Один из кодов от 01 до 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 06 Функция 06
Старший байт адреса 00 Старший байт адреса 00
Младший байт адреса 01 Младший байт адреса 01
Старший байт значения регистра 00 Старший байт значения регистра 00
Младший байт значения регистра 03 Младший байт значения регистра 03

MODBUS Write Single Register state diagram fig16

Рис. 16. Диаграмма состояний записи одного регистра.

6.7. 07 (0x07) Read Exception Status (только для последовательной линии)

Этот код функции используется для чтения восьми выходов состояния исключения (Exception Status) сетевого устройства.

Функция предоставляет простой метод доступа к этой информации, потому что ссылка на Exception Output известна (не нужно в функции задавать ссылку на выход).

Нормальный ответ содержит статус восьми выходов Exception Status. Выходы упакованы в один байт данных, по одному биту на выход. Статус младшего выход соответствует LSB байта.

Содержимое восьми выходов Exception Status специфично для устройства.

Запрос:

Ответ:

Код функции 1 байт 0x07
Выходные данные 1 байт 0x00 .. 0xFF

Ошибка:

Код функции 1 байт 0x87
Код исключения (exception code) 1 байт 01 или 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 07 Функция 07
  00 Выходные данные 6D

В этом примере выходные данные 0x6D (hex), или в двоичном виде 01101101. Слева направо состояние выходов OFF–ON–ON–OFF–ON–ON–OFF–ON. Показано состояние от старшего до младшего адресованного выхода.

MODBUS Read Exception Status state diagram fig17

Рис. 17. Диаграмма состояний Read Exception Status.

6.8. 08 (0x08) Diagnostics (только для последовательной линии)

Код функции 08 предоставляет серии текстов для проверки системы коммуникации между устройством клиента (Master, главное устройство) и устройством сервера (Slave, подчиненное устройство), или для проверки различных внутренних состояний ошибки сервера.

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

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

Однако устройство сервера может быть переведено в режим «только прослушивание» (Listen Only Mode), в котором оно будет мониторить сообщения системы коммуникации, но не будет отвечать на них. Это может повлиять на результат работы прикладной программы, если это зависит от дальнейшего обмена данными с удаленным устройством. Как правило, этот режим принудительно удаляет неисправное удаленное устройство из системы связи (чтобы оно не мешало обмену данными с другими устройствами).

Для устройств последовательной линии определены следующие диагностические функции. Нормальный ответ на запрос Return Query Data возвращаются те же самые данные. Также эхом отправляются код функции и код субфункции.

Запрос:

Код функции 1 байт 0x08
Код субфункции 2 байта  
Данные N x байт  

Ответ:

Код функции 1 байт 0x08
Код субфункции 2 байта  
Данные N x байт  

Ошибка:

Код функции 1 байт 0x88
Код исключения (exception code) 1 байт 01, 03 или 04

В таблице ниже приведен список кодов субфункций, поддерживаемые устройствами последовательной линии. Затем каждый код субфункции приводится с примером содержимого поля данных, которое применимо для этой диагностики.

Код субфункции
Назначение
HEX DEC
00 00 Return Query Data (возврат запрошенных данных)
01 01 Restart Communications Option (перезапуск обмена данными)
02 02 Return Diagnostic Register (возврат регистра диагностики)
03 03 Change ASCII Input Delimiter (поменять ASCII-разделитель сообщений)
04 04 Force Listen Only Mode (перевести в неактивный режим коммуникаций, только прослушивание линии)
05 .. 09 Зарезервировано
0A 10 Clear Counters and Diagnostic Register (очистка счетчиков и регистра диагностики)
0B 11 Return Bus Message Count (возврат счетчика сообщений на шине)
0C 12 Return Bus Communication Error Count (возврат счетчика ошибок обмена данными)
0D 13 Return Bus Exception Error Count (возврат счетчика исключений шины)
0E 14 Return Slave Message Count (возврат количества сообщений подчиненного устройства)
0F 15 Return Slave No Response Count (возврат счетчика запросов, на которые не было ответа)
10 16 Return Slave NAK Count (возврат количества отрицательных подтверждений)
11 17 Return Slave Busy Count (возврат количества сообщений занятости подчиненного устройства)
12 18 Return Bus Character Overrun Count (возврат количества символьных переполнений)
13 19 Зарезервировано
14 20 Clear Overrun Counter and Flag (очистка счетчика количества символьных переполнений и флага)
  21 .. 65535 Зарезервировано

00 Return Query Data

Данные, переданные в поле данных запроса, возвращаются обратно в ответе. Все сообщение ответа должно быть идентично запросу.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 00 Любые данные Те же самые данные, что были в поле данных запроса

01 Restart Communications Option

Порт последовательной линии дальнего сетевого устройства должен быть инициализирован и перезапущен, и все коммуникационные счетчики событий очищены. Если порт в настоящее время находится в режиме «только прослушивание» (Listen Only Mode), то не этот субкод не последует ответа. Эта функция является единственной, которая выводит порт из режима «только прослушивание». Если порт находится не в режиме Listen Only, то последует нормальный ответ. Этот ответ будет отправлен перед рестартом последовательного порта.

Когда дальнее сетевое устройство приняло этот запрос, оно пытается перезапуститься и выполняет тесты проверки надежности рабочей среды при включении питания. Успешное завершение тестов переведет порт в рабочее состояние (online).

Если в поле данных запроса содержится 0xFF 0x00 (hex), то это приведет также к очистке лога событий обмена (Communications Event Log). Если в поле данных запроса 0x00 0x00, то содержимое лога останется неизменным, какое было до рестарта.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 01 00 00 Те же самые данные, что были в поле данных запроса
00 01 FF 00 Те же самые данные, что были в поле данных запроса

02 Return Diagnostic Register

В ответе будет возвращено содержимое 16–битного регистра диагностики дальнего сетевого устройства.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 02 00 00 Содержимое Diagnostic Register

03 Change ASCII Input Delimiter

Символ CHAR, переданный в поле данных запроса, становится маркером конца входного сообщения (разделителем сообщений) для всех будущих сообщений (заменяя этим символом символ LF по умолчанию). Эта функция полезна в случаях, когда LF (Line Feed, перевод строки 0x0A) не требуется в качестве маркера окончания сообщений ASCII.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 03 CHAR 00 Те же самые данные, что были в поле данных запроса

04 Force Listen Only Mode

Принудительно переводит адресованное сетевое устройство в режим «только прослушивание» (Listen Only Mode) для коммуникаций MODBUS. Это изолирует устройство от других устройств в сети, позволяя им продолжать связь без прерывания связи из-за активности адресованного сетевого устройства. На этот субкод запроса не последует ответа.

Когда сетевое устройство переходит в режим Listen Only, выключаться все его активные блоки, управляющие обменом данными. Сторожевому таймеру готовности (Ready Watchdog) разрешено считать до таймаута, блокируя управление. Когда устройство находится в этом режиме, будут мониториться любые сообщения MODBUS, адресованные ему, а также широковещательные сообщения, однако никаких ответных действий предприниматься не будет, и ответ также посылаться не будет.

Единственная функция, которая будет обработана и выполнена после входа в этот режим — Restart Communications Option (код функции 8, код субфункции 1).

Субфункция Поле данных (запрос) Поле данных (ответ)
00 04 00 00 Нет никакого ответа

10 (0A Hex) Clear Counters and Diagnostic Register

Цель этой субфункции — очистить все счетчики и регистр диагностики. Счетчики также очищаются при включении питания.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 0A 00 00 Те же самые данные, что были в поле данных запроса

11 (0B Hex) Return Bus Message Count

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

Субфункция Поле данных (запрос) Поле данных (ответ)
00 0B 00 00 Значение счетчика общего количества сообщений

12 (0C Hex) Return Bus Communication Error Count

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

Субфункция Поле данных (запрос) Поле данных (ответ)
00 0C 00 00 Счетчик ошибок CRC

13 (0D Hex) Return Bus Exception Error Count

Поле данных ответа возвратит количество ответов исключений (MODBUS exception response), которые были возвращены с момента его последнего рестарта, включения питания или операции по очистке счетчиков. Ответы исключения описаны и перечислены в секции 7.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 0D 00 00 Счетчик ошибок исключений

14 (0E Hex) Return Slave Message Count

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

Субфункция Поле данных (запрос) Поле данных (ответ)
00 0E 00 00 Счетчик сообщений, обработанных подчиненным устройством (Slave Message Count)

15 (0F Hex) Return Slave No Response Count

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

Субфункция Поле данных (запрос) Поле данных (ответ)
00 0F 00 00 Счетчик сообщений, на которые подчиненное устройством не выдало ответ (Slave No Response Count)

16 (10 Hex) Return Slave NAK Count

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

Субфункция Поле данных (запрос) Поле данных (ответ)
00 10 00 00 Счетчик отрицательных подтверждений

17 (11 Hex) Return Slave Busy Count

Поле данных ответа возвратит количество сообщений, адресованных этому сетевому устройству, на которые оно выдало ответ исключения занятости (Slave Device Busy) с момента его последнего рестарта, включения питания или операции по очистке счетчиков.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 11 00 00 Счетчик сообщений о занятости подчиненного устройства

18 (12 Hex) Return Bus Character Overrun Count

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

Субфункция Поле данных (запрос) Поле данных (ответ)
00 12 00 00 Счетчик символьных переполнений

20 (14 Hex) Clear Overrun Counter and Flag

Очищает счетчик ошибок переполнений и сбрасывает флаг ошибки.

Субфункция Поле данных (запрос) Поле данных (ответ)
00 14 00 00 Те же самые данные, что были в поле данных запроса

Здесь приведен пример запроса Return Query Data сетевому устройству. Запрос использует нулевой код субфункции, 0x00 0x00 (hex) в двухбайтном поле. Данные для возврата отправляются в двухбайтном поле данных: 0xA5 0x37 (hex).

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 08 Функция 08
Старший байт кода субфункции 00 Старший байт кода субфункции 00
Младший байт кода субфункции 00 Младший байт кода субфункции 00
Старший байт данных A5 Старший байт данных A5
Младший байт данных 37 Младший байт данных 37

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

MODBUS Diagnostic state diagram fig18

Рис. 18. Диаграмма состояний диагностики.

{/spoiler}

6.9. 11 (0x0B) Get Comm Event Counter (только для последовательной линии)

Этот код функции используется для получения слова статуса и счетчика событий коммуникаций (communication event counter) от сетевого устройства.

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

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

Счетчик событий может быть сброшен функцией диагностики (код функции 08), у которой код субфункции Restart Communications (код субфункции 00 01) или код субфункции Clear Counters and Diagnostic Register (код субфункции 00 0A).

Нормальный ответ содержит двухбайтное слово статуса и двухбайтный счетчик событий. Слово статуса будет всеми единичками FF FF (hex), если сетевым устройством все еще выполняется ранее выданная команда программы (состояние занятости). Иначе в слове статуса будут все нули.

Запрос:

Ответ:

Код функции 1 байт 0x0B
Статус 2 байта 0x0000 .. 0xFFFF 
Счетчик событий 2 байта 0x0000 .. 0xFFFF

Ошибка:

Код функции 1 байт 0x8B
Код исключения (exception code) 1 байт 01 или 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 0B Функция 0B
    Старший байт статуса FF
    Младший байт статуса FF
    Старший байт счетчика событий 01
    Младший байт счетчика событий 08

В этом примере слово состояния 0xFF 0xFF (hex), что показывает выполняющуюся обработку в программе сетевого устройства. Счетчик событий показывает, что сетевым устройством было принято и подсчитано 264 (01 08 hex) события.

MODBUS Get Comm Event Counter state diagram fig19

Рис. 19. Диаграмма состояний Get Comm Event Counter.

6.10. 12 (0x0C) Get Comm Event Log (только для последовательной линии)

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

Слово статуса и счетчик событий идентичны тем, что возвращаются функцией Get Communications Event Counter function (11 0B hex).

Счетчик событий содержит количество сообщений, обработанных сетевым устройством с момента последнего рестарта. Этот счетчик идентичен тому, который возвращается функцией диагностики (код 08), субфункцией Return Bus Message Count (код 11, 0B hex).

Поле байт события содержит 0 .. 64 байт, где каждый байт соответствует статусу одной операции передачи или приема MODBUS сетевого устройства. Сетевое устройство вводит события в поле в хронологическом порядке. Байт 0 это самое свежее событие. Каждый новый байт выбрасывает самый старый байт из поля.

Нормальный ответ содержит двухбайтное поле слова статуса, двухбайтное поле счетчика событий и поле, содержащее 0 .. 64 байта событий. Поле количества байт содержит общую длину данных в этих четырех полях.

Запрос:

Ответ:

Код функции 1 байт 0x0C
Количество байт 1 байт N*
Статус 2 байта 0x0000 .. 0xFFFF
Счетчик событий 2 байта 0x0000 .. 0xFFFF
Счетчик сообщений 2 байта 0x0000 .. 0xFFFF
События (N-6) байт  

Примечание *: N = количество событий + 3 x 2 байт, (длина статуса, счетчик событий и счетчик сообщений).

Ошибка:

Код функции 1 байт 0x8C
Код исключения (exception code) 1 байт 01 или 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 0C Функция 0C
    Количество байт 08
    Старший байт статуса 00
    Младший байт статуса 00
    Старший байт счетчика событий 01
    Младший байт счетчика событий 08
    Старший байт счетчика сообщений 01
    Младший байт счетчика сообщений 21
    Событие 0 20
    Событие 1 00

В этом примере слово статуса 00 00 (hex), которое показывает, что сетевое устройство не занято обработкой функции программы. Счетчик событий показывает 264 (01 08 hex) события, которые подсчитало сетевое устройство. Счетчик событий показывает, что 289 (01 21 hex) сообщений было обработано.

Самое свежее событие коммуникации показано в байте Event 0. Его содержимое (20 hex) показывает, что сетевое устройство только что вошло в режим Listen Only.

Предыдущее событие показано байтом Event 1. Его содержимое (00 hex) показывает, что сетевое устройство приняло Communications Restart.

Ниже дано описание содержимого байт события.

Что содержат байты события (Event Bytes). Байт события, возвращенный функцией Get Communications Event Log, может быть любым из четырех типов. Тип определяется битом 7 (старшим битом) в каждом байте. Тип может быть далее уточнен битом 6. Как это происходит, показано дальше.

• Remote device MODBUS Receive Event

Сетевое устройство сохраняет этот тип события, когда принято сообщение запроса. Сохранение происходит до того, как сетевое устройство обработает сообщение. Это событие определяется битом 7, установленным в лог. 1. Другие биты будут установлены в лог. 1, если соответствующее условие TRUE. Назначение разрядов бит:

Бит Содержимое
0 Не используется
1 Ошибка обмена
2 Не используется
3 Не используется
4 Символьное переполнение (Character Overrun)
5 В настоящий момент действует режим Listen Only
6 Принято широковещательное сообщение (Broadcast)
7 1

• Remote device MODBUS Send Event

Сетевое устройство сохраняет этот тип события, когда оно завершило обработку сообщения запроса. Сохранение происходит, если устройство возвратило нормальный ответ или ответ исключения, или не ответило. Это событие определено битом 7, установленным в лог. 0 и с битом 6, установленным в лог. 1. Другие биты будут установлены в лог. 1, когда соответствующее условие TRUE. Назначение разрядов бит:

Бит Содержимое
0 Read Exception Sent (отправлено исключение чтения, коды исключений 1 .. 3)
1 Slave Abort Exception Sent (отправлено исключение обрыва связи подчиненного устройства, код исключения 4)
2 Slave Busy Exception Sent (отправлено исключение занятости, коды исключений 5 и 6)
3 Slave Program NAK Exception Sent (отправлено исключение отрицательного подтверждения, код исключения 7)
4 Write Timeout Error Occurred (произошла ошибка таймаута)
5 В настоящий момент действует режим Listen Only
6 1
7 0

• Remote device Entered Listen Only Mode

Сетевое устройство сохраняет этот тип события, когда оно входит в режим Listen Only. Это событие определено содержимым 0x04 (hex).

• Remote device Initiated Communication Restart

Сетевое устройство сохраняет этот байт типа события, когда коммуникационный порт перезапущен. Сетевое устройство может быть перезапущено функцией диагностики (код 08), субфункцией Restart Communications Option (код субфункции 00 01 hex).

Эта функция также поместит сетевое устройство в режим продолжения работы при ошибке (Continue on Error) или режим остановки работы при ошибке (Stop on Error). Если сетевое устройство переводится в режим «Continue on Error», то байт события добавляется в существующий лог событий. Если сетевое устройство переводится в режим «Stop on Error», то байт добавляется к логу, и остальная часть лога очищается записью нулей.

Событие определено нулевым байтом лога.

MODBUS Get Comm Event Log state diagram fig20

Рис. 20. Диаграмма состояний Get Comm Event Log.

6.11. 15 (0x0F) Write Multiple Coils

Этот код функции используется в сетевом устройстве для переключения его каждой обмотки в последовательности либо в состояние ON, либо в состояние OFF. Запрос PDU задает обмотки, которые управляются. Обмотки адресуются начиная с 0. Таким образом, обмотка номер 1 адресуется как 0.

Запрашиваемые состояния ON/OFF задаются содержимым поля данных. Лог. 1 в позиции бита запрашивает перевод соответствующего выхода в состояние ON. Лог. 0 запрашивает перевод выхода в состояние OFF.

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

Запрос:

Код функции 1 байт 0x0F
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество выходов 2 байта 1 .. 1968 (0x0001 .. 0x07B0)
Количество байт 1 байт N*
Значение выхода N байт  

Примечание *: N = Количество выходов / 8, если остаток отличается от 0, то N = N+1.

Ответ:

Код функции 1 байт 0x0C
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество выходов 2 байта 1 .. 1968 (0x0001 .. 0x07B0)

Ошибка:

Код функции 1 байт 0x8F
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04

Содержимое данных в запросе представлено двумя байтами 0xCD 0x01 (hex), в двоичном виде 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 

Первый передаваемый байт (0xCD hex) адресует выходы 27 .. 20, где LSB адресует самый младший управляемый выход (20).

Следующий передаваемый байт (01 hex) адресует выходы 29 и 28, где LSB адресует выход (28) в этой последовательности. Не используемые биты (их выходы обозначены черточками) должны быть обнулены.

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 0F Функция 0F
Старший байт начального адреса 00 Старший байт начального адреса 00
Младший байт начального адреса 13 Младший байт начального адреса 13
Старший байт количества выходов 00 Старший байт количества выходов 00
Младший байт количества выходов 0A Младший байт количества выходов 0A
Количество байт 02    
Старший байт значения выходов CD    
Младший байт значения выходов 01    

MODBUS Write Multiple Outputs state diagram fig21

Рис. 21. Диаграмма состояний Write Multiple Outputs.

6.12. 16 (0x10) Write Multiple registers

Этот код функции используется для записи блока смежных регистров (1 .. 123 регистров) в сетевом устройстве.

Запрашиваемые записываемые значения задаются полем данных запроса. Данные упакованы как 2 байта на регистр.

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

Запрос:

Код функции 1 байт 0x10
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество регистров 2 байта 1 .. 123 (0x0001 .. 0x007B)
Количество байт 1 байт 2 x N*
Значения регистров N x 2 байт  

Примечание *: N = количество регистров.

Ответ:

Код функции 1 байт 0x10
Начальный адрес 2 байта 0x0000 .. 0xFFFF
Количество регистров 2 байта 1 .. 123 (0x0001 .. 0x007B)

Ошибка:

Код функции 1 байт 0x90
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04
Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 10 Функция 10
Старший байт начального адреса 00 Старший байт начального адреса 00
Младший байт начального адреса 01 Младший байт начального адреса 01
Старший байт количества регистров 00 Старший байт количества регистров 00
Младший байт количества регистров 02 Младший байт количества регистров 02
Количество байт 04    
Старший байт значения регистра 00    
Младший байт значения регистра 0A    
Старший байт значения регистра 01    
Младший байт значения регистра 02    

MODBUS Write Multiple Registers state diagram fig22

Рис. 22. Диаграмма состояний Write Multiple Registers.

6.13. 17 (0x11) Report Slave ID (только для последовательной линии)

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

Запрос:

Ответ:

Код функции 1 байт 0x10
Количество байт 1 байт Зависит от устройства
Slave ID Зависит от устройства
Run Indicator Status (индикатор активности устройства) 1 байт 0x00 OFF, 0xFF ON
Дополнительные данные Зависит от устройства

Ошибка:

Код функции 1 байт 0x91
Код исключения (exception code) 1 байт 01 или 04

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

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 11 Функция 11
    Количество байт Зависит от устройства
    Slave ID Зависит от устройства
    Run Indicator Status 0x00 или 0xFF
    Дополнительные данные Зависит от устройства

MODBUS Report slave ID state diagram fig23

Рис. 23. Диаграмма состояний Report slave ID.

6.14. 20 (0x14) Read File Record

Этот код функции используется для чтения из файла. Все запросы длин данных (Request Data Lengths) предоставляются в единицах байт, и все запросы длин записей (Record Lengths) предоставляются в единицах регистров.

Файл это организация записей. Каждый файл содержит 10000 записей, адресованных десятичными значениями от 0000 до 9999 или HEX-значениями от 0x0000 до 0x270F. Например, запись 12 адресуется как 12.

Функция может прочитать несколько групп ссылок. Группы могут быть разделены (быть не смежными), однако элементы в каждой группе должны быть последовательными.

Каждая группа определяется отдельным полем субзапроса, которое содержит 7 байт:

Тип запроса: 1 байт (должен быть указан как 6)
Номер файла: 2 байта
Начальный номер записи в файле: 2 байта
Длина записи для чтения: 2 байта.

Количество регистров для чтения, в комбинации со всеми другими полями в ожидаемом ответе, не должно превышать допустимой длины MODBUS PDU: 253 байта.

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

Запрос:

Код функции 1 байт 0x14
Количество байт 1 байт 7 .. 245 (0x07 .. 0xF5)
Sub-Req. x, Reference Type 1 байт 06
Sub-Req. x, File Number 2 байта 0x0001 .. 0xFFFF
Sub-Req. x, Record Number 2 байта 0 .. 9999 (0x0000 .. 0x270F)
Sub-Req. x, Record Length 2 байта N
Sub-Req. x+1, …    

Ответ:

Код функции 1 байт 0x14
Длина данных ответа 1 байт 7 .. 245 (0x07 .. 0xF5)
Sub-Req. x, длина файла в ответе 1 байт 7 .. 245 (0x07 .. 0xF5)
Sub-Req. x, Reference Type 1 байт 6
Sub-Req. x, Record Data N x 2 байт  
Sub-Req. x+1, …    

Ошибка:

Код функции 1 байт 0x94
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04 или 08

Примечание: хотя допускается задавать номер файла в диапазоне 1 .. 0xFFFF, следует заметить, что что совместимость с устаревшим оборудованием может быть нарушена, если номер файла превышает 10 (0x0A).

• Группа 1 состоит из двух регистров из файла 4, начиная с регистра 1 (адрес 0001).
• Группа 2 состоит из двух регистров из файла 2, начиная с регистра 9 (адрес 0009).

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 14 Функция 14
Количество байт 0E Длина данных ответа 0C
Sub-Req. 1, Ref. Type 06 Sub-Req. 1, длина ответа файла 05
Sub-Req. 1, старший байт номера файла 00 Sub-Req. 1, Ref. Type 06
Sub-Req. 1, младший байт номера файла 04 Sub-Req. 1, старший байт данных регистра 0D
Sub-Req. 1, старший байт номера элемента файла 00 Sub-Req. 1, младший байт данных регистра FE
Sub-Req. 1, младший байт номера элемента файла 01 Sub-Req. 1, старший байт данных регистра 00
Sub-Req. 1, старший байт длины элемента файла 00 Sub-Req. 1, младший байт данных регистра 20
Sub-Req. 1, младший байт длины элемента файла 02 Sub-Req. 2, длина ответа файла 05
Sub-Req. 2, Ref. Type 06 Sub-Req. 2, Ref. Type 06
Sub-Req. 2, старший байт номера файла 00 Sub-Req. 2, старший байт данных регистра 33
Sub-Req. 2, младший байт номера файла 03 Sub-Req. 2, младший байт данных регистра CD
Sub-Req. 2, старший байт номера элемента файла 00 Sub-Req. 2, старший байт данных регистра 00
Sub-Req. 2, младший байт номера элемента файла 09 Sub-Req. 2, младший байт данных регистра 40
Sub-Req. 2, старший байт длины элемента файла 00    
Sub-Req. 2, младший байт длины элемента файла 02    

MODBUS Read File Record state diagram fig24

Рис. 24. Диаграмма состояний Read File Record.

6.15. 21 (0x15) Write File Record

Этот код функции используется для выполнения записи в файл. Все длины данных запроса (Request Data Lengths) предоставляются в байтах, и все длины записей (Record Lengths) в единицах 16-битных слов.

Файл это организация записей. Каждый файл содержит 10000 записей, адресованных десятичными значениями от 0000 до 9999 или HEX-значениями от 0X0000 до 0X270F. Например, запись 12 адресуется как 12.

Функция может записать несколько групп ссылок. Группы могут быть разделены (быть не смежными), однако элементы в каждой группе должны быть последовательными.

Каждая группа определена в отдельном поле субзапроса, в котором 7 байт плюс данные:

Тип запроса: 1 байт (должен быть указан как 6).
Номер файла: 2 байта.
Начальный номер записи в файле: 2 байта.
Длина для записи: 2 байта.
Записываемые данные: по 2 байта на регистр.

Количество регистров для записи, в комбинации со всеми другими полями в ожидаемом ответе, не должно превышать допустимой длины MODBUS PDU: 253 байта.

Нормальный ответ будет эхом (копией) запроса.

Запрос:

Код функции 1 байт 0x15
Длина данных запроса 1 байт 9 .. 251 (0x09 .. 0xFB)
Sub-Req. x, Reference Type 1 байт 06
Sub-Req. x, File Number 2 байта 0x0001 .. 0xFFFF
Sub-Req. x, Record Number 2 байта 0 .. 9999 (0x0000 .. 0x270F)
Sub-Req. x, Record Length 2 байта N
Sub-Req. x, Record data N x 2 байт  
Sub-Req. x+1, …    

Ответ:

Код функции 1 байт 0x15
Длина данных запроса 1 байт 9 .. 251 (0x09 .. 0xFB)
Sub-Req. x, Reference Type 1 байт 06
Sub-Req. x, File Number 2 байта 0x0001 .. 0xFFFF
Sub-Req. x, Record Number 2 байта 0 .. 9999 (0x0000 .. 0x270F)
Sub-Req. x, Record Length 2 байта N
Sub-Req. x, Record data N x 2 байт  
Sub-Req. x+1, …    

Ошибка:

Код функции 1 байт 0x95
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04 или 08

Примечание: хотя допускается задавать номер файла в диапазоне 1 .. 0xFFFF, следует заметить, что что совместимость с устаревшим оборудованием может быть нарушена, если номер файла превышает 10 (0x0A).

Группа состоит из трех регистров в файле 4, начиная с регистра 7 (адрес 0007).

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 15 Функция 15
Длина данных запроса 0D Длина данных запроса 0D
Sub-Req. 1, Ref. Type 06 Sub-Req. 1, Ref. Type 06
Sub-Req. 1, старший байт номера файла 00 Sub-Req. 1, старший байт номера файла 00
Sub-Req. 1, младший байт номера файла 04 Sub-Req. 1, младший байт номера файла 04
Sub-Req. 1, старший байт номера элемента файла 00 Sub-Req. 1, старший байт номера элемента файла 00
Sub-Req. 1, младший байт номера элемента файла 07 Sub-Req. 1, младший байт номера элемента файла 07
Sub-Req. 1, старший байт длины элемента файла 00 Sub-Req. 1, старший байт длины элемента файла 00
Sub-Req. 1, младший байт длины элемента файла 03 Sub-Req. 1, младший байт длины элемента файла 03
Sub-Req. 1, старший байт данных регистра 06 Sub-Req. 1, старший байт данных регистра 06
Sub-Req. 1, младший байт данных регистра AF Sub-Req. 1, младший байт данных регистра AF
Sub-Req. 1, старший байт данных регистра 04 Sub-Req. 1, старший байт данных регистра 04
Sub-Req. 1, младший байт данных регистра BE Sub-Req. 1, младший байт данных регистра BE
Sub-Req. 1, старший байт данных регистра 10 Sub-Req. 1, старший байт данных регистра 10 
Sub-Req. 1, младший байт данных регистра 0D Sub-Req. 1, младший байт данных регистра 0D

MODBUS Write File Record state diagram fig25

Рис. 25. Диаграмма состояний Write File Record.

6.16. 22 (0x16) Mask Write Register

Этот код функции используются для модификации содержимого регистра временного хранения (holding register), используя комбинацию маски И (AND), маски ИЛИ (OR) и текущего содержимого регистра. Эта функция может использоваться для установки или очистки отельных бит в регистре.

Запрос задает временный регистр хранения, который будет записываться, данные для маски AND и данные для маски OR. Регистры адресуются начиная с 0. Таким образом, регистры 1 .. 16 адресуются как 0 .. 15.

Алгоритм функции:

Результат = (текущее содержимое & маскаAND) | (маскаOR & (^маскаAND))

Пример:

Компоненты операции HEX BIN
Текущее содержимое регистра 12 00010010
маскаAND F2 11110010
маскаOR 25 00100101
(^маскаAND) 0D 00001101
Результат 17 00010111

Примечание: если значение маскаOR равно 0, то результатом будет простое логическое И текущего содержимого регистра и значения маскаAND. Если значение маскаAND равно 0, то результат будет равен значению маскаOR. Содержимое регистра может быть прочитано функцией Read Holding Registers (код функции 03). Однако регистр (регистры) могут быть изменены впоследствии в результате работы логики программы пользователя.

Нормальный ответ будет эхом (копией) запроса.

Запрос:

Код функции 1 байт 0x16
Адрес регистра 2 байта 0x0000 .. 0xFFFF 
маскаAND 2 байта 0x0000 .. 0xFFFF
маскаOR 2 байта 0x0000 .. 0xFFFF

Ответ:

Код функции 1 байт 0x16
Адрес регистра 2 байта 0x0000 .. 0xFFFF 
маскаAND 2 байта 0x0000 .. 0xFFFF
маскаOR 2 байта 0x0000 .. 0xFFFF

Ошибка:

Код функции 1 байт 0x96
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04

Запись осуществляется в регистр 5 сетевого устройства, используя маски из примера выше:

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 16 Функция 16
Старший байт адреса 00 Старший байт адреса 00
Младший байт адреса 04 Младший байт адреса 04
Старший байт маскаAND 00 Старший байт маскаAND 00
Младший байт маскаAND F2 Младший байт маскаAND F2
Старший байт маскаOR 00 Старший байт маскаOR 00
Младший байт маскаOR 25 Младший байт маскаOR 25

MODBUS Mask Write Holding Register state diagram fig26

Рис. 26. Диаграмма состояний Mask Write Holding Register.

6.17. 23 (0x17) Read/Write Multiple registers

Этот код функции выполняет комбинацию одной операции чтения и одной операции записи в одной транзакции MODBUS. Операция записи выполняется перед операцией чтения.

Регистры временного хранения (holding registers) адресуются начиная с 0. Таким образом, регистры 1 .. 16 адресуются в PDU как 0 .. 15.

Запрос задает как начальный адрес и количество holding-регистров для чтения, так и начальный адрес и количество holding-регистров для чтения. Количество байт задает, сколько байт следует в поле записи данных.

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

Запрос:

Код функции 1 байт 0x17
Начальный адрес чтения 2 байта 0x0000 .. 0xFFFF 
Количество читаемых регистров 2 байта 1 .. 125 (0x0001 .. 0x007D)
Начальный адрес записи 2 байта 0x0000 .. 0xFFFF
Количество записываемых регистров 2 байта 1 .. 121 (0x0001 .. 0X0079)
Количество записываемых байт 1 байт 2 x N*
Значения записываемых регистров N x 2 байт  

Примечание *: N = количество регистров для записи.

Ответ:

Код функции 1 байт 0x17
Количество байт 1 байт 2 x N*
Значения прочитанных регистров N x 2 байт  

Примечание *: N = количество регистров для чтения.

Ошибка:

Код функции 1 байт 0x97
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04

6 регистров считываются начиная с регистра 4, и записываются 3 регистра, начиная с регистра 15:

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 17 Функция 17
Старший байт начального адреса чтения 00 Количество байт 0C
Младший байт начального адреса чтения 03 Старший байт считанного регистра 00
Старший байт количества читаемых регистров 00 Младший байт считанного регистра FE
Младший байт количества читаемых регистров 06 Старший байт считанного регистра 0A
Старший байт начального адреса записи 00 Младший байт считанного регистра CD
Младший байт начального адреса записи 0E Старший байт считанного регистра 00
Старший байт количества записываемых регистров 00 Младший байт считанного регистра 01
Младший байт количества записываемых регистров 03 Старший байт считанного регистра 00
Количество записываемых байт 06 Младший байт считанного регистра 03
Старший байт записываемого регистра 00 Старший байт считанного регистра 00
Младший байт записываемого регистра FF Младший байт считанного регистра 0D
Старший байт записываемого регистра 00 Старший байт считанного регистра 00
Младший байт записываемого регистра FF Младший байт считанного регистра FF
Старший байт записываемого регистра 00    
Младший байт записываемого регистра FF    

MODBUS Read Write Multiple Registers state diagram fig27

Рис. 27. Диаграмма состояния Read/Write Multiple Registers.

6.18. 24 (0x18) Read FIFO Queue

Этот код функции позволяет прочитать содержимое очереди FIFO регистров сетевого устройства. Функция вернет количество регистров в очереди, за которым будут идти данные очереди. Можно прочитать до 32 регистров: количество плюс 31 данных поставленных в очередь регистров. Сначала возвращается количество регистров в очереди, за ним следуют данные регистров в очереди.

Функция считывает содержимое очереди, однако не очищает её.

В нормальном ответе количество байт (Byte Count) показывает, сколько байт будет идти дальше, включая количество байт очереди и значение байт регистра (но не включая поля проверки на ошибку).

FIFO Count это количество регистров данных в очереди (не включая регистра количества).

Если FIFO Count превышает 31, то будет возвращен ответ исключения с кодом ошибки 03 (Illegal Data Value).

Запрос:

Код функции 1 байт 0x18
Адрес указателя FIFO 2 байта 0x0000 .. 0xFFFF 

Ответ:

Код функции 1 байт 0x18
Количество байт 2 байта  
Количество регистров FIFO 2 байта ≤ 31
Значения регистров FIFO N* x 2 байт  

Пример *: N = количеству регистров в FIFO.

Ошибка:

Код функции 1 байт 0x98
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04

Запрос выполнит чтение очереди, начиная с регистра указателя 1246 (0x04DE hex):

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 18 Функция 18
Старший байт указателя адреса FIFO 04 Старший байт количества байт 00
Младший байт указателя адреса FIFO DE Младший байт количества байт 06
    Старший байт количества регистров FIFO 00
    Младший байт количества регистров FIFO 02
    Старший байт значения регистра FIFO 01
    Младший байт значения регистра FIFO B8
    Старший байт значения регистра FIFO 12
    Младший байт значения регистра FIFO 84

В этом примере регистр указателя FIFO (1246) будет возвращен с количеством в очереди 2. За количеством идут два регистра данных очереди:

1247 (содержимое 440 десятичное, или 0x01B8 hex)
1248 (содержимое 4740 десятичное, или 0x1284 hex)

MODBUS Read FIFO Queue state diagram fig28

Рис. 28: Диаграмма состояний Read FIFO Queue.

6.19. 43 (0x2B) Encapsulated Interface Transport

Примечание: в Приложении A находится информация по зарезервированным кодам MODBUS, субкодам и типам MEI.

Код функции 43 и его тип MEI 14 для идентификации устройства это один из двух инкапсулированных транспорта интерфейса (Encapsulated Interface Transport), доступных сейчас в этой спецификации [1]. Следующие коды функций и типы MEI не входят как часть этой публичной спецификации и эти коды функций и типы MEI зарегистрированы специально: 43 / 0 .. 12 и 43 / 15 .. 255.

Транспорт MODBUS Encapsulated Interface (MEI) это механизм туннелирования запросов службы и запуска методов, а также их возвращаемых данных, внутри MODBUS PDU.

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

MODBUS Encapsulated Interface Transport fig29

Рис. 29: Транспорт MEI (MODBUS encapsulated Interface).

Сетевой интерфейс может быть любым коммуникационным стеком, использующимся для отправки MODBUS PDU, как например TCP/IP или последовательная линия связи.

MEI Type (тип MEI) это специально назначенный номер (MODBUS Assigned Number) и поэтому он будет уникальным, значение между 0 и 255 зарезервировано согласно Приложению A, кроме MEI Type 13 и MEI Type 14.

MEI Type используется реализациями транспорта MEI для диспетчеризации вызова метода на показанном интерфейсе.

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

Запрос:

Код функции 1 байт 0x2B
MEI Type 1 байт 0x0D или 0x0E
Специфические данные типа MEI n байт  

Ответ:

Код функции 1 байт 0x2B
MEI Type 1 байт То же самое значение, что было в запросе
Специфические данные типа MEI n байт  

Ошибка:

Код функции 1 байт 0xAB (результат 0x2B + 0x80)
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04

В качестве примера см. запрос Read Device Identification.

6.20. 43 / 13 (0x2B / 0x0D) CANopen General Reference Request and Response PDU

CANopen General reference Command это инкапсуляция служб, которые будут использоваться для доступа (на чтение или запись) элементов словаря объектов CANopen (CANopen Device Object Dictionary), а также для управления и мониторинга системы CANopen и её устройств.

MEI Type 13 (0x0D) это MODBUS Assigned Number, лицензированный CiA для CANopen General Reference.

Система предназначена для работы в пределах ограничений существующих сетей MODBUS. Поэтому информация, необходимая для запроса или изменения объектных словарей CANopen в системе, преобразуется в формат сообщения MODBUS. PDU будет ограничен 253 байтами как в сообщении запроса, так и в сообщении ответа.

На веб-сайте MODBUS-IDA или на веб-сайте CiA (CAN in Automation) можно ознакомиться с копиями и условиями использования, охватывающими код функции 43 MEI Type 13.

6.21 43 / 14 (0x2B / 0x0E) Read Device Identification

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

Интерфейс Read Device Identification смоделирован как адресное пространство, составленное из набора адресуемых элементов данных. Элементы данных называются объектами, и их идентифицирует object Id.

Интерфейс состоит из 3 категорий объектов:

• Basic Device Identification (базовая идентификация устройства). Все объекты в этой категории обязательны: имя производителя (VendorName), код изделия (Product code) и номер ревизии (revision number).
• Regular Device Identification (обычная идентификация устройства). В дополнение к базовым объектам данных, устройство предоставляет дополнительную и опциональную идентификацию и описание объектов данных. Все объекты в этой категории определены в стандарте, но их реализация не является обязательной.
• Extended Device Identification (расширенная идентификация устройства). В дополнение к обычным объектам данных, устройство предоставляет дополнительную и опциональную идентификацию и описание приватных данных о самом физическом устройстве. Все эти данные зависят от конкретного устройства.

Object Id Имя объекта / описание Тип Наличие Категория
0x00 VendorName (имя производителя) Строка ASCII Обязательно Basic
0x01 ProductCode (код продукта)
0x02 MajorMinorRevision (ревизия)
0x03 VendorUrl (ссылка на сайт производителя) Не обязательно Regular
0x04 ProductName (имя продукта)
0x05 ModelName (имя модели)
0x06 UserApplicationName (имя приложения пользователя)
0x07 .. 0x7F Зарезервировано  
0x80 .. 0xFF Приватные объекты, которые могут быть определены опционально. Этот диапазон зависит от продукта. Зависит от устройства Extended

Запрос:

Код функции 1 байт 0x2B
MEI Type 1 байт 0x0E
Read Device ID code 1 байт 01 / 02 / 03 / 04
Object Id 1 байт 0x00 или 0xFF

Ответ:

Код функции 1 байт 0x2B
MEI Type 1 байт 0x0E
Read Device ID code 1 байт 01 / 02 / 03 / 04
Conformity level 1 байт 0x01 или 0x02 или 0x03 или 0x81 или 0x82 или 0x83
Идет ли дальше что-то еще 1 байт 0x00 или 0xFF
Следующий Object Id 1 байт Номер Object ID
Количество объектов 1 байт  
Список:
Object ID 1 байт  
Длина объекта 1 байт  
Значение объекта Длина объекта Зависит от Object ID

Ошибка:

Код функции 1 байт 0xAB (результат 0x2B + 0x80)
Код исключения (exception code) 1 байт 01 или 02 или 03 или 04

MEI, назначенный на номер 14, идентифицирует запрос чтения идентификации (Read Identification Request).

Параметр «Read Device ID code» позволяет определит 4 типа доступа:

01: запрос для получения базовой идентификации устройства (потоковый доступ).
02: запрос для получения обычной идентификации устройства (потоковый доступ).
03: запрос для получения расширенной идентификации устройства (потоковый доступ).
04: запрос для получения одного из специфичных объектов идентификации (индивидуальный доступ).

Код исключения 03 будет отправлен обратно в ответе, если код Read device ID нелегальный.

В случае ответа, который не укладывается в одну транзакцию, нужно выполнить несколько транзакций (запрос/ответ). Байт Object Id дает идентификацию первого получаемого объекта. Для первой транзакции клиент должен установить Object Id в 0, чтобы получить начало идентификационных данных устройства. Для последующих транзакций клиент должен установить Object Id в значение, возвращаемое сервером в его предыдущем ответе.

Примечание: объект неделим, таким образом любой объект должен иметь размер, соответствующий размеру ответа транзакции.

Если Object Id не соответствует известному объекту, то сервер ответит так, как если бы было указание на объект 0 (перезапуск от начала).

В случае индивидуального доступа: ReadDevId code 04, Object Id в запросе дает идентификацию получаемого объекта, и если Object Id не соответствует любому известному объекту, то сервер возвратит ответ исключения с кодом исключения 02 (Illegal data address).

Если устройство сервера запрашивается для уровня описания (код readDevice) выше, чем его уровень соответствия, то оно должно ответить согласно с его реальному уровню соответствия.

Function code: код функции 43 (десятичное) 0x2B (hex).

MEI Type: 14 (0x0E) тип MEI, назначенный для Device Identification Interface.

ReadDevId code: то же самое, как код запроса ReadDevId: 01, 02, 03 или 04.

Conformity Level: уровень соответствия идентификации устройства и тип поддерживаемого доступа.

0x01: базовая идентификация (только потоковый доступ).
0x02: обычная идентификация (только потоковый доступ).
0x03: расширенная идентификация (только потоковый доступ).
0x81: базовая идентификация (потоковый доступ и индивидуальный доступ).
0x82: обычная идентификация (потоковый доступ и индивидуальный доступ).
0x83: расширенная идентификация (потоковый доступ и индивидуальный доступ).

Что еще следует дальше: в случае кодов ReadDevId 01, 02 или 03 (потоковый доступ), если идентификационные данные не укладываются в одну транзакцию, то может потребоваться несколько транзакций запрос/ответ.

0x00: нет больше даных объекта.
0xFF: доступен другой объект идентификации, и требуется больше транзакций MODBUS.

В случае кода ReadDevId 04 (индивидуальный доступ) это поле должно быть установлено в 00.

Next Object Id: если «MoreFollows = FF», запрашивается идентификация следующего объекта. Если «MoreFollows = 00», то должно быть установлено в 00 (бесполезно).

Number Of Objects: количество объектов, возвращаемых в ответе (для индивидуального доступа Number Of Objects = 1).

Object0.Id: идентификация первого возвращаемого в PDU объекта (потоковый доступ) или запрошенный объект (индивидуальный доступ).

Object0.Length: длина первого объекта в байтах.

Object0.Value: значение первого объекта (Object0.Length байт).

ObjectN.Id: идентификация последнего объекта (в ответе).

ObjectN.Length: длина последнего объекта в байтах.

ObjectN.Value значение последнего объекта (ObjectN.Length байт).

В этом примере вся отправляемая информация помещается в один PDU ответа:

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 28 Функция 28
MEI Type 0E MEI Type 0E
Read Dev Id code 01 Read Dev Id Code 01
Object Id 00 Conformity Level 01
    Идет ли что-нибудь дальше 00
    NextObjectId 00
    Количество объектов 03
    Object Id 00
    Длина объекта 16
    Значение объекта «Company identification«
    Object Id 01
    Длина объекта 0D
    Значение объекта «Product code XX«
    Object Id 02
    Длина объекта 05
    Значение объекта «V2.11«

В случае, когда устройство требует нескольких транзакций для отправки ответа, инициируются следующие транзакции. Первая транзакция:

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 28 Функция 28
MEI Type 0E MEI Type 0E
Read Dev Id code 01 Read Dev Id Code 01
Object Id 00 Conformity Level 01
    Идет ли что-нибудь дальше FF
    NextObjectId 02
    Количество объектов 03
    Object Id 00
    Длина объекта 16
    Значение объекта «Company identification«
    Object Id 01
    Длина объекта 1C
    Значение объекта «Product code XXXXXXXXXXXXXXXX«

Вторая транзакция:

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 28 Функция 28
MEI Type 0E MEI Type 0E
Read Dev Id code 01 Read Dev Id Code 01
Object Id 02 Conformity Level 01
    Идет ли что-нибудь дальше 00
    NextObjectId 00
    Количество объектов 03
    Object Id 02
    Длина объекта 05
    Значение объекта «V2.11«

MODBUS Read Device Identification state diagram fig30

Рис. 30. Диаграмма состояний Read Device Identification.

[7. Ответы исключений MODBUS]

Когда устройство-клиент (master) посылает запрос устройству-серверу (slave), от сервера ожидается нормальный ответ. Из-за запроса master может произойти одно из 4 событий:

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

Сообщение ответа исключения должно иметь два поля, которые отличают это сообщение от нормального ответа:

Поле кода функции. В нормальном ответе сервер как эхо посылает в ответе тот же код функции, который был в оригинальном запросе. Это все коды функции, у которых старший бит (MSB) в лог. 0 (их значения меньше 0x80 hex). В ответе исключения (exception response) сервер установит в лог. 1 MSB кода функции. Это делает код функции в ответе исключения однозначно больше на 0x80 (hex), чем значение кода функции в нормaльном ответе.

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

Поле данных. В нормальном ответе сервер может возвратить данные или статистику (любую информацию, которую требовал запрос). В ответе исключения сервер вернет в поле данных код исключения (exception code). Это определит состояние сервера, которое вызвало исключение.

Запрос Ответ
Имя поля HEX Имя поля HEX
Функция 01 Функция 81
Старший байт начального адреса 04 Код исключения 02
Младший байт начального адреса A1    
Старший байт количества выходов 00    
Младший байт количества выходов  01    

В этом примере клиент адресует запрос устройству сервера. Код функции (01) предназначен для операции Read Output Status. Он запрашивает статус выхода по адресу 1185 (0x04A1 hex). Обратите внимание, что считывается только один выход, как указано в поле количества выходов (0001).

Если такой адрес выхода не существует в устройстве сервера, то сервер вернет ответ исключения (exception response) с кодом исключения (02). Это указывает на недопустимый адрес данных для slave-устройства.

Список кодов исключений (MODBUS Exception Codes, коды указаны в HEX-формате) приведен в следующей таблице.

Код Имя Что означает
01 ILLEGAL FUNCTION Код функции, полученный в запросе, задает недопустимое действие для сервера (т. е. для подчиненного устройства MODBUS). Это может быть из-за того, что этот код функции применим только для более новых устройств, и он не реализован в выбранном устройстве. Также это может показывать, что сервер находится в неподходящем состоянии для обработки запроса этого типа, например из-за того, что он не сконфигурирован, и при этом с него запрашиваются значения регистров.
02 ILLEGAL DATA ADDRESS Адрес данных, принятый в запросе, недопустим для сервера. Другая специфическая ситуация — комбинация индекса (reference number) и количество данных в транзакции (transfer length) недопустимы. Для контроллера со 100 регистрами PDU адресует первый регистр как 0, и последний как 99. Если был выдан запрос, когда начальный адрес регистра 96, и количество запрашиваемых регистров 4, то этот запрос будет успешно выполнен (как минимум по соответствию адресов) для регистров 96, 97, 98, 99. Если запрос был выдан с начальным адресом 96, но количество регистров было задано 5, о этот запрос потерпит неудачу с кодом исключения 0x02 «Illegal Data Address», потому что была сделана попытка выйти за пределы рабочих адресов регистров — потребовалось прочитать регистры 96, 97, 98, 99 и 100, но регистр с адресом 100 не существует.
03 ILLEGAL DATA VALUE Значение, содержащееся в поле данных запроса, имеет недопустимое значение для сервера. Это показывает ошибку в остальной части структуры сложного запроса, например неправильную подразумеваемую длину. Это конкретно НЕ означает, что элемент данных, представленный для хранения в регистре, имеет значение, не соответствующее ожиданиям прикладной программы, поскольку протокол MODBUS не знает о смысле и значимости какого-либо конкретного значения какого-либо конкретного регистра.
04 SLAVE DEVICE FAILURE Произошла невосстановимая ошибка, кода сервер попытался выполнить запрошенное действие.
05 ACKNOWLEDGE Специализированное использование вместе с командами программирования. Сервер (подчиненное устройство) должен принять запрос и обработать его, но для этого требуется большой интервал времени. Этот ответ будет возвращен, чтобы предотвратить ошибку таймаута в клиенте (главном устройстве). Клиент может выдать следующее сообщение Poll Program Complete, чтобы определить, завершена ли обработка.
06 SLAVE DEVICE BUSY Специализированное использование вместе с командами программирования. Сервер (подчиненное устройство) занимается обработкой длительной команды программы. Клиент (главное устройство) должно повторно передать сообщение позже, когда сервер освободится.
08 MEMORY PARITY ERROR Специализированное использование вместе с кодами функции 20 и 21 и ссылочным типом 6. Показывает, что расширенная область файла не прошла проверку целостности. Сервер попытался прочитать элемент данных в файле, но в памяти детектирована ошибка четности. Клиент (главное устройство) может повторить запрос, однако возможно понадобится сервисное обслуживание (ремонт) сервера.
0A GATEWAY PATH UNAVAILABLE Специализированное использование вместе со шлюзами. Показывает, что шлюз не может выделить внутренний путь от входного коммуникационный путь от входного порта до выходного порта, что требовалось для обработки запроса. Обычно это означает, что шлюз неправильно сконфигурирован или перегружен.
0B GATEWAY TARGET DEVICE FAILED TO RESPOND Специализированное использование вместе со шлюзами. Показывает, что от целевого устройства не был получен ответ. Обычно означает, что устройство отсутствует в сети.

[Приложение A: зарезервированные коды функций MODBUS, субкоды и типы MEI]

Следующие коды функций и субкоды функций не входят в публичную спецификацию, и эти коды и субкоды функции специально зарезервированы. Формат представляет собой код/субкод или просто код функции, где зарезервированы следующие комбинации: 8 / 19; 8 / 21 .. 65535, 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.

Эта спецификация в настоящий момент предоставляет код функции 43 и его MEI Type 14 для Device Identification и MEI Type 13 для CANopen General Reference Request и PDU ответа в качестве транспортов инкапсулированного интерфейса (Encapsulated Interface Transports).

Следующие коды функции и типы MEI не должны быть частью этой публичной спецификации, и эти коды функции и типы MEI специально зарезервированы: 43 / 0 .. 12 и 43 / 15 .. 255. В этой спецификации код функции пользователя (User Defined Function) дает тот же или подобный результат, как не поддерживаемый Encapsulated Interface Transport.

MODBUS является зарегистрированной торговой маркой Schneider Automation Inc.

[Словарик]

ADU Application Data Unit.

HDLC High level Data Link Control.

HMI Human Machine Interface.

IETF Internet Engineering Task Force.

I/O Input/Output, ввод/вывод.

IP Internet Protocol.

LSB Least Significant Bit, младший значащий бит.

MAC Medium Access Control.

MB MODBUS Protocol.

MBAP MODBUS Application Protocol.

MEI MODBUS Encapsulated Interface, дополнительный код функции, передаваемый за основным. Стандарт определяет MEI 13 (0x0D), предназначенный для инкапсуляции протокола CANopen. MEI 14 (0x0E) используется для получения информации об устройстве и MEI в диапазонах 0—12 и 15—255 зарезервированы.

MSB Most Significant Bit, старший значащий бит.

OSI Open Systems Interconnection, открытая модель организации обмена данными через сеть.

PDU Protocol Data Unit, элемент обмена данными.

PLC Programmable Logic Controller, программируемый логический контроллер.

RFC Request for Comments, рабочее предложение — документ из серии пронумерованных информационных документов Интернета, содержащих технические спецификации и стандарты, широко применяемые во всемирной сети (из Википедии).

TCP Transport Control Protocol.

клиент главное устройство (master) сети MODBUS, которое отправляет запросы/команды серверам MODBUS и получает от них ответы.

сервер подчиненное устройство (slave) сети MODBUS, которое принимает запросы/команды клиента MODBUS, выполняет их и отправляет соответствующие ответы клиенту MODBUS.

[Ссылки]

1. MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b site:modbus.org.
2. MODBUS Messaging Implementation Guide V1.0a site:modbus.org.
3. RFC 791, Internet Protocol, Sep81 DARPA.
4. Порядок следования байт (endianness).
5. Библиотека FreeMODBUS.

Содержание

  1. Форум АСУТП
  2. Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU
  3. Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU
  4. Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU
  5. Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU
  6. Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU
  7. Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU
  8. Modbus errors
  9. Lynn August Linse
  10. Modbus Poll user manual
  11. 1. Modbus Poll
  12. 1.1. System requirements for Modbus Poll
  13. 1.1.1. Silent install
  14. 1.2. End User License Agreement
  15. 2. Modbus Poll Features
  16. 2.1. Connections
  17. 2.2. Supported Modbus Functions
  18. 2.3. Data logging
  19. 2.4. Display formats
  20. 2.5. Miscellaneous features
  21. 3. Overview
  22. 3.1. Help from anywhere
  23. 3.2. Name cells
  24. 3.3. Value cells
  25. 3.4. Change font
  26. 3.5. Conditional colors
  27. 3.5.1. Color example
  28. 3.6. Scaling
  29. 3.7. Real time charting
  30. 3.8. Address Scan
  31. 3.9. Open a new window
  32. 4. Connection dialog
  33. 4.1. Connection
  34. 4.2. Serial Settings
  35. 4.3. Remote Server
  36. 4.4. Advanced settings
  37. 5. Read/Write definition
  38. 5.1. Slave ID
  39. 5.2. Function code
  40. 5.2.1. Read functions
  41. 5.2.2. Write functions
  42. 5.3. Address
  43. 5.3.1. Protocol/message address
  44. 5.3.2. Device address
  45. 5.3.3. 5 digits vs. 6 digits addressing
  46. 5.3.4. Address examples
  47. 5.4. Scanrate
  48. 5.5. Read/Write Disabled
  49. 5.5.1. Disable on error
  50. 5.6. Hide name columns
  51. 5.7. Address in cell
  52. 5.8. PLC Addresses (Base 1)
  53. 5.9. Enron/Daniel Mode
  54. 5.10. Rows
  55. 6. Real time Charting
  56. 6.1. Settings
  57. 6.2. Zoom function
  58. 6.3. Pan function
  59. 6.4. Link data to the chart series
  60. 6.5. Export series
  61. 7. Address Scan
  62. 7.1. Export Address Scan
  63. 8. Display formats
  64. 8.1. Native Modbus registers
  65. 8.2. 32-bit signed integer
  66. 8.3. 32-bit unsigned integer
  67. 8.4. 64-bit signed integer
  68. 8.5. 64-bit unsigned integer
  69. 8.6. 32-bit floating
  70. 8.7. 64-bit double
  71. 9. Save/Open Workspace
  72. 10. Export to csv
  73. 11. Export to Modbus Slave
  74. 12. Test center
  75. 12.1. ASCII Example
  76. 12.2. TCP/IP Example
  77. 12.3. Test center string file
  78. 12.3.1. Content of a string list
  79. 12.4. Copy
  80. 13. Modbus Data logging
  81. 13.1. Text file
  82. 13.1.1. Log Rate
  83. 13.1.2. Delimiters
  84. 13.1.3. Log if data changed only
  85. 13.1.4. Log Errors
  86. 13.1.5. Log Date
  87. 13.1.6. Use «T» as delimiter
  88. 13.1.7. Log ms
  89. 13.1.8. Log address
  90. 13.1.9. Start Log when ok is pressed
  91. 13.1.10. Start Log when *mbp is opened
  92. 13.1.11. Flush to file immediately
  93. 13.1.12. Append
  94. 13.1.13. New log file at midnight
  95. 13.1.14. Header information
  96. 13.2. Microsoft Excel
  97. 13.2.1. Log Rate
  98. 13.2.2. Header information
  99. 14. Communication traffic
  100. 15. OLE/Automation
  101. 15.1. Excel example
  102. 15.1.1. Excel 2007
  103. 15.1.2. Excel 2010, 2016
  104. 15.1.3. Excel sample code
  105. 15.2. Python example
  106. 15.3. Connection Functions/Properties
  107. 15.3.1. Connection
  108. 15.3.2. BaudRate
  109. 15.3.3. DataBits
  110. 15.3.4. Parity
  111. 15.3.5. StopBits
  112. 15.3.6. SerialPort
  113. 15.3.7. Mode
  114. 15.3.8. RemoveEcho
  115. 15.3.9. ResponseTimeout
  116. 15.3.10. DelayBetweenPolls
  117. 15.3.11. ServerPort
  118. 15.3.12. ConnectTimeout
  119. 15.3.13. IPVersion
  120. 15.3.14. OpenConnection
  121. 15.3.15. CloseConnection
  122. 15.3.16. ShowCommunicationTraffic
  123. 15.3.17. CloseCommunicationTraffic
  124. 15.4. Read Functions
  125. 15.4.1. ReadCoils
  126. 15.4.2. ReadDiscreteInputs
  127. 15.4.3. ReadHoldingRegisters
  128. 15.4.4. ReadInputRegisters
  129. 15.5. Automation Write Functions
  130. 15.5.1. WriteSingleCoil
  131. 15.5.2. WriteSingleRegister
  132. 15.5.3. WriteMultipleCoils
  133. 15.5.4. WriteMultipleRegisters
  134. 15.5.5. Python example
  135. 15.6. Various Functions
  136. 15.6.1. ShowWindow
  137. 15.6.2. GetTxCount
  138. 15.6.3. GetRxCount
  139. 15.6.4. GetName
  140. 15.6.5. SetName
  141. 15.6.6. FormatAll
  142. 15.6.7. GetFormat
  143. 15.6.8. SetFormat
  144. 15.6.9. ResizeWindow
  145. 15.6.10. ResizeAllColumns
  146. 15.6.11. Rows
  147. 15.6.12. ReadResult
  148. 15.6.13. WriteResult
  149. 15.7. Automation data properties
  150. 15.7.1. Coils, CoilsWin
  151. 15.7.2. SRegisters, SRegistersWin
  152. 15.7.3. URegisters, URegistersWin
  153. 15.7.4. Ints_32, Ints_32Win
  154. 15.7.5. UInts_32, UInts_32Win
  155. 15.7.6. Ints_64, Ints_64Win
  156. 15.7.7. UInts_64, UInts_64Win
  157. 15.7.8. Floats, FloatsWin
  158. 15.7.9. Doubles, DoublesWin
  159. 15.7.10. ByteOrder
  160. 15.8. Write Functions (Create a data window)
  161. 15.8.1. WriteSingleCoilWin
  162. 15.8.2. WriteSingleRegisterWin
  163. 15.8.3. WriteMultipleCoilsWin
  164. 15.8.4. WriteMultipleRegistersWin
  165. 16. Exception and error messages
  166. 16.1. Modbus Exception Codes
  167. 16.2. Modbus Poll error messages

Форум АСУТП

Клуб специалистов в области промышленной автоматизации

  • Обязательно представиться на русском языке кириллицей (заполнить поле «Имя»).
  • Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  • Не писать свой вопрос в первую попавшуюся тему — вместо этого создать новую тему.
  • За поиск и предложение пиратского ПО и средств взлома — бан без предупреждения.
  • Рекламу и частные объявления «куплю/продам/есть халтура» мы не размещаем ни на каких условиях.
  • Перед тем как что-то написать — читать здесь и здесь.

Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU

Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU

Сообщение swaips-87 » 06 фев 2021, 02:57

Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU

Сообщение ogorsv » 06 фев 2021, 15:48

Я бы начал с проверки «физики» (80 % моих проблем были именно там:-)):
1. Правильный кабель, топология, коннекторы, монтаж
2. Терминаторы и подтягивающие резисторы (в руководстве написано о них)
3. Может (а вдруг?) влияют помехи извне
4. Какой режим МОХА вы используете: Прозрачный или Агент?
5. Зачастую проблемы подобного рода возникали из-за разных таймаутов ведущего и ведомого. Представьте, что мастер не получает ответ за указанное время — он делает повтор посылки. А слэйву просто нужно было время на обработку и отправку ответа
6. В инструкции есть такой параметр, как «Inter-frame delay» — по дефолту в нуле.
7. А как у вас организована в М580 посылка команд? Через ФБ или DIO-scanner? Не слишком ли высока скорость опроса? Обрабатываете ли вы успешный/неуспешный ответ?
Сбрасываете ли команду по успешному ответу/неуспешному/статусу установки/таймауту или единица продолжает висеть?

По DEIF @Jackson, наверно, может подсказать — были ли похожие проблемы и как их решали

По проблемам обмена через шлюз был ещё FAQ нашего Центра поддержки клиентов
https://www.se.com/ru/ru/faqs/index?pag . cale=ru_RU

Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU

Сообщение swaips-87 » 09 фев 2021, 06:43

Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU

Сообщение Sergey_P » 09 фев 2021, 14:55

Мне кажется, это слишком много.
В документе «MODBUS over serial line specification and implementation guide V1.02» на странице 13 сказано:
In RTU mode, message frames are separated by a silent interval of at least 3.5 character times

На скорости 9600 это примерно 0.3 мс.

Думаю, Inter-frame delay в MOXA предназначена для вставки задержек между пакетами, чтобы медленные слейвы успевали переключаться на прием после отправки ответа на запрос. Тормоза у вас появились скорее всего именно из-за того, что вы тут задали 300 мс. Попробуйте задать 10 мс. Все должно работать.

Modicon M580 — Modbus TCP через MOXA 3660 в Deif — Modbus RTU

Сообщение swaips-87 » 10 фев 2021, 05:52

Источник

Modbus errors

I’m trying to connect two climate devices that’s using modbus and jbus communication, with a KNX system using the gateway: IBOX-KNX-MBRTU-A of manufacture Intesis software.

The climate devices are:
— ventilation-unit with a modbus interface and,
— chiller with a jbus interface.

For monitoring the modbus messages, I use the software tool: modbus poll.
The monitoring of the jbus messages doesn’t show any errors. Only during monitoring the modbus messages the following errors are shown:

— Bytes missing error
— Read error: Framing error
— CRC error

What mean these errors and how can i solve these problems?

Hopefully someone can help me.

Lynn August Linse

Framing errors is a bad/unusual thing, something you should never see in a correctly designed system — look it up on the Internet. What it usually means:

#1) a baud rate mismatch — I don’t think that’s your problem since the Modbus device won’t answer if the master sends ‘garbage’ which is what incorrect baud rate data looks like.

#2) improper RS-485 grounding, which means bits/bytes are being misinterpreted because of no ground wire and a ground potential approaching the over-voltage levels.

#3) lack of line bias on RS-485, which means when the master stops sending & before the slave starts responding, the RS-485 lines float which means you likely might see some garbage 0xFF or 0xFE bytes at the start of the response.

#4) just plain too much line-noise. You might need to double check your shielding.

#5) a slave which starts replying BEFORE the master is ready to receive, therefore part or all of the first byte is lost . leading to a possible framing error during the first received byte and also missing data, which leads to CRC error.

Источник

Modbus Poll user manual

1. Modbus Poll

Modbus Poll is an easy to use Modbus master simulator developed for many purposes. Among others:

Designers of Modbus slave devices for quick and easy testing of protocol interface

Automation engineers that need to test Modbus devices or networks on site

Service engineers that want to read out and/or change specific service data from a device

Change Modbus registers in a slave device

Log data from Modbus devices

Troubleshooting and compliance testing

1.1. System requirements for Modbus Poll

Processor; 1 GHz or faster recommended
1 GB RAM
5 MB of available hard drive space
1024 x 768 display resolution

All Windows versions from Windows 7 to Windows 11 are supported.
Modbus Poll version 7 runs on Windows XP.

1.1.1. Silent install

Silent install require no user intervention and have no user interface. The user doesn’t see any dialog and isn’t asked any questions.
Use the command line /S switch.

1.2. End User License Agreement

You should carefully read the following terms and conditions before using Modbus Poll. Unless you have a different license agreement signed by Witte Software, your use of this software indicates your acceptance of this license agreement and warranty. If you do not accept these terms you must cease using this software immediately.

Copyright.
Modbus Poll («The Software») is copyright 2002-2023 by Witte Software, all rights reserved.

Evaluation and Registration.
This is not free software. You are hereby licensed to use the Software for evaluation purposes without charge for a period of 30 days.

If you use the Software after the 30 day evaluation period a registration fee is required.

Unregistered use of the Software after the 30-day evaluation period is in violation of U.S. and international copyright laws.

One registered copy of the Software may either be used by a single person who uses the software personally on one or more computers, or installed on a single computer used by multiple people, but not both.

For information on order and pricing, please visit https://www.modbustools.com/order.html

Modbus Poll licenses are perpetual. Once you buy a license to a specific major version, and as long as you abide by the license agreement, you can use that version forever with no additional cost.

Distribution.
Provided that you do not include your License Key you are hereby licensed to make copies of the Software; give exact copies of the original to anyone; and distribute the Software in its unmodified form via electronic means. You are specifically prohibited from charging for any such copies.

LIMITED WARRANTY.
THE SOFTWARE IS PROVIDED AS IS AND WITTE SOFTWARE DISCLAIMS ALL WARRANTIES RELATING TO THIS SOFTWARE, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

LIMITATION ON DAMAGES.
NEITHER WITTE SOFTWARE NOR ANYONE INVOLVED IN THE CREATION, PRODUCTION, OR DELIVERY OF THIS SOFTWARE SHALL BE LIABLE FOR ANY INDIRECT, CONSEQUENTIAL, OR INCIDENTAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE SUCH SOFTWARE EVEN IF WITTE SOFTWARE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR CLAIMS. IN NO EVENT SHALL WITTE SOFTWARE’S LIABILITY FOR ANY DAMAGES EXCEED THE PRICE PAID FOR THE LICENSE TO USE THE SOFTWARE, REGARDLESS OF THE FORM OF CLAIM. THE PERSON USING THE SOFTWARE BEARS ALL RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE.

2. Modbus Poll Features

2.1. Connections

Modbus Poll read/write data from devices using:

Modbus RTU or ASCII on RS232 or RS485 networks. (USB/RS232/485 Converter)

Modbus Over TCP/IP. (Modbus RTU/ASCII encapsulated in a TCP packet)

Modbus over UDP/IP. (Modbus RTU/ASCII encapsulated in a UDP packet)

2.2. Supported Modbus Functions

02: Read discrete inputs

03: Read holding registers

04: Read input registers

05: Write single coil

06: Write single register

15: Write multiple coils

16: Write multiple registers

17: Report server ID

22: Mask write register

23: Read/Write registers

43/14: Read device identification

2.3. Data logging

Log data to a text file

Log data direct into Excel

2.4. Display formats

Each cell can be individual formatted.

Signed 16-bit register

Unsigned 16-bit register

32-bit signed integer with any word/byte order

32-bit unsigned integer with any word/byte order

64-bit signed integer with any word/byte order

64-bit unsigned integer with any word/byte order

32-bit float with any word/byte order

64-bit double float with any word/byte order

2.5. Miscellaneous features

OLE/Automation for interfacing with Excel VBA, Python etc.

Monitoring of data traffic

Print and print preview

Real time charting

3. Overview

Modbus Poll uses a multiple document interface. That means several windows can be opened. Each one with different data contents from different slave devices at the same time.

This picture shows two open windows. One reading 10 Holding registers from slave id 1 and another reading 10 Holding registers from slave id 2.

3.1. Help from anywhere

Press F1 and get context sensitive help on a topic associated with the current selected item.

SHIFT + F1 invokes a special «help mode» in which the cursor turns into a help cursor (arrow + question mark). The user can then select a visible object in the user interface, such as a menu item, toolbar button, or window. This opens help on a topic that describes the selected item.

3.2. Name cells

Here you can type any text for designation of the value cells. You can also copy/paste text from Excel cells.

3.3. Value cells

Show the data values of the Modbus registers. If you double click a value cell a dialog box lets you write a new value to the slave device. Typing a number in a value cell shows the dialog as well. It is possible to select the used Modbus function used to write the value.

The check box «Close dialog on Response ok» is used to automatically close the dialog box when a value is successfully sent. This is convenient when a lot of values are to be changed. In that way it is fast to select a new cell and then type a new value again.

3.4. Change font

Select the cells to be changed and then right click.

Select the cells to be changed and then menu → display → font.

3.5. Conditional colors

Conditional colors help you visually show values in specific ranges.

Default color: This color is used if none of the conditional colors evaluates to true.

Rule 1: This color selection is used if the expression evaluates to true. Rule 1 has precedence over rule 2.

Rule 2: This color selection is used if the expression evaluates to true.

greater than or equal to

less than or equal to

The «and» operator cannot be used when the data type is of float or 32 bit long type. The condition value is entered as a hex number if «and» is selected. It evaluates to true if any of the bits in both the cell and the condition value is 1.

3.5.1. Color example

Green color if the cell value is between 398 and 402

3.6. Scaling

Scaling helps you scale raw values to human readable values. Scaling works only for signed and unsigned 16/32 bit integers.

A line passing through the two points (X1,Y1) and (X2,Y2)

$Slope = m = (Y2 — Y1) / (X2 — X1)$

$Y = m * (X — X1) + Y1$

Number of digits after the decimal point.

Must be enabled to scale the value from the Modbus server/slave. Scaling is automatically disabled if other than a 16/32 bit integer display format is selected.

3.7. Real time charting

The chart can plot 12 series in real time with up to 100000 points in each series.

3.8. Address Scan

Scan an address range for a list of all valid addresses in a device.

3.9. Open a new window

To open another window you have 3 options:

Select new in the file menu

Press on the toolbar

4. Connection dialog

To open the connection dialog you have 2 options:

Select connect from the connection menu

4.1. Connection

There are 5 different connection types:

Serial:
Modbus over serial line. RS232 or RS485. A USB serial converter can be used.

Modbus TCP/IP:
Select TCP/IP if you want to communicate with a MODBUS TCP/IP network. In this case, slave ID is the same as the Unit ID used in MODBUS TCP/IP.
The port number is default 502.
If the connection fails then try if you can ping your device at the command prompt. If the ping command fails then Modbus Poll fails too.

Modbus UDP/IP:
Select UDP/IP if you want to communicate with a MODBUS UDP/IP network. This is the same as Modbus TCP/IP but the connection less UDP protocol is used instead.

Modbus RTU/ASCII over TCP/IP:
This is a RTU or ASCII message sent over a TCP/IP network instead of serial lines.

Modbus RTU/ASCII over UDP/IP:
This is a RTU or ASCII message sent over a UDP/IP network instead of serial lines.

Connection type 3-5 is not standard Modbus as specified by www.modbus.org but they are added for convenience.

Depending on your selection some other settings will be grayed.

4.2. Serial Settings

Use these parameters to set serial port settings. They are only available if the connection type is «Serial Port«.

Use this option to select RTU or ASCII mode. Default RTU.

Specifies the length of time that Modbus Poll should wait for a response from a slave device before giving up. Default is 1000ms.

Min delay between polls

This setting ensures a minimum delay until the next request is transmitted no matter the scan rate. The resolution of this setting is approximately 15ms. It’s possible on some computers to obtain better resolution but not all.

If you set this value lower than 20ms the 3.5 char time gap between response and a new request can’t be guaranteed. This is because the Windows scheduler switches tasks every 10 — 20ms.

If you Poll several slaves in a serial RS485 network you should NOT set the value lower than 20ms. This is to ensure the 3.5 char time gap.

In a TCP/IP network less than 20ms is ok.

Serial connection to only one slave device less than 20ms is ok.

4.3. Remote Server

Remote server settings are only available when using an Ethernet connection.

Servers IP address. Default is localhost 127.0.0.1

Server port number. Default 502

Max time to use to establish a connection. Default 1000

4.4. Advanced settings

RTS Toggle specifies that the RTS line will be high if bytes are available for transmission. After all buffered bytes have been sent, the RTS line will be low.
You can use this to switch direction if you have a 232/485 converter without an automatic direction switch.

The use of RTS controlled RS232/RS485 converters should be avoided if possible. It is difficult to determine the exact time when to switch off the transmitter with non real-time operating systems like Windows and Linux. If it is switched off too early characters might still sit in the FIFO or the transmit register of the UART and these characters will be lost. Hence the slave will not recognize the message. On the other hand if it is switched off too late then the slave’s message is corrupted and the master will not recognize the message.

DSR specifies whether the DSR (data-set-ready) signal is monitored for output flow control. If this member is TRUE and DSR is turned off, output is suspended until DSR is sent again.

CTS specifies whether the CTS (clear-to-send) signal is monitored for output flow control. If this checkbox is enabled and CTS is turned off, output is suspended until CTS is sent again.

DTR specifies whether the DTR will be enabled or disabled whenever the port is opened.

If your device or RS232/RS485 converter echoes the chars just sent.

5. Read/Write definition

Use this command to define the data to be monitored for the active window.

To open the Read/Write Definition dialog you have 3 options:

Select «Read/Write Definition» from the Setup menu

Press on the toolbar

5.1. Slave ID

Range 1 to 255. (MODBUS protocol specifications say 247). The value 0 is also accepted to communicate directly to a MODBUS/TCP or MODBUS/UDPВ device.

5.2. Function code

You can select 1 of 8 function codes.

5.2.1. Read functions

The data returned by the read functions are displayed on the grid window.

01: Read coils (0x)

02: Read discrete inputs (1x)

03: Read holding registers (4x)

04: Read input registers (3x)

5.2.2. Write functions

The write functions write the data displayed on the grid window.

05: Write single coil (Writes to Coil status)

06: Write single register (Writes to Holding registers)

15: Write multiple coils (Writes to Coils)

16: Write multiple registers (Writes to Holding registers)

5.3. Address

Addresses in the Modbus protocol are confusing! Some protocol specifications use the protocol/message address and others use device addressing.

5.3.1. Protocol/message address

Some protocol specifications use the protocol/message address counting from 0 to 65535 along with a function code. This is also what the new Modbus specifications use. This is the address inside the message sent on the wire.

Modbus Poll use protocol/message address counting from 0 to 65535.

5.3.2. Device address

Some protocol specifications use device address/registers. Registers counts from 1. The first digit describes the function to be used. That means the device address 40101 is identified by address 100. The «4» means Holding registers and 4x registers counts from 1. And even more confusing: 4x means function code 03 and 3x means function code 04!

5.3.3. 5 digits vs. 6 digits addressing

The address format 4x counts from 40001 to 49999. The next address is not 50000. In the old days 9999 addresses was enough. There are cases where 9999 is not enough. Then a zero is added. 40101 becomes 400101 and so on. This is called 6 digits addressing or extended addressing.

This is not a problem with Modbus Poll. 410001 become 10000. The «4» is thrown away and the rest 10001 is decremented by 1 as we count from 0 instead of 1.

5.3.4. Address examples

These examples show how to set up Modbus Poll if a specification uses device addresses.

Read Holding Registers

You want to read 20 registers from device address 40011 from slave ID 2 every 1000ms. From the «4» we know this is function 03 «Read Holding Registers».

Function = «03 Read Holding Registers (4x)»

Address = 10 (11 minus 1)

Read Discrete Inputs

You want to read 1000 coils from address 110201 from slave ID 5 every 500ms. From the «1» we know this is function 02 «Read Discrete Inputs»

Function = «02 Read Discrete Inputs (1x)»

Address = 10200 (10201 — 1)

5.4. Scanrate

The scan rate can be set from 0 to 3600000ms. Note that setting the scan rate lower than the transaction time does not make sense. If a serial connection at 9600baud is used and 125 registers are requested the transaction time is roughly 8 + 2 + 250 + 2 = 262ms + the gap (>3.5 char time) between the request and the response. In this case setting the scan rate at e.g. 100ms does not make sense as the transaction time is at least 262ms + delay in the slave (gap) + min time between polls. (Set in the connection dialog F3).

5.5. Read/Write Disabled

The «Read/Write Disabled» checkbox can be used to temporary enable or disable the communication for this window. A text (Disabled) is then shown along with the Tx and Error counters.


If «Read/Write» is disabled you can make single requests with the «Read/Write once» button or press F6.

«Read/Write once» button

5.5.1. Disable on error

Disable Read/Write in case of error.

5.6. Hide name columns

Hide all name columns. This is convenient to make more space if they are not used.

5.7. Address in cell

If enabled, the address is also shown in the value cell like: 2000 = 00000

5.8. PLC Addresses (Base 1)

This option will show the addresses as device addresses.

5.9. Enron/Daniel Mode

Enron or Enron/Daniels Modbus is Standard Modbus with a few «Vendor Extensions». The exact impact of these extensions is context dependent, but most common Modbus commands work as expected. There are some custom vendor-defined functions available — but few users expect or use them. The largest impact has to do with how 32-bit data values are read/written.

Enron-Modbus defines two special 4x holding register ranges:

4×5001 to 4×5999 are assumed 32-bit long integers (4-bytes per register).

4×7001 to 4×7999 are assumed 32-bit floating points (4-bytes per register).

Dealing with 32-bit values in Modbus is NOT unique to Enron-MB. However, Enron-MB takes the debatable step of returning 4-bytes per register instead of the 2-bytes implied by the term «holding register» in the Modbus specification. This means a poll of registers 4×5001 and 4×5002 in Enron-Modbus returns 8-bytes or two 32-bit integers, whereas Standard Modbus would only return 4-bytes or one 32-bit integer treated as two 16-bit integers. In addition, polling register 4×5010 in Enron-MB returns the tenth 32-bit long integer, whereas Standard Modbus would consider this 1/2 of the fifth 32-bit long integer in this range.

5.10. Rows

Specify the number of rows in the grid you prefer.

6. Real time Charting

Use this command to plot up to 12 data series in a chart in real time.
The real time chart is high speed and capable of drawing a new line as fast as new data is received.

All chart settings are stored with workspace. Save/Open Workspace

To open the Real time charting dialog you have 2 options:

Select «Real time Charting» from the Display menu

The X-Axis displays the number of seconds since the chart was started.

When the points reach the end of the chart there are 3 options:

Stop at end: The charting stops.

Restart at end: The charting starts all over again.

Continue: It continues until it reaches the max number of points or stop is pressed.

6.1. Settings

By default all 12 series are linked to the left Y-Axis. Check the «Right Y-Axis» check box if you want to link a series to the right Y-Axis.

The offset is useful to align data points on the same Y-Axis. For example, data points that are either 0 or 1 can be offset so they are not drawn on top of each other.

6.2. Zoom function

Zooming in on the chart can be useful if you want to see more details. The zoom is controlled with the left mouse button. To zoom a specific part of the chart, simply left-click on the chart (this will be the upper-left corner of the zoomed rectangle) and drag to the bottom-right. A rectangle will appear. As soon as you release the mouse button, the axes will automatically adjust themselves to the region you have selected.

If you left-click on the chart (like for starting a zoom) but if you move to the top-left corner instead, all the modifications done with the zoom and pan features will be canceled (the chart will be in the state it was before the manipulations with the pan and zoom).

6.3. Pan function

To pan the control, right-click somewhere on the control and move the mouse. The point under the mouse will follow the movement of the mouse.

6.4. Link data to the chart series

The chart doesn’t know which data to use unless you link a Modbus data cell to one of the 12 series. To do so select a value cell and from Menu→Display select «Link to Chart».

6.5. Export series

Save series data to disk or copy to clipboard. Paste the data direct in Excel for further processing.
The file is given a .csv extension despite the use of a non-comma field separator.

Delimiters: Select the character that separates values in your text file. Use tab delimiter when copy/paste to Excel.

Number of points

Max point value

Min point value

Average point value

7. Address Scan

Scan an address range for a list of all valid addresses in a device. Addresses are read one by one and the read result is shown in a list.

Scanning all 65535 addresses takes some time depending on connection type, server device etc.

7.1. Export Address Scan

Save Address Scan data to disk or copy to clipboard. Paste the data direct in Excel for further processing.
The file is given a .csv extension despite the use of a non-comma field separator.

Delimiters: Select the character that separates values in your text file. Use tab delimiter when copy/paste to Excel.

8. Display formats

Mark the cells to be formatted. Select one of the 28 display formats from the display menu.

8.1. Native Modbus registers

The 16-bit Modbus registers can be displayed in 4 different modes.

8.2. 32-bit signed integer

This combines 2 16-bit Modbus registers. It can be displayed in 4 different word/byte orders.

Signed integer Big-endian

Signed integer Little-endian

Signed integer Big-endian byte swap

Signed integer Little-endian byte swap

Byte Order: AB CD (Big-endian)
The decimal number 123456789 or in hexadecimal 07 5B CD 15
Order as they come over the wire in a Modbus message: 07 5B CD 15

8.3. 32-bit unsigned integer

This combines 2 16-bit Modbus registers. It can be displayed in 4 different word/byte orders.

Unsigned integer Big-endian

Unsigned integer Little-endian

Unsigned integer Big-endian byte swap

Unsigned integer Little-endian byte swap

Byte Order: AB CD (Big-endian)
The decimal number 123456789 or in hexadecimal 07 5B CD 15
Order as they come over the wire in a Modbus message: 07 5B CD 15

8.4. 64-bit signed integer

This combines 4 16-bit Modbus registers. It can be displayed in 4 different word/byte orders.

Signed integer Big-endian

Signed integer Little-endian

Signed integer Big-endian byte swap

Signed integer Little-endian byte swap

Byte Order: AB CD EF GH (Big-endian)
The decimal number -1,234,567,890,123,456,789 or in hexadecimal EE DD EF 0B 82 16 7E EB
Order as they come over the wire in a Modbus message: EE DD EF 0B 82 16 7E EB

8.5. 64-bit unsigned integer

This combines 4 16-bit Modbus registers. It can be displayed in 4 different word/byte orders.

Unsigned integer Big-endian

Unsigned integer Little-endian

Unsigned integer Big-endian byte swap

Unsigned integer Little-endian byte swap

Byte Order: AB CD EF GH (Big-endian)
The decimal number 1,234,567,890,123,456,789 or in hexadecimal 11 22 10 F4 7D E9 81 15
Order as they come over the wire in a Modbus message: 11 22 10 F4 7D E9 81 15

8.6. 32-bit floating

This combines 2 16-bit Modbus registers. It can be displayed in 4 different word/byte orders.

Float Big-endian byte swap

Float Little-endian byte swap

Byte Order: AB CD (Big-endian)
The floating point number 123456.00 or in hexadecimal 47 F1 20 00
Order as they come over the wire in a Modbus message: 47 F1 20 00

8.7. 64-bit double

This combines 4 16-bit Modbus registers. It can be displayed in 4 different word/byte orders.

Double Big-endian byte swap

Double Little-endian byte swap

Byte Order: AB CD EF GH (Big-endian)
The floating point number 123456789.00 or in hexadecimal 41 9D 6F 34 54 00 00 00
Order as they come over the wire in a Modbus message: 41 9D 6F 34 54 00 00 00

9. Save/Open Workspace

If you open many related Modbus windows it is convenient to save a snapshot of the current layout of all open and arranged Modbus Windows in one workspace.

A workspace (*mbw) is a file that contains display information and file names of all open windows. Not the actual contents. To do this, go to File→ Save Workspace.

When you open a workspace file, Modbus Poll opens all Modbus Windows and displays them in the layout that you saved.

10. Export to csv

Export names and values to a Comma, Semicolon or Tab Separated Values File.

Comma Separated Values file (*.csv)
«Temperature»,»19.7″

Semicolon Separated Values file (*.csv)
«Temperature»;»19.7″

Tab Separated Values file (*.txt)
Temperature 19.7

Depending on your system, comma or period is used to separate decimals.

11. Export to Modbus Slave

Export names, values and formatting to a Modbus Slave file. *.mbs

Modbus Slave version 7.4.0 or newer is required to open the file.

12. Test center

The purpose of this test dialog is to help MODBUS slave device developers to test the device with any string of their own composition.
The list box displays the transmitted data as well as the received data.
You can have several test strings in the pull down list box. When you have entered a string then press the «Add to List» button then the string is added to the list.
The selected string is sent when the «Send» button is pressed.

Rest test strings from a file.

Store the test strings to a file.

Clear the test list.

Add the current test string to the list.

Add a CRC or LRC to the end of the input string.

When using the test center you may want to disable communication from other windows. Check the «Read/Write disable» check box in «Read/Write Definition» dialog. Setup→Read/Write Definition.

12.1. ASCII Example

String in the combo box:

The transmitted string if LRC is added

A CR LF pair is also added.

12.2. TCP/IP Example

Read 10 holding registers.

The first 6 bytes are the TCP/IP header.

12.3. Test center string file

With a text editor such as notepad or similar you can prepare strings to be used in the test.
The first line in the file must be the string «TestCenter». This is how Modbus Poll knows that the file is the correct format. Press «Open list» to open the prepared text file.

12.3.1. Content of a string list

12.4. Copy

Use the Copy button to copy selected Tx/Rx strings to the clipboard.
The SHIFT and CTRL keys can be used together with the mouse to select and deselect strings, select groups of strings, and select non-adjacent strings.

Leave this window open while doing other commands.

13. Modbus Data logging

You can log data to either a text file or direct to Microsoft Excel.

13.1. Text file

Select Log from the setup menu or use shortcut keys: Alt+L

Each Modbus Window logs to its individual text file.

When you want to stop the data logging then select the logging off command on the setup menu.

13.1.1. Log Rate

Write a logline for all Modbus requests. Log frequency as scan rate.

Specify the log rate in seconds. Independent of scan rate.

If the scan rate is e.g. 10000ms it makes no sense to set a 1 sec log rate as data is logged only when new data is ready.

13.1.2. Delimiters

As delimiter you can use one of following options:

Means that the values are organized in columns.

Values separated by a comma.

Values separated by a tab.

13.1.3. Log if data changed only

Specify that a new log line is written only if any data is changed since last log.

13.1.4. Log Errors

Specify that errors such a timeout etc. are logged.

13.1.5. Log Date

Specify that the current date is added to the log time.

13.1.6. Use «T» as delimiter

Specify that the time and date is delimited by the letter «T» as specified in ISO 8601.

13.1.7. Log ms

Specify that milliseconds are added to the log time.

13.1.8. Log address

Specify that the Modbus Address is added to the log.

13.1.9. Start Log when ok is pressed

Specify that logging is started when the ok button is pressed. Otherwise the log setup is just stored when *mbp file is saved.

13.1.10. Start Log when *mbp is opened

Specify that logging is automatically started when a *.mbp file is opened.

13.1.11. Flush to file immediately

This ensures that log lines are not cashed in the file system but physically written immediately.

13.1.12. Append

Specify that logs are appended to the selected file. Otherwise a new file is created.

13.1.13. New log file at midnight

Close the current log file and start a new file at midnight. A time stamp is added to your filename.

Insert header: Information is inserted in the top of the log file.

Name cells in top row: Insert names.

Poll definition: Insert ID, Function etc.

Name: Insert a name of your log.

Example of a text file with fixed width:

You can import the data in an Excel spreadsheet.

13.2. Microsoft Excel

This feature requires that Microsoft Excel is installed. Excel 2003 log is limited to 65535 logs as this is the max number of rows in an Excel sheet. Excel 2007 or newer is limited to 1,048,576 rows. Each Modbus Window logs to its individual Excel sheet.

Select Excel Log from the setup menu or use shortcut keys: Alt+X

Do not touch the Excel sheet while logging as this will interrupt the logging.

13.2.1. Log Rate

Each read: Write a logline for all Modbus requests. Log frequency as scan rate.

Select: Specify the log rate in seconds. Log is independent of scan rate.
Remark: If the scan rate is e.g. 10000ms it makes no sense to set a 1 sec log rate as data is logged only when new data is ready.

Stop after: Specify the number of log lines. Note that Excel 2003 is limited to 65,536 rows and Excel 2007 1,048,576 rows.

Insert header: Information is inserted in the top most 3 lines in the Excel sheet.

Name cells in top row: Insert names in row 3.

Poll definition: Insert ID, Function etc. in row 2.

Name: Insert a log name in row 1.

Excel log with header information.

14. Communication traffic

Select the menu Display→Communication to show the traffic on the serial line or Ethernet cable. Use the stop button to temporary stop the update for inspection.

Use the copy button to copy the selected line to the clipboard.

This window shows only data sent and received by Modbus Poll. You can’t use it as a data sniffer.

Leave this window open while doing other commands.

15. OLE/Automation

Automation (formerly known as OLE Automation) makes it possible for one application to manipulate objects implemented in another application.

An Automation client is an application that can manipulate exposed objects belonging to another application. This is also called an Automation controller.

An Automation server is an application that exposes programmable objects to other applications. Modbus Poll is an automation server.

That means you can use any program that supports VBA (Visual Basic for Applications) such as Visual Basic, Excel etc. to interpret and show the modbus data according to your specific requirements.

15.1. Excel example

You should display the Developer tab or run in developer mode when you want to write macros.

15.1.1. Excel 2007

Click the Microsoft office button and then click Excel options.

Click popular and then select the show Developers tab in the ribbon check box.
Note the ribbon is part of the Microsoft fluent user interface.

15.1.2. Excel 2010, 2016

Click on the file tab.

Click options. Excel Options window will open.

On the left pane click Customize Ribbon.

On the right pane, under Main Tabs, check the Developer check box.

Click OK. The Developer tab should now show in the ribbon (right most tab).

15.1.3. Excel sample code

This example opens two windows. One reading registers and another reading Coils.
Modbus Poll is hidden but you can show it by uncommenting the «ShowWindow» line. This will show one of the windows.

An example is also included with the Modbus Poll installation.
Start → All Programs → Modbus Poll → Excel Example

15.2. Python example

This Python example opens a window and set all possible data formats.

15.3. Connection Functions/Properties

The following properties and functions do the same as you setup in the connection dialog (F3).

15.3.1. Connection

Connection selects the desired connection. A serial port or one of the Ethernet connections can be selected.

Property Connection as Integer

0 = Serial port
1 = Modbus TCP/IP
2 = Modbus UDP/IP
3 = Modbus ASCII/RTU over TCP/IP
4 = Modbus ASCII/RTU over UDP/IP

15.3.2. BaudRate

Applicable only for Connection = 0

Property BaudRate as Long

300
600
1200
2400
4800
9600 (Default)
14400
19200
38400
56000
57600
115200
128000
153600
230400
256000
460800
921600

15.3.3. DataBits

Applicable only for Connection = 0

Property DataBits as Integer

15.3.4. Parity

Applicable only for Connection = 0

Property Parity as Integer

0 = None
1 = Odd
2 = Even (Default)

15.3.5. StopBits

Applicable only for Connection = 0

Property StopBits as Integer

15.3.6. SerialPort

Applicable only for Connection = 0

Property SerialPort as Integer

Default value = 1

15.3.7. Mode

Applicable only for Connection = 0

Property Mode as Integer

0 = RTU Mode
1 = ASCII Mode

15.3.8. RemoveEcho

Applicable only for Connection = 0
If your device or RS232/RS485 converter echoes the chars just sent.

Property RemoveEcho as Integer

0 (Default)
1 (Remove echoes)

15.3.9. ResponseTimeout

The ResponseTimeout specifies the length of time in ms that Modbus Poll should wait for a response from a slave device before giving up.

Property ResponseTimeout as Integer

Default value = 1000

15.3.10. DelayBetweenPolls

Property DelayBetweenPolls as Integer

Default value = 20

15.3.11. ServerPort

Applicable only for Connection = 1…4

Property ServerPort as Long

Default value = 502

15.3.12. ConnectTimeout

The ConnectTimeout specifies the length of time that Modbus Poll should wait for a TCP/IP connection to succeed.

Applicable only for Connection = 1…4

Property ConnectTimeout as Integer

Default value = 1000ms

15.3.13. IPVersion

Applicable only for Connection = 1…4

Property IPVersion as Integer

4 = IP Version 4 (Default)
6 = IP Version 6

15.3.14. OpenConnection

Opens the connection selected with the Connection property.

Function OpenConnection() As Integer

This function has no parameters.

For error 3-5: Please check if you have the latest serial port driver.

Serial Port not available

Serial port. Not possible to get current settings from the port driver.

Serial port. Serial port driver did not accept port settings.

Serial port. Serial port driver did not accept timeout settings.

TCP/UDP Connection failed. WSA start up

TCP/UDP Connection failed. Connect error

TCP/UDP Connection failed. Timeout

TCP/UDP Connection failed. IOCTL

TCP/UDP Connection failed. Socket error

TCP/UDP Connection failed. Address information

Connection already open

15.3.15. CloseConnection

Function CloseConnection() As Integer

This function has no parameters.

Zero if success. Nonzero value if failed.

15.3.16. ShowCommunicationTraffic

Shows the communication traffic window.

Function ShowCommunicationTraffic()

This function has no parameters.

15.3.17. CloseCommunicationTraffic

Closes the communication traffic window if shown.

Function CloseCommunicationTraffic()

This function has no parameters.

15.4. Read Functions

The following functions do the same as you setup in the read/write definition dialog (F8). Read functions are associated with a Modbus Poll document. (The window with data)

Error Description

You must create a Read before you can use properties to get data.

15.4.1. ReadCoils

Modbus function code 01

Function ReadCoils(SlaveID As Integer, Address As Long, Quantity As Integer, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
Quantity: The number of data. 1 to 2000
ScanRate: 0 to 3600000ms

True if success. False if not success

15.4.2. ReadDiscreteInputs

Modbus function code 02

Function ReadDiscreteInputs(SlaveID As Integer, Address As Long, Quantity As Integer, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
Quantity: The number of data. 1 to 2000
ScanRate: 0 to 3600000ms

True if success. False if not success

15.4.3. ReadHoldingRegisters

Modbus function code 03

Function ReadHoldingRegisters(SlaveID As Integer, Address As Long, Quantity As Integer, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
Quantity: The number of data. 1 to 125
ScanRate: 0 to 3600000ms

True if success. False if not success

15.4.4. ReadInputRegisters

Modbus function code 04

Function ReadInputRegisters(SlaveID As Integer, Address As Long, Quantity As Integer, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
Quantity: The number of data. 1 to 125
ScanRate: 0 to 3600000ms

True if success. False if not success

15.5. Automation Write Functions

The write functions write the values stored in the array filled by the properties. The below Write function do not create a data window. To create a data window use the Win functions e.g. WriteMultipleRegistersWin.

15.5.1. WriteSingleCoil

Modbus function code 05.
Writes the first coil stored in the write array.

Function WriteSingleCoil(SlaveID As Integer, Address As Long) As Integer

SlaveID: The slave address 0 to 255
Address: The data address (Base 0)

True if the write array is ready and the data is sent. False if the array is empty or error in the parameters.
The controlling application is responsible for verifying the write operation by reading back the value written.

15.5.2. WriteSingleRegister

Modbus function code 06.
Writes the first register stored in the write array.

Function WriteSingleRegister (SlaveID As Integer, Address As Long) As Integer

SlaveID: The slave address 0 to 255
Address: The data address (Base 0)

True if the write array is ready and the data is sent. False if the array is empty or error in the parameters.
The controlling application is responsible for verifying the write operation by reading back the value written.

15.5.3. WriteMultipleCoils

Modbus function code 15.
Write the coils stored in the write array.

Function WriteMultipleCoils(SlaveID As Integer, Address As Long, Quantity As Integer) As Integer

True if the write array is ready and the data is sent. False if the array is empty or error in the parameters.
The controlling application is responsible for verifying the write operation by reading back the values written.

SlaveID: The slave address 0 to 255
Address: The data address (Base 0)
Quantity The number of data. 1 to 1968

15.5.4. WriteMultipleRegisters

Modbus function code 16.
Write the registers stored in the write array.

Function WriteMultipleRegisters(SlaveID As Integer, Address As Long, Quantity As Integer) As Integer

SlaveID: The slave address 0 to 255
Address: The data address (Base 0)
Quantity: The number of data. 1 to 123

True if the write array is ready and the data is sent. False if the array is empty or error in the parameters.
The controlling application is responsible for verifying the write operation by reading back the value written.

15.5.5. Python example

Python example how to create a window that read 10 registers from address 0 (40001) and then write 5 registers.

15.6. Various Functions

Various functions are associated with a Modbus Poll document. (The window with data)

15.6.1. ShowWindow

As default Modbus document windows are hidden. The ShowWindow function makes Modbus Poll visible and shows the document with data content.

Function ShowWindow()

This function has no parameters.

15.6.2. GetTxCount

Retreives the number of requests.

Function GetTxCount() As Long

This function has no parameters.

The number of requests.

15.6.3. GetRxCount

Retreives the number of response.

Function GetRxCount() As Long

This function has no parameters.

The number of response.

15.6.4. GetName

Retreives the name of a value.

Function GetName(Index As Integer) As String

Index: Index 0 corresponds to the first Modbus address.

15.6.5. SetName

Changes the name of a value. Function SetName(Index As Integer, Name As String)

Index: Index 0 corresponds to the first Modbus address.
Name: The name of the value cell.

15.6.6. FormatAll

Format all value cells with the selected format.

Function FormatAll(Format As Integer)

Format: The format of the value cell.

15.6.7. GetFormat

Retreives the display format of the Modbus value.

Function GetFormat(Index As Integer) As Integer

Index: Index 0 corresponds to the first Modbus address.

Float little-endian byte swap

Double little-endian byte swap

32-bit Signed little-endian byte swap

32-bit Signed big-endian

Float big-endian byte swap

Double big-endian byte swap

32-bit Signed little-endian

32-bit Signed big-endian byte swap

32-bit Unsigned big-endian

32-bit Unsigned little-endian byte swap

32-bit Unsigned big-endian byte swap

32-bit Unsigned little-endian

64-bit Signed big-endian

64-bit Signed little-endian byte swap

64-bit Signed big-endian byte swap

64-bit Signed little-endian

64-bit Unsigned big-endian

64-bit Unsigned little-endian byte swap

64-bit Unsigned big-endian byte swap

64-bit Unsigned little-endian

ID Format

This setting is only for display. You still need to use byteOrder to get the correct endianness when using Get/Set value functions.

15.6.8. SetFormat

Change the display format of the Modbus values. See Format values above.

Function SetFormat(Index As Integer, Format As Integer)

Index: Index 0 corresponds to the first Modbus address.
Format: The format of the value cell.

15.6.9. ResizeWindow

Resize an opened window to fit the grid.

Function ResizeWindow()

This function has no parameters.

15.6.10. ResizeAllColumns

Resize all columns to fit the values inside the cells.

Function ResizeAllColumns()

This function has no parameters.

15.6.11. Rows

Specify the number of rows in the grid.

Function Rows(NumberRows)

NumberRows: Number of rows in the grid.

10 Rows (Default)

Fit to quantity

15.6.12. ReadResult

Use this property to check if communication established with Read is running successful.

Property ReadResult As Integer

This function has no parameters.

RESPONSE ERROR (The response was not the expected slave id, function or address)

PORT NOT OPEN ERROR

INSUFFICIENT BYTES RECEIVED

BYTE COUNT ERROR

TRANSACTION ID ERROR

ILLEGAL DATA ADDRESS

ILLEGAL DATA VALUE

SERVER DEVICE FAILURE

SERVER DEVICE BUSY

GATEWAY PATH UNAVAILABLE

GATEWAY TARGET DEVICE FAILED TO RESPOND

15.6.13. WriteResult

Use this function to check if a write was successful.
The value is DATA_UNINITIALIZED until the result from the slave is available. See ReadResult for a list of possible values.

Property WriteResult As Integer

Return a write result as an integer.

15.7. Automation data properties

The below properties are used to set or get values in the internal write/read arrays in Modbus Poll. The Index used is not a Modbus Address. The Index always counts from 0 no matter of the address used. The data properties are associated with a Modbus Poll document. (The window with data)

There are 2 version of each data properties:

One with no postfix such as SRegisters which is used to set or get a value from the internal write/read array.

One with Win as postfix such as SRegistersWin which is used to set or get a value direct from the data window. This is used when the data window is used for a Write function e.g. WriteMultipleRegistersWin.

Example 1:

Example 2 with floating point values:
Write 3 floating point values.

Example 3:
Create a window that writes 3 registers.

15.7.1. Coils, CoilsWin

Property Coils(Index As Integer) As Integer

Sets a coil in the write array structure or return a coil from the read array.

Coils(Index) [=newvalue]

15.7.2. SRegisters, SRegistersWin

Property SRegisters(Index As Integer) As Integer

Sets a register in the write array structure or return a register from the read array.

SRegisters(Index) [=newvalue]

15.7.3. URegisters, URegistersWin

Property URegisters(Index As Integer) As Long

Sets a register in the write array structure or return a register from the read array.

URegisters(Index) [=newvalue]

15.7.4. Ints_32, Ints_32Win

Property Ints_32(Index As Integer) As Double

Sets a 32-bit integer in the write array structure or return an integer from the read array.

Ints_32(Index) [=newvalue]

15.7.5. UInts_32, UInts_32Win

Property UInts_32(Index As Integer) As Double

Sets a 32-bit unsigned integer in the write array structure or return an unsigned integer from the read array.

UInts_32(Index) [=newvalue]

15.7.6. Ints_64, Ints_64Win

Property Ints_64(Index As Integer) As Double

Sets a 64-bit integer in the write array structure or return an integer from the read array.

Ints_64(Index) [=newvalue]

15.7.7. UInts_64, UInts_64Win

Property UInts_64(Index As Integer) As Double

Sets a 64-bit unsigned integer in the write array structure or return an unsigned integer from the read array.

UInts_64(Index) [=newvalue]

15.7.8. Floats, FloatsWin

Property Floats(Index As Integer) As Single

Sets a float in the write array structure or returns a float from the read array.

Floats(Index) [=newvalue]

15.7.9. Doubles, DoublesWin

Property Doubles(Index As Integer) As Double

Sets a double in the write array structure or return a double from the read array.

Doubles(Index) [=newvalue]

15.7.10. ByteOrder

Property ByteOrder As Integer

Sets the byte order used by Ints_32, UInts_32, Ints_64, UInts_64, Floats and Doubles properties.
The Win versions do not use this Property ByteOrder.

ID Description

Little-endian byte swap

Big-endian byte swap

Example for Ints_32:
Byte Order: Big-endian
The decimal number 123456789 or in hexadecimal 07 5B CD 15
Order as they come over the wire in a Modbus message: 07 5B CD 15

ByteOrder [=newvalue]

15.8. Write Functions (Create a data window)

The following functions do the same as you set up in the read/write definition dialog (F8).
The functions creates a data window and the data content in the data windows is written according to the scan rate.

15.8.1. WriteSingleCoilWin

Modbus function code 05.

Function WriteSingleCoilWin(SlaveID As Integer, Address As Long, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
ScanRate: 0 to 3600000ms

True if success. False if not success

15.8.2. WriteSingleRegisterWin

Modbus function code 06.

Function WriteSingleRegisterWin(SlaveID As Integer, Address As Long, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
ScanRate: 0 to 3600000ms

True if success. False if not success

15.8.3. WriteMultipleCoilsWin

Modbus function code 15.

Function WriteMultipleCoilsWin(SlaveID As Integer, Address As Long, Quantity As Integer, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
Quantity: The number of data. 1 to 1968
ScanRate: 0 to 3600000ms

True if success. False if not success

15.8.4. WriteMultipleRegistersWin

Modbus function code 16.

Function WriteMultipleRegistersWin(SlaveID As Integer, Address As Long, Quantity As Integer, ScanRate As Long) As Integer

SlaveID: The slave address 1 to 255
Address: The data address (Base 0)
Quantity: The number of data. 1 to 123
ScanRate: 0 to 3600000ms

True if success. False if not success

16. Exception and error messages

Modbus Exceptions and error messages are displayed in red text in the 2 nd line in each window.

16.1. Modbus Exception Codes

Modbus exceptions are errors returned from the slave device.

The function code received in the query is not an allowable action for the server (or slave). This may be because the function code is only applicable to newer devices, and was not implemented in the unit selected. It could also indicate that the server (or slave) is in the wrong state to process a request of this type, for example because it is not configured and is being asked to return register values.

Illegal Data Address

The data address received in the query is not an allowable address for the server. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, the PDU addresses the first register as 0, and the last one as 99. If a request is submitted with a starting register address of 96 and a quantity of registers of 4, then this request will successfully operate (address-wise at least) on registers 96, 97, 98, 99. If a request is submitted with a starting register address of 96 and a quantity of registers of 5, then this request will fail with Exception Code 0x02 “Illegal Data Address” since it attempts to operate on registers 96, 97, 98, 99 and 100, and there is no register with address 100.

Illegal Data Value

A value contained in the query data field is not an allowable value for the server (or slave). This indicates a fault in the structure of the remainder of a complex request, such as that the implied length is incorrect. It specifically does NOT mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the MODBUS protocol is unaware of the significance of any particular value of any particular register.

Server Device Failure

An unrecoverable error occurred while the server (or slave) was attempting to perform the requested action.

Specialized use in conjunction with programming commands.
The server (or slave) has accepted the request and is processing it, but a long duration of time will be required to do so. This response is returned to prevent a timeout error from occurring in the client (or master). The client (or master) can next issue a Poll Program Complete message to determine if processing is completed.

Server Device Busy

Specialized use in conjunction with programming commands.
The server (or slave) is engaged in processing a long–duration program command. The client (or master) should retransmit the message later when the server (or slave) is free.

Gateway Path Unavailable

Specialized use in conjunction with gateways, indicates that the gateway was unable to allocate an internal communication path from the input port to the output port for processing the request. Usually means that the gateway is misconfigured or overloaded.

Gateway Target Device Failed to Respond

Specialized use in conjunction with gateways, indicates that no response was obtained from the target device. Usually means that the device is not present on the network.

16.2. Modbus Poll error messages

The response is not received within the expected time. Check the following:

Serial settings such as Baud rate, parity, Data bits, Stop bits etc.

Modbus mode, RTU or ASCII

Check that Host and Port are consistent with the slave

The response is not the expected one. Different slave ID.

The CRC value of the received response is not correct.

This is an error reported by the serial driver. This could happen if a USB/RS232/485 converter is used and the USB cable is unplugged. There are 4 types:

Serial connection error

Output buffer overflow

Write error using TCP/IP connection is normally caused by lost connection.

This is an error reported by the serial driver. There are 6 types:

Character buffer overrun

Input buffer overflow

Read error using TCP/IP connection is normally caused by lost connection.

Insufficient bytes received

The response is not the expected length.

Byte count error

The byte count in the response is not correct. Compared to the expected.

Transaction ID error

It is used for transaction pairing, the MODBUS server copies in the response the transaction identifier of the request.

Источник

Adblock
detector

ID Endianness

Modbus Integration Solutions

Chipkin has Modbus solutions for almost every situation. We are experts in Modbus RTU/TCP communication
and carry a wide variety of Modbus products:

01 ILLEGAL FUNCTION 

The function code received in the query is not an allowable action for the server. This may be because the function code is only applicable to newer devices, and was not implemented in the unit selected. It could also indicate that the server is in the wrong state to process a request of this type, for example because it is unconfigured and is being asked to return register values.

02 ILLEGAL DATA ADDRESS 

The data address received in the query is not an allowable address for the server. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, the PDU addresses the first register as 0, and the last one as 99. If a request is submitted with a starting register address of 96 and a quantity of registers of 4, then this request will successfully operate (address-wise at least) on registers 96, 97, 98, 99. If a request is submitted with a starting register address of 96 and a quantity of registers of 5, then this request will fail with Exception Code 0x02 “Illegal Data Address” since it attempts to operate on registers 96, 97, 98, 99 and 100, and there is no register with address 100.

03 ILLEGAL DATA VALUE 

A value contained in the query data field is not an allowable value for server. This indicates a fault in the structure of the remainder of a complex request, such as that the implied length is incorrect. It specifically does NOT mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the MODBUS protocol is unaware of the significance of any particular value of any particular register.

04 SERVER DEVICE FAILURE 

An unrecoverable error occurred while the server was attempting to perform the requested action.

05 ACKNOWLEDGE 

Specialized use in conjunction with programming commands. The server has accepted the request and is processing it, but a long duration of time will be required to do so. This response is returned to prevent a timeout error from occurring in the client. The client can next issue a Poll Program Complete message to determine if processing is completed.

06 SERVER DEVICE BUSY 

Specialized use in conjunction with programming commands. The server is engaged in processing a long–duration program command. The client should retransmit the message later when the server is free. 

08 MEMORY PARITY ERROR 

Specialized use in conjunction with function codes 20 and 21 and reference type 6, to indicate that the extended file area failed to pass a consistency check. The server attempted to read record file but detected a parity error in the memory. The client can retry the request, but service may be required on the server device.

0A GATEWAY PATH UNAVAILABLE 

Specialized use in conjunction with gateways, indicates that the gateway was unable to allocate an internal communication path from the input port to the output port for processing the request. Usually means that the gateway is misconfigured or overloaded.

0B GATEWAY TARGET DEVICE FAILED TO RESPOND

Specialized use in conjunction with gateways, indicates that no response was obtained from the target device. Usually means that the device is not present on the network.

Понравилась статья? Поделить с друзьями:
  • Exception eabort with message error unpacking achievements dat
  • Exception dsi occurred как исправить wii
  • Execvp ошибка формата выполняемого файла
  • Exception code is 0 как исправить fatal болид
  • Exception caught in client main loop starbound ошибка