что такое coil в modbus

Стандартные функции протокола ModBus

Вспомним, как выглядит общая структура пакета ModBus:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Блоки «Адрес подчинённого устройства» и «Блок контроля подлинности» различаются в зависимости от версии протокола (RTU или TCP), а вот «Номер функции» и «Данные» в любой реализации одинаковы. Эти два блока образуют часть пакета, которую называют PDU (Protocol Data Unit), — именно она и важна при рассмотрении функций ModBus.

Read Coils — 01 (0x01)

Функция для чтения состояния дискретных выходов устройства.

Запрос:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Ответ:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

N* — количество запрошенных дискретных выходов/8. Состояния дискретных выходов (coils) передаются в виде 8-битных слов, поэтому параметр N равен ближайшему целому количеству слов, в которые умещается заданное количество coils.

n = N, если N делится на 8 без остатка, в противном случае n=N+1. Параметр n

Например, нужно прочитать 5 выходов. Тогда в ответе N=5/8=n=1. То есть в ответе после кода функции будет идти 1, а потом ещё один байт, в котором младшие 5 бит будут обозначать состояние запрошенных выходов.

Если устройство обнаружило ошибку при выполнении функции, оно отвечает исключением.

Ответ-исключение:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Пример:

Запрос 19 дискретных выходов, начиная с адреса 19:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

В ответе 3 полезных байта:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Функция для чтения состояния дискретных входов устройства.

Запрос:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Ответ:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

N* — количество запрошенных дискретных входов/8. Состояния дискретных входов (inputs) передаются в виде 8-битных слов, поэтому параметр N равен ближайшему целому количеству слов, в которые умещается заданное количество входов.

n = N, если N делится на 8 без остатка, в противном случае n=N+1. Параметр n

Например, нужно прочитать 5 входов. Тогда в ответе N=5/8=n=1. То есть в ответе после кода функции будет идти 1, а потом ещё один байт, в котором младшие 5 бит будут обозначать состояние запрошенных входов.

Если устройство обнаружило ошибку при выполнении функции, оно отвечает исключением.

Ответ-исключение:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Пример:

Запрос 22 дискретных входа, начиная с адреса 196:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

В ответе 3 полезных байта:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Read Holding Registers — 03 (0х03)

Функция для чтения регистров общего назначения устройства.

Запрос:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Ответ:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

N — количество запрошенных регистров. Каждый регистр состоит из двух байт, поэтому количество полезных байт в ответе равно 2*N.

Если устройство обнаружило ошибку при выполнении функции, оно отвечает исключением.

Ответ-исключение:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Пример:

Запрос на чтение трёх регистров начиная с адреса 107:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

В ответе значение 3-х регистров = 6 полезных байта:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Значения регистров (в десятичном виде):

регистр с адресом 107: 555

регистр с адресом 108: 0

регистр с адресом 109: 100

Read Input Registers — 04 (0х04)

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

Единственное отличие этой функции от функции 0х03 Read Holding Registers в том, что она обращается к другой области внутри устройства.

Производитель устройства с поддержкой ModBus сам определяет область памяти, в которой будут хранится «Input Registers».

Input Registers — также 16-битные регистры. В классическом представлении ModBus эти регистры предназначены для хранения значений сигнала на аналоговых входах устройства.

Пример:

Запрос двух входных регистров, начиная с адреса 1:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

В ответе содержится значения двух регистров = 4 байта данных:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Значения регистров (в десятичном виде):

регистр с адресом 1: 320

регистр с адресом 2: 17

Write Single Coil — 05 (0х05)

Функция для изменения состояния одного из дискретных выходов (coil) устройства.

Состояние выхода («вкл»/ «выкл») определяется константой, записываемой в регистр, соответствующий данному выходу. Значение константы 0хFF00 — определяет состояние «ВКЛ», а значение 0х0000 — состояние «ВЫКЛ».

Запрос:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Ответ:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

При успешном выполнении команды ответ совпадает с запросом.

Ответ-исключение:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Пример:

Запрос на «включение» выхода с адресом 172:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Если команда выполнена без ошибок, то ответ совпадает с запросом:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Write Single Register — 06 (0х06)

Функция для записи значения в один из регистров общего назначения (holding registers) устройства.

Состояние выхода («вкл»/ «выкл») определяется константой, записываемой в регистр, соответствующий данному выходу. Значение константы 0хFF00 — определяет состояние «ВКЛ», а значение 0х0000 — состояние «ВЫКЛ».

Запрос:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Ответ:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

При успешном выполнении команды ответ совпадает с запросом.

Ответ-исключение:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Пример:

Запись значения «3» в регистр с адресом 1:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Если команда выполнена без ошибок, то ответ совпадает с запросом:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Write Multiple Coils — 15 (0х0F)

Функция для изменения состояния сразу нескольких дискретных выходов устройства.

Запрос:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Значения выходов которые нужно записать передаются в виде 8-ми битных слов, т.е. каждый байт данных содержит состояние 8-ми выходов. Поэтому количество байт передаваемых данных равно ближайшему целому от деления количества выходов на 8:

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

Ответ:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Ответ-исключение:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Пример:

Запрос на запись состояния 10 выходов, начиная с выхода с адресом 19 (13 HEX):

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Запрос содержит два байта данных, содержащих состояния выходов, которые нужно записать:

(CD 01 hex) (1100 1101 0000 0001 binary). Соответствие битов состояния и выходов устройства определяется следующим образом:

Бит: 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1

Выход: 26 25 24 23 22 21 20 19 — — — — — — 28 27

Первый байт данных (CD hex) соответствует выходам 26-19. Младший бит соответствует выходу 19.

Второй байт (01 hex) соответствует выходам 28-27. Младший бит соответствует выходу 27.

Неиспользуемые биты в последнем байте — нули.

В ответе содержится подтверждение успешной записи:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Write Multiple Registers — 16 (0х10)

Функция для записи значений в несколько (от 1 до 123) последовательно расположенных регистров общего назначения (holding registers).

Запрос:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

N — количество регистров, в которые нужно записать новые значения. Регистры ModBus 16-битные, поэтому на каждый регистр приходится два байта данных.

Ответ:

В ответе содержится подтверждение успешной записи:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Ответ-исключение:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Пример:

Запрос на запись состояния двух регистров, начиная с регистра с адресом 1:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

В ответе содержится подтверждение успешной записи:

Источник

Как общаются машины: протокол Modbus

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

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

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

История Modbus

Modbus был представлен в 1979 году компанией Modicon (ныне Schneider Electric). Это был открытый стандарт, работающий по интерфейсу RS-232. Позже появилась реализации протокола для интерфейсов RS-485 и Modbus TCP. Протокол быстро набрал популярность, и многие производители стали внедрять его в своих устройствах.

Позже права на протокол были переданы некоммерческой организации Modbus Organization, которая до сегодняшнего дня владеет стандартом.

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

Физический уровень

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Логический уровень

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus
Различия протоколов Modbus

Modbus ASCII

Данные кодируются символами из таблицы ASCII и передаются в шестнадцатеричном формате. Начало каждого пакета обозначается символом двоеточия, а конец — символами возврата каретки и переноса строки. Это позволяет использовать протокол на линиях с большими задержками и оборудовании с менее точными таймерами.

Modbus RTU

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

Modbus TCP

Структура пакетов схожа с Modbus RTU, данные также кодируются в двоичный формат, и упаковываются в обычный TCP-пакет, для передачи по IP-сетям. Проверка целостности, используемая в Modbus RTU, не применяется, так как TCP уже имеет собственный механизм контроля целостности.

Формат пакета

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus
Форматы пакета разных реализаций 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 состоит из кода функции (чтение/запись), и данных, которые нужно считать или записать. При этом, коды функции различаются для разных типов данных. Разберем, какие бывают регистры, и функции для работы с ними.

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Примеры работы

Для примера работы с протоколом Modbus TCP воспользуемся максимально простой консольной утилитой modbus-cli, написанной на языке Ruby. Она позволяет легко читать и писать данные в регистры Modbus.

Попробуем прочесть состояние счетчиков переданных пакетов на промышленном коммутаторе Advantech EKI-5524SSI. Для начала необходимо определить адреса регистров, хранящие нужную информацию, для этого заглянем в документацию устройства. Описание регистров находятся в разделе «Modbus Mapping Table»:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus
Описание значений регистров в документации коммутаторов 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 — модули удаленного ввода-вывода

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbusМодули серии ADAM-6000 и WISE-4000 позволяют удаленно управлять цифровыми и аналоговыми входами/выходами по протоколу Modbus TCP. Используются для управления периферийными устройствами и сбора данных в режиме slave. Могут работать в паре с программируемым логическим контроллером, или подключаться напрямую к SCADA-серверу.⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

EKI-1200 — Modbus-шлюзы для преобразования интерфейсов

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в 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.

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Примеры применения

Система мониторинга теплиц

Решение 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 позволяет инженерам или менеджерам просматривать, контролировать и настраивать систему мониторинга через интрасеть или Интернет с помощью обычного веб-браузера с любого устройства, включая планшеты и смартфоны.

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Мониторинг системы нагрева воды солнечной энергией

Инжиниринговая компания должна была иметь возможность контролировать количество солнечной энергии, температуры и расход воды в системе нагрева воды на солнечной энергии для бассейна олимпийских размеров, обеспечиваемого их недавно разработанной солнечной панелью. Они также должны были иметь возможность непосредственно отслеживать эти значения и их аварийные сигналы на ЖК-панелях и сохранять эти значения для дальнейшего использования.

Модули Adam от Advantech предоставили заказчику решение, в котором использовались модули сбора данных, подключенные через RS485, и двухпроводная шина для передачи данных со всех датчиков. Эта системная архитектура имеет два основных преимущества: во-первых, она позволяет в любое время добавлять в систему большее количество датчиков модулей сбора данных, и, во-вторых, очень легко добавлять дополнительные метки в программное обеспечение для мониторинга и записи этих значений на ПК.

Источник

Протокол Modbus

Содержание

Основные понятия

В устройствах Wiren Board данные Modbus передаются по последовательным линиям связи RS-485. В последовательных линиях связи протокол RS-485 полудуплексный и работает по принципу «клиент-сервер». Каждое устройство в сети (кроме ведущего см. далее) имеет адрес от 1 до 247, адрес 0 используется для широковещательной передачи данных всем устройствам, а адреса 248–255 считаются зарезервированными согласно спецификации Modbus, их использование не рекомендуется.

Ведущее устройство («мастер», или «клиент») периодически опрашивает «ведомое», или «сервер». Ведущее устройство не имеет адреса, передача сообщений от устройства-сервера ведущему без запроса ведущего в протоколе не предусмотрена.

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в 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, содержащий запрошенные данные.

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Modbus-транзакция, прошедшая без ошибок

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Modbus-транзакция с ошибками

При возникновении ошибки устройством возвращается код ошибки. При обычной транзакции код функции в ответе возвращается без изменений; при ошибке старший бит кода функции устанавливается в единицу (то есть код функции + 0x80). Так же есть таймаут ожидания ответа от ведомого устройства — бессмысленно долго ждать ответ, который, возможно, никогда и не придет.

Структуры данных Modbus

В Modbus принято кодировать адреса и данные в формате big-endian, то есть в формате, когда байты следуют, начиная со старшего: например, при передаче шестнадцатеричного числа 0x1234 сначала устройством будет принят байт 0x12, а затем — 0x34. Для передачи данных другого типа, например, чисел с плавающей запятой (float), текстовых строк, даты и времени суток и т.п. производитель может выбрать свой собственный способ кодирования — для расшифровки получаемых данных важно ознакомится со спецификацией производителя устройства.

Модель данных Modbus

Обмен данными с Modbus-устройствами происходит через регистры. В протоколе Modbus определяется четыре типа регистров, показанных в таблице:

ТаблицаРазмерДоступ
Регистры флагов (Coils)1 битчтение и запись
Дискретные входы (Discrete Inputs)1 биттолько чтение
Регистры хранения (Holding Registers)16-битное словочтение и запись
Регистры ввода (Input Registers)16-битное словотолько чтение

Дискретные входы (Discrete Inputs) также являются однобитными регистрами, описывающими состояние входа устройства (например, подано напряжение — 1). Эти регистры поддерживают только чтение.

Регистры хранения (Holding Registers) и регистры ввода (Input Registers) представлены двухбайтовым словом и могут хранить значения от 0 до 65535 (0x0000 — 0xFFFF). Регистры ввода допускают только чтение (например, текущее значение температуры). Регистры хранения поддерживают как чтение, так и запись (для хранения настроек). В настоящее время во многих устройствах, в частности в устройствах Wiren Board, эти регистры не разделяются. Команды на чтение регистра хранения N и регистра ввода N обратятся к одному и тому же значению в адресном пространстве устройства.

Адреса регистров

Регистры в стандарте Modbus адресуются с помощью 16-битных адресов. Адресация начинается с нуля. Адрес регистра, таким образом, может принимать значения от 0 до 65535.

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

Например, при чтении регистра флагов (coil) номер 42, регистра дискретного входа (Discrete), регистров ввода и хранения (Input и Holding) с теми же адресами, можно получить четыре разных значения.

Нестандартная адресация

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

Например, регистр хранения с адресом 0 может записываться как 40001 или 400001, а Coil с адресом 0 как 000001.

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

Признаки использования нестандартной адресации:

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

Пример описания регистров в документации

В готовых шаблонах устройств для контроллера Wiren Board есть шаблон для однофазного счетчика электроэнергии SDM220 (/usr/share/wb-mqtt-serial/templates/config-sdm220.json). В документации от производителя «Eastron SDM 220 Modbus Smart Meter Modbus Protocol Implementation V1.0» перечислены регистры и соответствующие им измеряемые параметры, например:

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

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

Коды функций чтения и записи регистров

В следующей таблице приведены наиболее распространенные коды функций Modbus:

Код функцииHEXНазваниеДействие
10x01Read CoilsЧтение значений нескольких регистров флагов
20x02Read Discrete InputsЧтение значений нескольких дискретных входов
30x03Read Holding RegistersЧтение значений нескольких регистров хранения
40x04Read Input RegistersЧтение значений нескольких регистров ввода
50x05Write Single CoilЗапись одного регистра флагов
60x06Write Single RegisterЗапись одного регистра хранения
150x0FWrite Multiple CoilsЗапись нескольких регистров флагов
160x10Write Multiple RegisterЗапись нескольких регистров хранения

Команды условно можно разделить по типам: чтение значений — запись значений; операция с одним значением — операция с несколькими значениями.

Формат данных запросов и ответов Modbus

Рассмотрим подробнее, как происходит обмен данными между устройством-клиентом, отправляющим запрос, и устройством-сервером, отвечающим ему. На следующем рисунке показан обмен данными контроллера с устройством с адресом 0x01. Мы хотим прочесть 8 coil-регистров, начиная с первого.

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

В качестве данных мы получили шестнадцатеричное число 0x2D, то есть состояние восьми coil-регистров в двоичном виде такое: 0b10110100.

В следующей таблице приведены структуры данных запросов и ответов для основных функций Modbus.

Коды исключений (ошибки) Modbus

Если запрос не может по той или иной причине быть обработан устройством-сервером, то в ответ он отправляет сообщение об ошибке. Соообщение об ошибке содержит адрес Modbus-устройства, код функции, при выполнении которой произошла ошибка, увеличенный на 0x80, код ошибки и контрольную сумму:

что такое coil в modbus. Смотреть фото что такое coil в modbus. Смотреть картинку что такое coil в modbus. Картинка про что такое coil в modbus. Фото что такое coil в modbus

В этом случае мы попытались обратиться к несуществующему адресу регистра 0xFFFF и попытались прочесть 8 регистров флагов. В результате мы получили код ошибки 0x03 — «В поле данных передано неверное значение».

Наиболее распространенные коды ошибок Modbus приведены в следующей таблице:

Код ошибкиНазвание ошибкиЧто означает
1Illegal FunctionВ запросе был передан недопустимый код функции
2Illegal Data AddressУказанный в запросе адрес не существует
3Illegal Data ValueНеверный формат запроса, например количество байт в запросе не соответствует ожидаемому.

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

4Server Device FailureПроизошла невосстановимая ошибка на устройстве при выполнении запрошенной операции
5AcknowledgeЗапрос принят, выполняется, но выполнение потребует много времени; необходимо увеличить таймаут.
6Server Device BusyУстройство занято обработкой предыдущего запроса.
7Negative AcknowledgeУстройство не может выполнить запрос, необходимо получить от устройства дополнительную диагностическую информацию. Возможно, требуется тех. обслуживание.
8Memory Parity ErrorОшибка четности при обращении к внутренней памяти устройства.

Вычисление контрольной суммы Modbus

Для протокола Modbus RTU 16-битная контрольная сумма (CRC) вычисляется по алгоритму, описанному в спецификации Modbus, в документе «Modbus Serial Line Protocol and Implementation Guide», раздел «CRC-generation». Передающее устройство формирует два байта контрольной суммы на основе данных сообщения, а принимающее устройство заново вычисляет контрольную сумму и сравнивает с полученной. Совпадение принятой и вычисленной контрольной суммы Modbus RTU считается индикатором успешного обмена данными.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *