Это утверждённая версия страницы. Она же — наиболее свежая версия.
Основные понятия
Modbus — это протокол прикладного (седьмого) уровня модели OSI, он служит для обмена данными, чаще всего между устройствами автоматизации и реализован в виде «протокола ответов на запросы (request-reply protocol)».
В устройствах Wirenboard данные Modbus передаются по последовательным линиям связи RS-485. В последовательных линиях связи протокол RS-485 полудуплексный и работает по принципу «клиент-сервер». Каждое устройство в сети (кроме ведущего см. далее) имеет адрес от 1 до 247, адрес 0 используется для широковещательной передачи данных всем устройствам, а адреса 248–255 считаются зарезервированными согласно спецификации Modbus, их использование не рекомендуется.
Существует две спецификации протокола: Modbus RTU и Modbus ASCII. В Modbus RTU передается 11-битный символ, состоящий из 1 стартового бита, 8 бит данных (начиная с младшего бита), бит четности (необязателен) и 2 стоповых бита, если бит четности не передается, или 1 стоповый бит, если бит четности передается. Такой символ позволяет передать 1 байт данных. В устройствах Wiren Board бит контроля четности не передается и используется 2 стоповых бита. В Modbus ASCII каждый байт передается двумя символами, представляющими ASCII-коды младшей и старшей четырехбитной группы байта (пример). Modbus RTU позволяет передавать больше информации при той же скорости последовательной линии и в устройствах Wiren Board используется именно он. Все дальнейшее описание относится к Modbus RTU.
Ведущее устройство («мастер», или «клиент») периодически опрашивает «ведомое», или «сервер». Ведущее устройство не имеет адреса, передача сообщений от устройства-сервера ведущему без запроса ведущего в протоколе не предусмотрена.
Датаграмма Modbus в общем виде
Пакет данных Modbus выглядит, как это показано на рисунке. PDU (Protocol Data Unit) — общая часть пакета MODBUS, включающая код функции и данные пакета. ADU (Application Data Unit) — полный пакет MODBUS. Включает в себя специфичную для физического уровня часть пакета и PDU. Для последовательных линий в заголовке ADU передается адрес устройства, а в конце — контрольная сумма CRC16. Максимальный размер ADU в последовательных коммуникационных линиях составляет 253 байта (из максимальных, разрешенных спецификацией 256 байт вычитается 1 байт адреса и два байта контрольной суммы). Для справки — в Modbus TCP максимальная длина пакета составляет 260 байт.
Функция кодируется одним байтом и определяет, какое действие должно выполнить устройство-сервер. Значение кодов функций лежат в диапазоне от 1 до 255, причем коды от 128 до 255 зарезервированы для сообщений об ошибках со стороны устройства-сервера. Код 0 не используется. Размер блока данных может варьироваться от нуля до максимально допустимого. Если обработка запроса прошла без ошибок, то устройство-сервер возвращает пакет ADU, содержащий запрошенные данные.
Modbus-транзакция, прошедшая без ошибок
При возникновении ошибки устройством возвращается код ошибки. В случае обычной транзакции код функции в ответе возвращается без изменений; в случае ошибки старший бит кода функции устанавливается в единицу (то есть код функции + 0x80)
Modbus-транзакция с ошибками
Стоит определить таймаут ожидания ответа от ведомого устройства — бессмысленно долго ждать ответ, который, возможно, из-за какой-то ошибки никогда и не придет.
Структуры данных Modbus
В Modbus принято кодировать адреса и данные в формате big-endian, то есть в формате, когда байты следуют, начиная со старшего: например, при передаче шестнадцатеричного числа 0x1234 сначала устройством будет принят байт 0x12, а затем — 0x34. Для передачи данных другого типа, например, чисел с плавающей запятой (float), текстовых строк, даты и времени суток и т.п. производитель может выбрать свой собственный способ кодирования — для расшифровки получаемых данных важно ознакомится со спецификацией производителя устройства.
Модель данных Modbus
Обмен данными с Modbus-устройствами происходит через регистры. В протоколе Modbus определяется четыре типа регистров, показанных в таблице:
Таблица | Размер | Доступ |
---|---|---|
Регистры флагов (Coils) | 1 бит | чтение и запись |
Дискретные входы (Discrete Inputs) | 1 бит | только чтение |
Регистры хранения (Holding Registers) | 16-битное слово | чтение и запись |
Регистры ввода (Input Registers) | 16-битное слово | только чтение |
Регистры флагов (Coils) хранят однобитные значения — то есть могут находится в состоянии 0 или 1. Такие регистры могут обозначать текущее состояние выхода (включено реле). Название «coil» буквально и означает обмотку-актюатор электромеханического реле. Регистры флагов допускают как чтение, так и запись.
Дискретные входы (Discrete Inputs) также являются однобитными регистрами, описывающими состояние входа устройства (например подано напряжение — 1). Эти регистры поддерживают только чтение.
Регистры хранения (Holding Registers) и регистры ввода (Input Registers) представлены двухбайтовым словом и могут хранить значения от 0 до 65535 (0x0000 — 0xFFFF).
Регистры ввода допускают только чтение (например, текущее значение температуры). Регистры хранения поддерживают как чтение, так и запись (для хранения настроек). В настоящее время во многих устройствах, в частности в устройствах Wiren Board, эти регистры не разделяются. Команды на чтение регистра хранения N и регистра ввода N обратятся к одному и тому же значению в адресном пространстве устройства.
Адреса и номера регистров
В стандарте Modbus для каждого из четырех типов регистров используются разные таблицы с номерами 0,1,3,4. Таким образом, регистр определенного типа с определенным номером (иначе его называют физическим адресом) имеет свой адрес в соответствующей таблице.
Таблица | Номер таблицы | Начальный логический адрес | Номер регистра (физический адрес) | Диапазон логических адресов |
---|---|---|---|---|
Регистры флагов (Coils) | 0 | 000001 | 0 | 000001 — 065535 |
Дискретные входы (Discrete Inputs) | 1 | 100001 | 0 | 100001 — 165535 |
Регистры хранения (Holding Registers) | 3 | 300001 | 0 | 300001 — 365535 |
Регистры ввода (Input Registers) | 4 | 400001 | 0 | 400001 — 465535 |
Это вносит некоторую путаницу в понимание, по какому же адресу обратиться к регистру с нужным номером. Более того, понятия «адрес» и «регистр» могут применяться производителем произвольно. Чаще всего указываются номера регистров, как, например для устройств Wiren Board. В некоторых устройствах применяются более короткие логические адреса (.0001 — .9999), и для адреса используется 5, а не 6 цифр.
Иногда в описаниях устройства указываются только логические адреса. Например, coil-регистр 0 имеет адрес 000001, регистр ввода 4 — 400005 и т.д.
В готовых шаблонах устройств контроллера Wiren Board 5 есть шаблон для однофазного счетчика электроэнергии SDM220 (/usr/share/wb-mqtt-serial/templates/config-sdm220.json). В документации от производителя «Eastron SDM
220 Modbus Smart Meter Modbus Protocol Implementation V1.0» перечислены регистры и соответствующие им измеряемые параметры, например:
Address (Register) | Description | Units | Modbus Protocol Start Address Hex (Hi Byte Lo Byte) |
---|---|---|---|
30001 | Line to neutral volts. | Volts | 00 00 |
30007 | Current. | Amps. | 00 06 |
30013 | Active power | Whatts | 00 0C |
30019 | Apparent power | VoltAmps | 00 12 |
… | … | … | … … |
Производитель в таблице приводит и логические, и физические адреса регистров, что позволяет нам с легкостью создать шаблон устройства и проиллюстрировать связь между логическими и физическими адресами Modbus-регистров.
Фрагмент шаблона счетчика SDM220
Коды функций чтения и записи регистров
В следующей таблице приведены наиболее распространенные коды функций Modbus:
Код функции | HEX | Название | Действие |
---|---|---|---|
1 | 0x01 | Read Coils | Чтение значений нескольких регистров флагов |
2 | 0x02 | Read Discrete Inputs | Чтение значений нескольких дискретных входов |
3 | 0x03 | Read Holding Registers | Чтение значений нескольких регистров хранения |
4 | 0x04 | Read Input Registers | Чтение значений нескольких регистров ввода |
5 | 0x05 | Write Single Coil | Запись одного регистра флагов |
6 | 0x06 | Write Single Register | Запись одного регистра (ввода или хранения) |
15 | 0x0F | Write Multiple Coils | Запись нескольких регистров флагов |
16 | 0x10 | Write Multiple Register | Запись нескольких регистров (ввода или хранения) |
Команды условно можно разделить по типам: чтение значений — запись значений; операция с одним значением — операция с несколькими значениями.
Формат данных запросов и ответов Modbus
Рассмотрим подробнее, как происходит обмен данными между устройством-клиентом, отправляющим запрос, и устройством-сервером, отвечающим ему.
На следующем рисунке показан обмен данными контроллера с устройством с адресом 0x01. Мы хотим прочесть 8 coil-регистров, начиная с первого.
В качестве данных мы получили шестнадцатеричное число 0x2D, то есть состояние восьми coil-регистров в двоичном виде такое: 0b10110100.
В следующей таблице приведены структуры данных запросов и ответов для основных функций Modbus.
Код функции | Запрос | Ответ |
---|---|---|
1 (Read Coils) и 2 (Read Discrete Inputs) |
|
|
3 (Read Holding Registers) и 4 (Read Input Registers) |
|
|
5 (Write Single Coil) |
|
Ответ аналогичен запросу |
6 (WriteSingle Register) |
|
Ответ аналогичен запросу |
15 (WriteMultipleCoils) |
|
|
16 (Write Multiple register ) |
|
|
Коды исключений (ошибки) Modbus
В случае, если запрос не может по той или иной причине быть обработан устройством-сервером, то в ответ он отправляет сообщение об ошибке. Соообщение об ошибке содержит адрес Modbus-устройства, код функции, при выполнении которой произошла ошибка, увеличенный на 0x80, код ошибки и контрольную сумму:
Транзакция завершилась с ошибкой
В этом случае мы попытались обратиться к несуществующему адресу регистра 0xFFFF и попытались прочесть 8 регистров флагов. В результате мы получили код ошибки 0x03 — «В поле данных передано неверное значение».
Наиболее распространенные коды ошибок Modbus приведены в следующей таблице:
Код ошибки | Название ошибки | Что означает |
---|---|---|
1 | Illegal Function | В запросе был передан недопустимый код функции |
2 | Illegal Data Address | Указанный в запросе адрес не существует |
3 | Illegal Data Value | В поле данных передано неверное значение |
4 | Slave Device Failure | Произошла невосстановимая ошибка на устройстве при выполнении запрошенной операции |
5 | Acknowledge | Запрос принят, выполняется, но выполнение потребует много времени; необходимо увеличить таймаут. |
6 | Slave Device Busy | Устройство занято обработкой предыдущего запроса. |
7 | Negative Acknowledge | Устройство не может выполнить запрос, необходимо получить от устройства дополнительную диагностическую информацию. Возможно, требуется тех. обслуживание. |
8 | Memory Parity Error | Ошибка четности при обращении к внутренней памяти устройства. |
Вычисление контрольной суммы Modbus
Для протокола Modbus RTU 16-битная контрольная сумма (CRC) вычисляется по алгоритму, описанному в спецификации Modbus, в документе «Modbus Serial Line Protocol and Implementation Guide», раздел «CRC-generation». Передающее устройство формирует два байта контрольной суммы на основе данных сообщения, а принимающее устройство заново вычисляет контрольную сумму и сравнивает с полученной. Совпадение принятой и вычисленной контрольной суммы Modbud RTU считается индикатором успешного обмена данными.
В случае ограниченных вычислительных ресурсов для вычисления контрольной суммы существует функция, использующая табличные значения (так же приведена в спецификации).
- Обязательно представиться на русском языке кириллицей (заполнить поле «Имя»).
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему — вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома — бан без предупреждения.
- Рекламу и частные объявления «куплю/продам/есть халтура» мы не размещаем ни на каких условиях.
- Перед тем как что-то написать — читать здесь и здесь.
-
mandrew
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 26 сен 2018, 08:51
- Имя: Андрей
- Страна: Беларусь
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
ModBus Poll нет значений регистров.
Сообщение
mandrew » 27 фев 2023, 23:11
Добрый вечер.
Пробую работать с программой ModBus Poll. Связь с тестовым устройством(слейв ПР200 с простой программкой) устанавливается, можно передать в слейв значение регистра. Пробую читать холдинг регистр 512 и записывать регистр 513. Но в программе в поле значения регистра «0» в любом случае.Пробовал все форматы регистров, не помогает. Может кто-то сталкивался?
Версия программы ModBus Poll 10.2.
55.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
M3f
- не первый раз у нас
- Сообщения: 314
- Зарегистрирован: 31 янв 2017, 11:08
- Имя: Николай
- Благодарил (а): 7 раз
- Поблагодарили: 92 раза
ModBus Poll нет значений регистров.
Сообщение
M3f » 28 фев 2023, 00:54
mandrew, у вас же ошибка: «02 Illegal Data Address». Читайте 1 регистр, тот который вам надо, а не 10 сразу. Скорее всего, вы не создали переменную/ые из этого диапазона и пытаетесь к ней обратиться.
▪ EPLAN Electric P8 Professional+ 2.7 HF1 11496
▪ TIA Portal Professional V17 Upd1
▪ Creo Parametric 4.0 M070
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 28 фев 2023, 05:09
mandrew писал(а): ↑27 фев 2023, 23:11
Может кто-то сталкивался?
Все сталкивались. Вам же пишет МодБас Пул сам: «Illegal Data Address«, не просто так ведь для красоты пишет. В Гугле же можно перевести, если настолько плохо с языком. Не то и не оттуда читаете. Скорее всего Вы пытаетесь читать несуществующий регистр в Вашем диапазоне.
Вам нужен 1 регистр — вот и читайте его, а не 10 штук сразу.
Когда Вы хотите выпить стакан чего-то, то в стакан Вы наливаете ведь не целый литр, а не больше стакана, правда? И в чай всю сахарницу не высыпаете ради 1 ложки сахара.
По вопросам работы Форума можно обратиться по этим контактам.
-
I_m
- осмотрелся
- Сообщения: 117
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 1 раз
- Поблагодарили: 20 раз
ModBus Poll нет значений регистров.
Сообщение
I_m » 28 фев 2023, 08:31
mandrew писал(а): ↑27 фев 2023, 23:11
Пробую читать холдинг регистр 512 и записывать регистр 513.
Это адреса сетевых переменных? А ПР200 у Вас в каком режиме?
-
mandrew
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 26 сен 2018, 08:51
- Имя: Андрей
- Страна: Беларусь
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
ModBus Poll нет значений регистров.
Сообщение
mandrew » 28 фев 2023, 09:04
Добрый день.
«Illegal Data Address» конечно видел и перевел. Мне казалось что существующие регистры программа должна показать.
Попробую сегодня почитать по одному регистру.
Спасибо.
-
Ryzhij
- почётный участник форума
- Сообщения: 5406
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 442 раза
- Поблагодарили: 634 раза
ModBus Poll нет значений регистров.
Сообщение
Ryzhij » 28 фев 2023, 09:19
mandrew писал(а): ↑28 фев 2023, 09:04
Мне казалось что существующие регистры программа должна показать.
Скорее всего — можете уточнить в окне терминала сами — происходит следующее:
При Ваших настройках программа посылает ОДИН запрос на чтение ГРУППЫ регистров.
И на этот ЕДИНСТВЕННЫЙ запрос получает ответ слейва с кодом ошибки. Поэтому ничего показать не может.
—————————————————
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
«Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить.» (святитель Николай Сербский)
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 28 фев 2023, 10:04
mandrew писал(а): ↑28 фев 2023, 09:04
Мне казалось что существующие регистры программа должна показать.
Вам неправильно казалось. Если в диапазоне регистров есть дырка, то опрашиваемое устройство вернет код ошибки, либо вообще ничего не вернёт. В Вашем случае вернуло. Если бы не вернуло то вместо Illegal Data Address Вы увидели бы Timeout error. МодБас Пулу в любом случае нечего показывать.
Выведите терминал и увидите сами, какие летят запросы и что приходит в ответ. Это Модбас, сие описано ЕМНИП в его спецификации. Тут не казаться должно, а просто работу по протоколу ModBUS надо знать.
- [+]
По вопросам работы Форума можно обратиться по этим контактам.
-
I_m
- осмотрелся
- Сообщения: 117
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 1 раз
- Поблагодарили: 20 раз
ModBus Poll нет значений регистров.
Сообщение
I_m » 28 фев 2023, 11:48
Jackson писал(а): ↑28 фев 2023, 10:04
Если в диапазоне регистров есть дырка,
Там нет дырки, диапазон для этих переменных 512–575. Но они недоступны в режиме модуля ввода/вывода. А на вопрос про режим ТС ничего не ответил.
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 28 фев 2023, 12:50
I_m писал(а): ↑28 фев 2023, 11:48
Там нет дырки, диапазон для этих переменных 512–575. Но они недоступны в режиме модуля ввода/вывода. А на вопрос про режим ТС ничего не ответил.
Да. Но с точки зрения модбаспула там, очевидно, дырка. Я даже предложил терминал вывести чтобы увидеть, какой ответ прилетает от модуля. Но об этом тоже ТС молчит.
По вопросам работы Форума можно обратиться по этим контактам.
-
petr2off
- эксперт
- Сообщения: 1377
- Зарегистрирован: 06 янв 2016, 19:45
- Имя: Петров В.Л.
- Страна: Россия
- город/регион: Красноярск
- Благодарил (а): 57 раз
- Поблагодарили: 146 раз
ModBus Poll нет значений регистров.
Сообщение
petr2off » 28 фев 2023, 13:42
Jackson писал(а): ↑28 фев 2023, 12:50
Я даже предложил терминал вывести чтобы увидеть
Весьма разумное предложение, выручала — не помню сколько раз. Одна из причин не убиваемой популярности Modbus — относительно простая структура пакетов. Позволяет же инструмент мониторить обмен. Не поленитесь — почитайте по структуре пакетов Modbus, и посмотрите — что реально идет.
-
mandrew
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 26 сен 2018, 08:51
- Имя: Андрей
- Страна: Беларусь
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
ModBus Poll нет значений регистров.
Сообщение
mandrew » 28 фев 2023, 23:05
Добрый вечер.
Продолжу… Есть ПР200(овен) включеный в Slave с адресом 15, регистр 513 выведен на экран.
С «Illegal Data Address» , с вашей помощью, разобрался. Пробуем с помощью пулла сделать однократную запись числа 88 в этот регистр:
88.jpg
запись.jpg
Судя по трафику записали.На экране 88.
Теперь однократно читаем:
чтение.jpg
Судя по трафику прочитали 88 а в пулле значение регистра 513=0……
Насколько понял структуру пакетов в посылке: обращаемся 15 слейву, функцией 03, регистр 513,1, контрольная сумма.
А вот по ответу до конца не понятно….
Обьясните пжл…
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
petr2off
- эксперт
- Сообщения: 1377
- Зарегистрирован: 06 янв 2016, 19:45
- Имя: Петров В.Л.
- Страна: Россия
- город/регион: Красноярск
- Благодарил (а): 57 раз
- Поблагодарили: 146 раз
ModBus Poll нет значений регистров.
Сообщение
petr2off » 01 мар 2023, 05:55
Есть такой нюанс у ПЛК — адрес с которого начинается адресное пространство Modbus.
У одних ПЛК это 0, у других это 1. В настройках программы есть птичка — которая настраивает этот момент.
У ОВНА, насколько я помню с 1 начинается.
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 01 мар 2023, 08:25
mandrew писал(а): ↑28 фев 2023, 23:05
Судя по трафику прочитали 88 а в пулле значение регистра 513=0…..
Тип данных ещё проверьте.
По вопросам работы Форума можно обратиться по этим контактам.
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 01 мар 2023, 09:56
С названием функций тоже везде бардак. К примеру функции 03h и 04h в половине случаев перепутаны в документации, действую методом подбора до тех пор, пока не увижу нужные значения.
По вопросам работы Форума можно обратиться по этим контактам.
-
odot
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 01 апр 2022, 10:35
- Имя: Одот Автоматизация
- Страна: Россия
- город/регион: Новосибирск
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
ModBus Poll нет значений регистров.
Сообщение
odot » 01 мар 2023, 10:40
mandrew писал(а): ↑27 фев 2023, 23:11
… Пробую читать холдинг регистр 512 и записывать регистр 513. Но в программе в поле значения регистра «0» …
Нужно быть осторожнее с записью регистров. Убедитесь в документации что операция записи в регистр не инициирует запись во флеш память устройства, а то ее ресурс не безграничен и за неделю постоянной записи в каждом цикле можно убить. Обычно регистр сначала читают, а потом записывают если значение изменилось на величину больше определенного интервала. Тогда ресурс не так быстро улетает.
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 01 мар 2023, 12:50
odot писал(а): ↑01 мар 2023, 10:40
Обычно регистр сначала читают, а потом записывают если значение изменилось на величину больше определенного интервала.
Так модбас пул так и делает. Читает с заданной периодичностью, записывает по клику. Можно галочку поставить «закрыть окно диалога при получении ответа от устройства» и будет понятно, дошла ли команда до устройства.
По вопросам работы Форума можно обратиться по этим контактам.
-
odot
- здесь недавно
- Сообщения: 29
- Зарегистрирован: 01 апр 2022, 10:35
- Имя: Одот Автоматизация
- Страна: Россия
- город/регион: Новосибирск
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
ModBus Poll нет значений регистров.
Сообщение
odot » 01 мар 2023, 18:31
Jackson писал(а): ↑01 мар 2023, 12:50
odot писал(а): ↑01 мар 2023, 10:40
Обычно регистр сначала читают, а потом записывают если значение изменилось на величину больше определенного интервала.Так модбас пул так и делает. Читает с заданной периодичностью, записывает по клику. Можно галочку поставить «закрыть окно диалога при получении ответа от устройства» и будет понятно, дошла ли команда до устройства.
Практика показывает если есть вопросы с записью регистров Modbus Poll через некоторое время специалисту может потребоваться новый контроллер :))))
Некоторые производители не забывают об этом предупредить пользователей.
Modbus_damge_flash.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 01 мар 2023, 19:14
odot писал(а): ↑01 мар 2023, 18:31
Практика показывает если есть вопросы с записью регистров Modbus Poll через некоторое время специалисту может потребоваться новый контроллер :))))
Или контроллеру понадобится новый специалист.
По вопросам работы Форума можно обратиться по этим контактам.
-
mandrew
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 26 сен 2018, 08:51
- Имя: Андрей
- Страна: Беларусь
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
ModBus Poll нет значений регистров.
Сообщение
mandrew » 01 мар 2023, 22:15
Добрый вечер.
Ну и развязка….
Поставил другую версию Modbus Poll 7.1.0 и все начало прекрасно читатьсяписаться:
11.jpg
Можно выбрать любой формат данных, все отображаются.
Так что всем спасибо, тему можно закрывать….
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Jackson
- администратор
- Сообщения: 16034
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 585 раз
- Поблагодарили: 1034 раза
ModBus Poll нет значений регистров.
Сообщение
Jackson » 02 мар 2023, 10:03
То-то я проблем не замечаю, пользуясь версией ещё 4.3.4.
Ведь модбас-то не изменился за всё это время (с выхода релиза версии 4.3 в 2008 году).
Лишний раз доказывает то, что если всё работает то об обновлениях нет смысла и думать.
По вопросам работы Форума можно обратиться по этим контактам.
-
keysansa
- эксперт
- Сообщения: 2076
- Зарегистрирован: 20 дек 2018, 04:45
- Имя: Сергей
- Страна: РБ/РФ
- город/регион: РФ Сергиев Посад
- Благодарил (а): 1431 раз
- Поблагодарили: 139 раз
ModBus Poll нет значений регистров.
Сообщение
keysansa » 03 мар 2023, 18:49
petr2off писал(а): ↑01 мар 2023, 05:55
Есть такой нюанс у ПЛК — адрес с которого начинается адресное пространство Modbus.
У одних ПЛК это 0, у других это 1. В настройках программы есть птичка — которая настраивает этот момент.
У ОВНА, насколько я помню с 1 начинается.
Сталкивался еще, что 0х06 не поддерживается устройством. Только 0х10.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
-
mandrew
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 26 сен 2018, 08:51
- Имя: Андрей
- Страна: Беларусь
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
ModBus Poll нет значений регистров.
Сообщение
mandrew » 05 мар 2023, 19:57
Добрый вечер.
может кому пригодится.
В версии Poll 10.2 есть очень полезный сканер регистров:
11.JPG
можно увидеть все регистры которые отвечают на запрос.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
stesl
- шаман
- Сообщения: 947
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 85 раз
- Поблагодарили: 121 раз
ModBus Poll нет значений регистров.
Сообщение
stesl » 06 мар 2023, 03:29
Jackson писал(а): ↑28 фев 2023, 10:04
сие описано ЕМНИП в его спецификации
У меня впечатление, что вся спецификация Модбас из области ЕМНИП спецов старожилов ))
Ибо
Jackson писал(а): ↑01 мар 2023, 09:56
примеру функции 03h и 04h в половине случаев перепутаны в документации, действую методом подбора
читай — методом тыка ))
И тут спорно
petr2off писал(а): ↑28 фев 2023, 13:42
Одна из причин не убиваемой популярности Modbus — относительно простая структура пакетов
Мне кажется любой пакет любого протокола разобрать можно.
Причина неубиваемости Модбас, ИМХО — в том, что он по умолчанию в каждом чайнике есть. Сама железка, обеспечивающая обмен, скорее всего копеечная. А в целом — все привыкли
Вернуться в «Интерфейсы, протоколы, связь»
Перейти
- Работа форума
- База знаний (Knowledge Exchange)
- ↳ Eplan Electric P8
- ↳ Общий F.A.Q.
- ↳ Общие вопросы
- ↳ Новости
- ↳ Ошибки
- ↳ Проект
- ↳ Изделия
- ↳ Устройства
- ↳ Соединения
- ↳ Кабели
- ↳ Клеммы
- ↳ ПЛК
- ↳ Компоновка 2D
- ↳ Макросы
- ↳ Eplan API
- ↳ Сценарии (Только готовые решения)
- ↳ Внешняя обработка
- ↳ ProPanel
- ↳ Инструкции ProPanel (Только готовые решения)
- ↳ Прочие направления Eplan
- ↳ FieldSys (Топология)
- ↳ Preplanning
- ↳ Harness proD
- ↳ EEC One
- ↳ Advantech
- ↳ F.A.Q., Инструкции
- ↳ Allen Bradley
- ↳ Общие вопросы
- ↳ ПЛК
- ↳ Операторские панели
- ↳ B&R Automation
- ↳ F.A.Q.
- ↳ Danfoss
- ↳ DEIF A/S
- ↳ Общие вопросы
- ↳ UNI-LINE
- ↳ MULTI-LINE
- ↳ MULTI-LINE 300
- ↳ Emerson
- ↳ Общие вопросы
- ↳ КИП и регуляторы
- ↳ DeltaV
- ↳ ОВЕН
- ↳ Прософт-Системы
- ↳ Общие вопросы
- ↳ ПЛК REGUL
- ↳ Schneider Electric
- ↳ Общие вопросы
- ↳ ПЛК
- ↳ Панели оператора
- ↳ SCADA
- ↳ Электротехника
- ↳ Приводная техника
- ↳ SIEMENS
- ↳ Общие вопросы
- ↳ LOGO!
- ↳ ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
- ↳ Simatic Step7
- ↳ Simatic TIA Portal
- ↳ Simatic PCS 7
- ↳ Операторские панели
- ↳ WinCC
- ↳ Приводная техника (Sinamics, Micromaster, Masterdrive, Simoreg, Simotics)
- ↳ SmartGen
- ↳ Общие вопросы
- ↳ Промышленные (береговые) контроллеры
- ↳ Морские контроллеры и устройства
- ↳ WEINTEK (операторские панели)
- ↳ F.A.Q., Инструкции
- ↳ Архив
- ↳ Микроконтроллеры и электроника
- ↳ Arduino
- ↳ Raspberry
- ↳ Другие микроконтроллеры
- ↳ Электроника
- Общие вопросы АСУТП
- ↳ Общие вопросы
- ↳ Вопросы от студентов
- ↳ Литература
- ↳ Новости и отчётность
- ↳ Нормативы, ГОСТы, стандарты
- ↳ Информационная безопасность
- ↳ Проектирование и САПР
- ↳ Системная интеграция
- ↳ Разбор полетов
- ↳ Работа
- ↳ Заготовки для базы знаний
- ↳ Производство и технология
- ↳ MES — Системы автоматизации управления производством
- ↳ Метрология, КИП и датчики
- ↳ Исполнительные устройства, регуляторы
- ↳ Средний уровень автоматизации (управляющий)
- ↳ Алгоритмы
- ↳ Операторские панели
- ↳ Верхний уровень автоматизации (отображение)
- ↳ GE iFix
- ↳ Wonderware Intouch
- ↳ MasterScada
- ↳ SCADA+
- ↳ Альфа платформа
- ↳ Интерфейсы, протоколы, связь
- ↳ Радиосвязь
- ↳ Полезное ПО
- ↳ Электротехника, энергетика и электропривод
- ↳ Генераторы, электростанции и силовые агрегаты
- ↳ Теплотехника
- ↳ Подбор аналогов
- F.A.Q. (краткая выжимка из некоторых сообщений форума)
- ↳ Документация (вариант 1)
- ↳ Документация (вариант 2)
- ↳ Электротехника и электроэнергетика
- ↳ F.A.Q. по программируемым логическим контроллерам (PLC)
- ↳ Обсуждение F.A.Q. по PLC
- ↳ F.A.Q. по выбору PLC
- ↳ F.A.Q. по аппаратной части PLC
- ↳ F.A.Q. по языкам программирования
- ↳ F.A.Q. по структуре программ
- ↳ F.A.Q. по взаимодействию PLC с HMI
- О жизни
- ↳ Для дома, для семьи
- ↳ Комната смеха
- ↳ Электродвижение
Skip to content
Question:
A common issue faced by Modbus driver is this: the communication takes place, but the tag displays an error message. According to the driver log, you can identify a default error message. How can I interpret this message? Which are the protocol exception codes for Modbus driver?
Solution:
Firstly, there are some exception codes expected by Modbus protocol; these codes are returned by a device whenever a request is received but can’t be executed, for any reasons. When the driver receives these codes, it will register them in its communication log alongside the “MODBUS exception response” message.
The following table lists the exception codes as well as their meaning. Codes not listed below are specific to certain devices; therefore, you should look them up in their respective documentation.
Table:
Code (Hexadecimal) |
Name | Meaning |
01 | ILLEGAL FUNCTION |
The function code received in the query is not an allowable action for the slave. If a Poll Program Complete command was issued, then this code indicates that no program function preceded it. |
02 | ILLEGAL DATA ADDRESS |
The data address received in the query is not an allowable address for the slave and therefore cannot be used. |
03 | ILLEGAL DATA VALUE |
A value contained in the query data field is not an allowable value for the slave. |
04 | SLAVE DEVICE FAILURE |
An unrecoverable error occurred while the slave was attempting to perform the request action. |
05 | ACKNOWLEDGE |
The slave has accepted a request and is processing it, but a long duration of time is required. This response is returned to prevent a timeout error from occurring in the master. The master can then issue a Poll Program Complete message to determine if processing is completed. |
06 | SLAVE DEVICE BUSY |
The slave is processing a long-duration program command. The master should retransmit the message later when the slave is free. |
08 | MEMORY PARITY ERROR |
The slave attempted to read extended memory, but detected a parity error in the memory. The master can retry the request, but service may be required on the slave device. |
0A | GATEWAY PATH UNAVAILABLE | Used alongside gateways. Basically, this code means the gateway couldn’t allocate an internal path to process the request. Therefore, the gateway could probably be misconfigured or overloaded. |
0B | GATEWAY TARGET DEVICE FAILED TO RESPOND | Used alongside gateways. Basically, this code means that no answer was received by the destination device. Therefore, the device could probably be absent from the network. |
Related articles:
The articles below all refer to common issues faced by the Modbus driver:
- Multiple slaves with RS-485 converter.
- Discontinuous address in the device.
- Incrementing non-standard addresses.
- Scrambled bytes and words.
- Registers addresses indexation.
- Interpreting addresses prefixes.
Запрос:
Байт: 0: FC = 18 (hex)
Байт: 1-2: Число смещения
Ответ:
Байт: 0: FC = 18 (hex)
Байт: 1-2: Число байт (B
= 2 + число слов) (макс. 64)
Байт: 3-4: Число слов
(число слов, накопленных в FIFO)
(макс. 31)
Байт: 5-(B+2): Данные
регистров с начала FIFO
Исключения:
Байт: 0: FC = 98 (hex)
Байт: 1: код исключения
= 01 или 02 или 03
Пример:
Чтение содержимого
FIFO начало блока по смещению
0005 (40006 в Modicon 984), который
содержит 2 слова 1234 и 5678 hex непрочитанных
18 00 05 => 18 00 06 00 02 12 34
56 78
Помните, что эта
функция, выполняемая на 984, ограничена
в гибкости – предполагается, что блок
состоит из регистров количеством от 0
до 31, следуемый до 31 слов данных. Когда
функция завершается, слово количество
не сбрасывается в 0, что может быть
ожидаемо от FIFO операции.
В конечном счете, это
должно восприниматься как ограниченный
набор 16 регистров чтения, так как
последние могут использоваться для
выполнения всей функциональности.
6. Коды исключений
При возникновении
проблем SLAVE устройства
возвращают определенный набор кодов
исключений. Помните, что MASTER
устройство может послать команду
«теоретически» и использовать полученный
успешный или код исключения, чтобы
определить, на какие команды MODBUS
устройство ответит, и определить размер
различных областей данных, доступных
на SLAVE устройстве.
Все исключения
сигнализируются добавлением 0х80 к коду
функции запроса.
03 12 34 00 01 => 83 02
запрос читает 1 регистр
с индексом 0x1234, ответ –
исключение 2 – «неверный адрес данных»
Список исключений следующий:
01 Illegal function — неверная функция
Код функции, полученный
в запросе, не является допустимым
действием для SLAVE устройства.
Это может возникнуть, если код функции
применим только к новым контроллерам,
и не обеспечивается в выбранном
устройстве. Это может также означать,
что SLAVE устройство находится
в состоянии, непозволяющим выполнить
запрос этого типа, например, потому что
не сконфигурировано и было запрошено
возвратить значения регистров.
02 Illegal data address – неверный адрес данных
Адрес данных, полученный
в запросе не допустим для SLAVE
устройства. Более точно, комбинация
числа смещения и длины передачи неверна.
Для контроллера со 100 регистрами, запрос
со смещением 96 и длиной 4 успешен, а
запрос со смещением и длиной 5 выдаст
исключение 02.
03 Illegal data value – неверное значение данных
Значение, содержащееся
в поле данных запроса не допустимо для
SLAVE устройства. Это
указывает на ошибку в структуре остатка
сложного запроса, такую как, предполагаемая
длина неверна. Это не значит, что элемент
данных, предназначенный для хранения
в регистре, имеет значение, за границей
ожидаемого приложением, так как MODBUS
протокол не предполагает о значении
конкретного значения какого-то регистра.
04
ILLEGAL RESPONSE LENGTH – неверная длина ответа
Означает, что кадр
запроса генерирует ответ, размер которого
превышает допустимый MODBUS
размер данных. Используется только
функциями, выдающими многосоставной
ответ, такими как функции 20 и 21.
05
ACKNOWLEDGE – подтверждение
Предназначено для
использования совместно с программируемыми
командами.
06
SLAVE DEVICE BUSY — SLAVE устройство занято
Предназначено для
использования совместно с программируемыми
командами
07 NEGATlVE ACKNOWLEDGE – отрицательное подтверждение
Предназначено для
использования совместно с программируемыми
командами
08
MEMORY PARITY ERROR – ошибка четности памяти
Предназначено для
использования совместно с кодами функций
20 и 21 для указания, что расширенная
область файла не прошла проверку на
соответствие.
0A
GATEWAY PATH UNAVAILABLE – путь шлюза недоступен
Предназначено для
использования совместно со шлюзами
Modbus Plus, указывающее, что шлюз не смог
локализовать путь Modbus Plus для выполнения
запроса. Обычно означает, что шлюз не
сконфигурирован.
0B
GATEWAY TARGET DEVICE FAILED TO RESPOND – выбранный шлюз
выдал ошибку при ответе
Предназначено для
использования совместно со шлюзами
Modbus Plus, указывает на то, что от выбранного
устройства не было получено ответа.
Обычно означает, что устройство не
присутствует в сети.
Приложения.
А. Руководство по реализации клиента и
сервера.
Замечания в этом
разделе не должны приниматься как
обязательные ко всем случаям реализации
клиента и сервера. Конечно, если
придерживаться этого руководства, это
снизит интеграционные «сюрпризы» при
создании многоэлементных систем и
шлюзов для установленного MODBUS
оборудования. Структура программного
обеспечения предполагает знание
интерфейса BSD Sockets
service, что используется
например в UNIX и Windows
NT.
Соседние файлы в папке microcontroller01
- #
06.01.2022172.55 Кб2AVR Libc user manual V1.4.0.chm
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #