Modbus tcp exception что это
Following a request, there are 4 possible outcomes from the slave.
1. The request is successfully processed by the slave and a valid response is sent.
2. The request is not received by the slave therefore no response is sent.
3. The request is received by the slave with a parity, CRC or LRC error.
The slave ignores the request and sends no response.
4. The request is received without an error, but cannot be processed by the slave for another reason. The slave replies with an exception response.
In a normal response, the slave echoes the function code. The first sign of an exception response is that the function code is shown in the echo with its highest bit set. All function codes have 0 for their most significant bit. Therefore, setting this bit to 1 is the signal that the slave cannot process the request.
Function Code in Request
01 ( 01 hex) 0000 0001
02 ( 02 hex) 0000 0010
130 ( 82 hex) 1000 0010
04 ( 04 hex) 0000 0100
Here is an example of a request with an Exception Response:
This command is requesting the ON/OFF status of discrete coil #1186
from the slave device with address 10.
0A 01 04A1 0001 AC63
Following the Function Code is the Exception Code. The exception code gives an indication of the nature of the problem. The possible codes are shown in the table below.
The exception code shown above 02 is an indication that coil #1186 is an illegal address in the slave. This coil has not been defined in the slave’s modbus map.
The exception codes as explained in the Modbus specification are:
Illegal
Function
Illegal Data Address
The data address received in the query is not an allowable address for the slave. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, a request with offset 96 and length 4 would succeed, a request with offset 96 and length 5 will generate exception 02.
( 03 hex)
Slave Device Failure
( 05 hex)
The 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 master. The master can next issue a Poll Program Complete message to determine if processing is completed.
( 06 hex)
The slave is engaged in processing a long-duration program command. The master should retransmit the message later when the slave is free..
( 07 hex)
( 08 hex)
The slave attempted to read extended memory or record file, but detected a parity error in memory. The master can retry the request, but service may be required on the slave device.
( 0A hex)
( 0B hex)
Copyright © 2020 Simply Modbus. All rights reserved
Modbus-TCP
Не следует путать «Modbus» и «Modbus Plus». Modbus Plus — проприетарный протокол, принадлежащий Schneider Electric. Физический уровень Modbus Plus уникальный, похож на Ethernet 10BASE-T, полудуплекс по одной витой паре, скорость 2 Мбит/с. Транспортный протокол Modbus Plus — HDLC, поверх которого специфицировано расширение для передачи Modbus PDU.
Многие производители электронного оборудования поддержали стандарт, на рынке появились сотни использующих его изделий.
Специфическая терминология
Modbus специфицирует 4 типа данных:
Состав стандарта
Стандарты Modbus состоят из 3 частей:
Достоинства стандарта
Основные достоинства стандарта — открытость и массовость. Промышленностью сейчас (2014 г.) выпускается очень много типов и моделей датчиков, исполнительных устройств, модулей обработки и нормализации сигналов и др. Практически все промышленные системы контроля и управления имеют программные драйверы для работы с Modbus-сетями.
Недостатки стандарта
Контроллеры на шине Modbus взаимодействуют, используя модель ведущий — ведомый, основанную на транзакциях, состоящих из запроса и ответа.
Спецификация Modbus описывает структуру запросов и ответов. Их основа — элементарный пакет протокола, так называемый PDU (Protocol Data Unit). Структура PDU не зависит от типа линии связи и включает в себя функции и поле данных. функции ируется однобайтовым полем и может принимать значения в диапазоне 1…127. Диапазон значений 128…255 зарезервирован для ов ошибок. Поле данных может быть переменной длины. Размер пакета PDU ограничен 253 байтами.
| функции | данные |
|---|---|
| 1 байт | N ≤ 252 (байт) |
Для передачи пакета по физическим линиям связи PDU помещается в другой пакет, содержащий дополнительные поля. Этот пакет носит название ADU (Application Data Unit). Формат ADU зависит от типа линии связи. Существуют три варианта ADU, два для передачи данных через асинхронный интерфейс и один — через TCP/IP сети:
Общая структура ADU следующая (в зависимости от реализации, некоторые из полей могут отсутствовать):
| адрес ведомого (подчинённого) устройства | функции | данные | блок обнаружения ошибок |
|---|
Максимальный размер ADU для последовательных сетей RS232/RS485 — 256 байт, для сетей TCP — 260 байт.
Для Modbus TCP ADU выглядит следующим образом:
| ID транзакции | ID протокола | длина пакета | адрес ведомого устройства | функции | данные |
|---|
Следует обратить внимание, что поле контроля ошибок в Modbus TCP отсутствует, так как целостность данных обеспечивает TCP/IP-стек.
В действующей в настоящее время спецификации протокола определяются три категории ов функций:
Стандартные команды Их описание должно быть опубликовано и утверждено Modbus-IDA. Эта категория включает в себя как уже определенные, так и неиспользуемые в настоящее время ы. Пользовательские команды Два диапазона ов (от 65 до 72 и от 100 до 110), для которых пользователь может назначить произвольную функцию. При этом не гарантируется, что какое-то другое устройство не будет использовать тот же самый для выполнения другой функции. Зарезервированные В эту категорию входят ы функций, не являющиеся стандартными, но уже используемые в устройствах, производимых различными компаниями. Это ы 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.
Одно из типичных применений протокола — чтение и запись данных в регистры контроллеров. Спецификация протокола определяет четыре таблицы данных:
| Таблица | Тип элемента | Тип доступа |
|---|---|---|
| Регистры флагов ( Coils ) | один бит | чтение и запись |
| Дискретные входы ( Discrete Inputs ) | один бит | только чтение |
| Регистры ввода ( Input Registers ) | 16-битное слово | только чтение |
| Регистры хранения ( Holding Registers ) | 16-битное слово | чтение и запись |
Доступ к элементам в каждой таблице осуществляется с помощью 16-битного адреса, первой ячейке соответствует адрес 0. Таким образом, каждая таблица может содержать до 65536 элементов. Спецификация не определяет, что физически должны представлять собой элементы таблиц и по каким внутренним адресам устройства они должны быть доступны. Например, допустимо организовать перекрывающиеся таблицы. В этом случае команды, работающие с дискретными данными и с 16-битными регистрами, будут фактически обращаться к одним и тем же данным.
| номер функции | запрос/ответ | |||||
|---|---|---|---|---|---|---|
| 1 (0x01) | A1 | A0 | Q1 | Q0 | ||
| N | D (N байт) | |||||
| 2 (0x02) | A1 | A0 | Q1 | Q0 | ||
| N | D (N байт) | |||||
| 3 (0x03) | A1 | A0 | Q1 | Q0 | ||
| N | D (N байт) | |||||
| 4 (0x04) | A1 | A0 | Q1 | Q0 | ||
| N | D (N байт) | |||||
| 5 (0x05) | A1 | A0 | D1 | D0 | ||
| A1 | A0 | D1 | D0 | |||
| 6 (0x06) | A1 | A0 | D1 | D0 | ||
| A1 | A0 | D1 | D0 | |||
| 15 (0x0F) | A1 | A0 | Q1 | Q0 | N | D (N байт) |
| A1 | A0 | Q1 | Q0 | |||
| 16 (0x10) | A1 | A0 | Q1 | Q0 | N | D (N байт) |
| A1 | A0 | Q1 | Q0 | |||
Доступ к данным
Чтение данных
Для чтения значений из перечисленных выше таблиц данных используются функции с ами 1—4 (шестнадцатеричные значения 0x01—0x04):
Запрос состоит из адреса первого элемента таблицы, значение которого требуется прочитать, и количества считываемых элементов. Адрес и количество данных задаются 16-битными числами, старший байт каждого из них передается первым.
В ответе передаются запрошенные данные. Количество байт данных зависит от количества запрошенных элементов. Перед данными передается один байт, значение которого равно количеству байт данных.
Значения регистров хранения и регистров ввода передаются начиная с указанного адреса, по два байта на регистр, старший байт каждого регистра передаётся первым:
| байт 1 | байт 2 | байт 3 | байт 4 | … | байт N-1 | байт N |
|---|---|---|---|---|---|---|
| RA,1 | RA,0 | RA+1,1 | RA+1,0 | … | RA+Q-1,1 | RA+Q-1,0 |
Значения флагов и дискретных входов передаются в упакованном виде: по одному биту на флаг. Единица означает включённое состояние, ноль — выключенное. Значения запрошенных флагов заполняют сначала первый байт, начиная с младшего бита, затем следующие байты, также от младшего бита к старшим. Младший бит первого байта данных содержит значение флага, указанного в поле «адрес». Если запрошено количество флагов, не кратное восьми, то значения лишних битов заполняются нулями:
| байт 1 | … | байт N | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FA+7 | FA+6 | FA+5 | FA+4 | FA+3 | FA+2 | FA+1 | FA | … | 0 | … | 0 | FA+Q-1 | FA+Q-2 | … | |
Запись одного значения
Команда состоит из адреса элемента (2 байта) и устанавливаемого значения (2 байта).
Для регистра хранения значение является просто 16-битным словом.
Для флагов значение 0xFF00 означает включённое состояние, 0x0000 — выключенное, другие значения недопустимы.
Если команда выполнена успешно, ведомое устройство возвращает копию запроса.
Запись нескольких значений
Команда состоит из адреса элемента, количества изменяемых элементов, количества передаваемых байт устанавливаемых значений и самих устанавливаемых значений. Данные упаковываются так же, как в командах чтения данных.
Ответ состоит из начального адреса и количества изменённых элементов.
Изменение регистров
Команда состоит из адреса регистра и двух 16-битных чисел, которые используются как маски, с помощью которых можно индивидуально сбросить или установить отдельные биты в регистре. Конечный результат определяется формулой:
Результат = (Текущее_значение AND Маска_И) OR (Маска_ИЛИ AND (NOT Маска_И))
Чтение с записью
Этот функции выполняет комбинацию одной операции чтения и одной операции записи в одной транзакции Modbus.
Очереди данных
Функция предназначена для получения 16-битных слов из очереди, организованной по принципу «первым пришёл — первым ушёл» (FIFO).
Доступ к файлам
Эти функции используются для доступа к 16-битным регистрам, организованным в файлы, состоящие из записей произвольной длины. В команде указывается номер файла, номер записи и длина записи в 16-битных словах. С помощью одной команды можно записать или прочитать несколько записей, не обязательно соседних.
Кроме того, команда содержит однобайтовый для указания типа ссылки на данные. В действующей версии стандарта определен только один тип (описанный выше) с ом 0x06.
Диагностика
Перечисленные ниже функции предназначены для устройств на последовательных линиях связи (Modbus RTU и Modbus ASCII).
Функция предназначена для получения информации об индикаторах состояния на удалённом устройстве. Функция возвращает один байт, каждый бит которого соответствует состоянию одного индикатора.
Эти функции предназначены для проверки функционирования последовательной линии связи.
Функция предназначена для получения информации о типе устройства и его состоянии. Формат ответа зависит от устройства.
Другие
Функция предназначена для передачи данных в произвольных форматах (определённых другими стандартами) от ведущего (client) к ведомому (server) и обратно.
Тип передаваемых данных определяется дополнительным ом (MEI — Modbus Encapsulated Interface), передаваемым после номера функции. Стандарт определяет MEI 13 (0x0D), предназначенный для инкапсуляции протокола CANopen. MEI 14 (0x0E) используется для получения информации об устройстве и MEI в диапазонах 0—12 и 15—255 зарезервированы.
Во время обмена данными могут возникать ошибки двух типов:
При передаче по асинхронным линиям связи ошибки первого типа обнаруживаются при помощи проверки соответствия принятого запроса установленному формату ADU и вычисления контрольной суммы. Дополнительно для проверки каждого символа может использоваться бит четности. Если подчинённое устройство обнаруживает искажение данных, принятый запрос игнорируется, ответное сообщение не формируется. Главное устройство может обнаружить ошибку по отсутствию ответа.
В Modbus TCP дополнительная проверка целостности данных не предусмотрена. Передача данных без искажений обеспечивается протоколами TCP/IP.
При ошибках второго типа подчинённое устройство отсылает сообщение об ошибке (если запрос адресован этому устройству; на широковещательные запросы ответ не отправляется). Признаком того, что ответ содержит сообщение об ошибке, является установленный старший бит номера функции. За номером функции, вместо обычных данных, следует ошибки и, при необходимости, дополнительные данные об ошибке.
Стандартные ы ошибок
Ниже приведён пример команды ведущего устройства и ответов ведомого (для Modbus RTU).
Как общаются машины: протокол Modbus
Благодаря универсальности и открытости, стандарт позволяет интегрировать оборудование разных производителей. Modbus используется для сбора показания с датчиков, управления реле и контроллерами, мониторинга, и т.д.
В статье разберем реализации протокола Modbus, форматы данных, программное обеспечение для работы с протоколом. Попробуем на практике прочитать данные из устройства.
История Modbus
Modbus был представлен в 1979 году компанией Modicon (ныне Schneider Electric). Это был открытый стандарт, работающий по интерфейсу RS-232. Позже появилась реализации протокола для интерфейсов RS-485 и Modbus TCP. Протокол быстро набрал популярность, и многие производители стали внедрять его в своих устройствах.
Позже права на протокол были переданы некоммерческой организации Modbus Organization, которая до сегодняшнего дня владеет стандартом.
В описании стандарта Modbus используются терминология, унаследованная от языков релейной логики. Так, например, некоторые регистры называются катушками (англ. coil).
Физический уровень
Логический уровень
Различия протоколов Modbus
Modbus ASCII
Данные кодируются символами из таблицы ASCII и передаются в шестнадцатеричном формате. Начало каждого пакета обозначается символом двоеточия, а конец — символами возврата каретки и переноса строки. Это позволяет использовать протокол на линиях с большими задержками и оборудовании с менее точными таймерами.
Modbus RTU
В протоколе Modbus RTU данные кодируются в двоичный формат, и разделителем пакетов служит временной интервал. Этот протокол критичен к задержкам и не может работать, например, на модемных линиях. При этом, накладные расходы на передачу данных меньше, чем в Modbus ASCII, так как длина сообщений меньше.
Modbus TCP
Структура пакетов схожа с Modbus RTU, данные также кодируются в двоичный формат, и упаковываются в обычный TCP-пакет, для передачи по IP-сетям. Проверка целостности, используемая в Modbus RTU, не применяется, так как TCP уже имеет собственный механизм контроля целостности.
Формат пакета
Форматы пакета разных реализаций Modbus
Все устройства Modbus взаимодействуют, следуя модели master-slave. Запросы может инициировать только master-устройство, slave-устройства могут только отвечать на запросы, и не могут самостоятельно начинать передачу данных. В зависимости от реализации протокола, заголовки пакета различаются. Вот основные составляющие пакета, которые важно знать:
ADU (Application Data Unit) — пакет Modbus целиком, со всеми заголовками, PDU, контрольной суммой, адресом и маркерами. Отличается, в зависимости от реализации протокола.
PDU (protocol data unit) — основная часть пакета, одинаковая для всех реализаций протокола. Содержит сам payload.
Адрес устройства — адрес получателя, то есть slave-устройства. В одном сегменте Modbus-сети могут находится до 247 устройств. Только slave-устройства имеют различающиеся адреса, master-устройство не имеет адреса. Адрес «0» используется для широковещательных запросов от master, при этом, slave-устройства не могут отвечать на эти широковещательные пакеты.
Контрольная сумма — алгоритмы проверки целостности пакетов. В Мodbus RTU и ASCII используется 2 байта контрольной суммы. В Modbus RTU применяется алгоритм CRC16, в Modbus ASCII — более простой и менее надежный LRC8. В Modbus TCP контрольная сумма не добавляется в ADU, так как целостность проверяется на уровне TCP.
Мы не будем разбирать дополнительные заголовки, специфичные для каждой отдельной реализации протокола, так как это не имеет существенного значения при работе с протоколом на прикладном уровне.
Регистры и функции Modbus
В упрощенном виде, структура запросов Modbus состоит из кода функции (чтение/запись), и данных, которые нужно считать или записать. При этом, коды функции различаются для разных типов данных. Разберем, какие бывают регистры, и функции для работы с ними.
Примеры работы
Для примера работы с протоколом Modbus TCP воспользуемся максимально простой консольной утилитой modbus-cli, написанной на языке Ruby. Она позволяет легко читать и писать данные в регистры Modbus.
Попробуем прочесть состояние счетчиков переданных пакетов на промышленном коммутаторе Advantech EKI-5524SSI. Для начала необходимо определить адреса регистров, хранящие нужную информацию, для этого заглянем в документацию устройства. Описание регистров находятся в разделе «Modbus Mapping Table»:
Описание значений регистров в документации коммутаторов EKI
Видно, что значение переданных пакетов для одного порта хранится в четырех регистрах, и для первого порта это регистры с 38193 по 38197. Также дано описание формата хранения данных, из которого следует, что целое число переданных пакетов хранится шестнадцатеричном формате, и значение 11223344 пакетов будет записано как 0xAB4130, справа налево.
read — команда чтения. Программа сама понимает, какую конкретно команду чтения использовать в зависимости от адреса регистра, в нашем случае будет использована команда «04», для чтения 16-битных регистров.
192.168.0.17 — IP-адрес устройства.
38193 — начальный адрес регистра.
4 — смещение относительно начального адреса. Мы читаем четыре регистра для порта 1, как следует из даташита.
Получаем ответ, содержащий значения четырех регистров. Видим, что число пакетов невелико: 0x3459, то есть 13401, — коммутатор был включен недавно.
Недостатки протокола Modbus
Справедливости ради, стоит упомянуть и о недостатках протокола. Так как он разрабатывался более 40 лет назад, когда производительность процессоров была существенно ниже и протоколы разрабатывались без учета защиты данных, он имеет рад минусов:
Оборудование с поддержкой Modbus
Advantech предлагает широкий спектр промышленного оборудования с поддержкой протокола Modbus для любых задач: автоматизации, управления, сбора и передачи данных.
ADAM-6000 и WISE-4000 — модули удаленного ввода-вывода
Модули серии ADAM-6000 и WISE-4000 позволяют удаленно управлять цифровыми и аналоговыми входами/выходами по протоколу Modbus TCP. Используются для управления периферийными устройствами и сбора данных в режиме slave. Могут работать в паре с программируемым логическим контроллером, или подключаться напрямую к SCADA-серверу.⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
EKI-1200 — Modbus-шлюзы для преобразования интерфейсов
Для преобразования протоколов Modbus RTU/ASCII в Modbus TCP, используются Modbus шлюзы. Устройства серии EKI-1200 имеют на борту до четырех последовательных интерфейсов RS-232/422/485, и два Ethernet-порта. Они позволяют объединить в одну сеть устройства с разными протоколами. Например, подключить slave устройство, поддерживающее только Modbus RTU, по интерфейсу RS-485 к сегменту сети Modbus TCP.
APAX-5000, ADAM-3600, WISE-5000 — контроллеры автоматизации
Контроллеры поддерживают функции Modbus RTU в качестве slave/master и клиента/сервера Modbus TCP.
Примеры применения
Система мониторинга теплиц
Решение Advantech для мониторинга интегрирует устройства TPC-1070H, ADAM-6024, ADAM-6050, ADAM-6060 и программное обеспечение WebAccess в машинном шкафу рядом с сельскохозяйственными угодьями. Соединяясь с различными чувствительными устройствами, модули ADAM-6000 могут в режиме реального времени получать данные об окружающей среде и контролировать переключение оборудования, чтобы гарантировать, что теплица находится в оптимальной среде для роста растений. Благодаря особой функции Advantech — графической логике условий (GCL), пользователи могут определять свои собственные правила логики управления и загружать эти правила в модули ввода / вывода Ethernet ADAM-6000, а затем модули автоматически выполняют логические правила, как автономные модули. контроллер. Еще одна особенность — Peer-to-Peer (P2P) использует наиболее открытую и гибкую сеть Ethernet, чтобы не только упростить процесс внедрения без контроллера, но и сэкономить затраты на аппаратное оборудование.
Все полученные данные затем передаются через Ethernet на компьютер с сенсорной панелью TPC-1070H. Благодаря системе охлаждения без вентилятора и передней панели, соответствующей стандарту IP65, TPC-1070H представляет собой прочную и компактную конструкцию, подходящую для изменяемой операционной среды, а его мощные вычислительные возможности способны обрабатывать большие объемы данных. Для управления устройствами Advantech WebAccess позволяет инженерам или менеджерам просматривать, контролировать и настраивать систему мониторинга через интрасеть или Интернет с помощью обычного веб-браузера с любого устройства, включая планшеты и смартфоны.
Мониторинг системы нагрева воды солнечной энергией
Инжиниринговая компания должна была иметь возможность контролировать количество солнечной энергии, температуры и расход воды в системе нагрева воды на солнечной энергии для бассейна олимпийских размеров, обеспечиваемого их недавно разработанной солнечной панелью. Они также должны были иметь возможность непосредственно отслеживать эти значения и их аварийные сигналы на ЖК-панелях и сохранять эти значения для дальнейшего использования.
Модули Adam от Advantech предоставили заказчику решение, в котором использовались модули сбора данных, подключенные через RS485, и двухпроводная шина для передачи данных со всех датчиков. Эта системная архитектура имеет два основных преимущества: во-первых, она позволяет в любое время добавлять в систему большее количество датчиков модулей сбора данных, и, во-вторых, очень легко добавлять дополнительные метки в программное обеспечение для мониторинга и записи этих значений на ПК.




