[Из песочницы] Применение протокола Modbus с устройствами мониторинга транспорта

Протокол Modbus – самый распространенный промышленный протокол для M2M- взаимодействия. Является стандартом де-факто и поддерживается почти всеми производителями промышленного оборудования.

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

Существует 3 формата протокола Modbus: Modbus RTU, Modbus TCP, Modbus ASCII. Modbus ASCII в природе почти не встречается и по этой причине нам сейчас не интересен.

Modbus TCP предназначен для работы в локальных сетях. Тоже не наш случай.

Modbus RTU наиболее распространенный вариант. Работает поверх RS-485/232. То, что надо. Далее под термином Modbus будет описываться именно это формат.

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

Ниже приведена картинка с описанием и некоторыми терминами из протокола.

Все параметры делятся с одной стороны на входы и выходы. Входы можно только читать, а выходы читать и писать.

С другой стороны, бывают дискретные входы/выходы размером в один бит и 16- битные регистры (что характерно, размером 16 бит).

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

Например, для чтения дискретных входов используется функция «READ DISCRETE INPUTS» с кодом 2.

image

В настоящий момент в терминалах УМКа302 реализованы функции чтения всех стандартных типов, такие как 1, 2, 3 и 4.

Кроме того, на протокол Modbus предполагает, что есть устройства с двумя разными ролями:
Master – ведущее устройство, которое опрашивает все остальные устройства. Мастер на шине может быть только один.

Slave – ведомое устройство. Его опрашивает мастер. У каждого ведомого есть адрес в диапазоне от 1 до 247. Ведомых устройств на шине может быть несколько. Адреса ведомых в одной шине должны быть уникальными.


1. Реализация Modbus в терминале УМКа302

Поддержка протокола Modbus для УМКа302 реализована с версии 2.11.0

Терминалы УМКа302 берут на себя роль Master в шине Modbus и опрашивают Slave устройства.
Терминалы УМКа302 поддерживают чтение до 32 параметров. Возможно чтение 32 параметров с одного подключенного Slave устройства, чтение одного параметра с 32 подключенных Slave устройств и все промежуточные комбинации.

Перед началом работы с Modbus необходимо настроить интерфейс. Настройка интерфейса RS-485 производится командой «RS485 8,19200», где 8 – режим Modbus, а 19200 – скорость работы интерфейса.

Далее (хотя это можно сделать и в последнюю очередь), определяем список параметров, которые будут передаваться на сервер. Допустим, у нас 2 устройства, с каждого из которых мы будем снимать по 9 параметров. Кроме того, мы хотим, чтобы между первым и вторым устройством была дырка в 7 параметров на дальнейшее расширение. В этом случаю мы должны включить передачу параметров Modbus и настроить маску передаваемых параметров. Воспользуемся командой «SetMdb 1,0x1FF01FF», где 1 – включить передачу параметров на сервер, а 0x1FF01FF маска передаваемых параметров, полученная с помощью калькулятора.

image

После перезагрузки на вкладке истории мы должны получить следующее:

image

На сервер в протоколах Wialon IPS 1.1 и 2.0 параметры передаются с такими же именами, как и на вкладке истории. Т.е. Mdb0- Mdb8, Mdb16- Mdb24.

В протоколе Wialon Combine параметры передаются с типом «Custom Parameters» начиная с параметра 256 по 287. Т.е. Mdb0 передается как param256, Mdb1 передается как param257 и т.д.

image


2. Пример подключения устройства

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

карта регистров устройства. В ней описываются адреса и типы параметров конкретного устройства.

Возьмем для примера станцию катодной защиты «СИГНАЛ» СКЗ-ИП-Б1. У меня есть для нее эмулятор. Сама станция показана на картинке.

image

Пример куска карты регистров приведен на рисунке ниже.

image

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

УМКа302 умеет автоматически строить план опроса Modbus устройств таким образом, чтобы уменьшить количество запросов. Это позволяет значительно сократить время опроса устройства.
Для имитации станции воспользуемся программой-имитатором.
Внешний вид программы приведен на рисунке ниже.

Для настройки параметров служит команда вида «MDBPARAMn [X[,Y[,Z[,A[,B]]]]]», где n – номер параметра от 0 до 31.
X – адрес устройства на шине от 1 до 247 или 0, если опрос отключен.
Y – тип запрос. Про типы запросов ниже.
Z – начальный адрес регистра или входа для выбранного запроса.
A – формула пересчета. Как в CAN-фильтрах.
B – имя параметра. Как в CAN-фильтрах.

image

Тип запроса Y выбирается из следующих соображений:

Y=0 – функция 1. Чтение 1 бита типа Coils;
Y=1 – функция 2. Чтение 1 бита типа Input Discrete;
Y=2 – функция 3. Чтение 1 регистра типа Holding Registers. Беззнаковое. 0…65535. Y=3 – функция 3. Чтение 1 регистра типа Holding Registers. Знаковое -32768…32767 Y=4 – функция 4. Чтение 1 регистра типа Input Register. Беззнаковое. 0…65535.
Y=5 – функция 4. Чтение 1 регистра типа Input Register. Знаковое -32768…32767
Y=6 – функция 3. Чтение 2 регистров типа Holding Registers. Регистры обрабатываются как float. Младшая половина в младшем регистре (Порядок байт 1023).
Y=7 – функция 4. Чтение 2 регистров типа Input Register. Регистры обрабатываются как float. Младшая половина в младшем регистре (Порядок байт 1023).
Y=8 – функция 3. Чтение 2 регистров типа Holding Registers. Регистры обрабатываются как знаковое целое. Младшая половина в младшем регистре (Порядок байт 1023).
Y=9 – функция 4. Чтение 2 регистров типа Input Register. Регистры обрабатываются как знаковое целое. Младшая половина в младшем регистре (Порядок байт 1023).

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

Настроем имитатор на работу по 1 адресу. Смотрим карту. Видим следующее:

image

Настраиваем первые 5 параметров командами:
MdbParam0 1,7,0,,I
MdbParam1 1,7,2,,U
MdbParam2 1,7,4,,PP
MdbParam3 1,7,6,,E
MdbParam4 1,7,8,,Uin

Настраиваем температуру:
MdbParam5 1,5,12,,T

Настраиваем время работы:
MdbParam6 1,9,13,,Twork
MdbParam7 1,9,15,,Tstab

Настраиваем последний параметр
MdbParam8 1,7,18,,SP

Перезагружаем. Смотрим командой «Mdb»

image

Видим следующее: параметры с 0, 1, 2, 4, 5 отображаются корректно.

Параметр 3 отображается с коэффициентом 3200. Это стандартный коэффициент для счетчика. Введем в настройки терминала формулу пересчета.
MdbParam3 1,7,6,x/3200,E

Параметры 6 и 7 отображаются в секундах. Переведем в часы через формулу пересчета:
MdbParam6 1,9,13,x/3600,Twork
MdbParam7 1,9,15,x/3600,Tstab
Параметр 8 не отображается. Имитатор не поддерживает этот параметр. Видимо параметр появился в карте позже.

Перезагружаем. Смотрим историю.

image

Опрос настроен. Смотрим результат в системе мониторинга транспорта.

image

© Habrahabr.ru