OpenSCADA

Модули/ModBus

This page is a translated version of the page Modules/ModBus and the translation is 94% complete.

English • ‎mRussian • ‎Українська
Модуль Имя Версия Лицензия Источник Языки Платформы Тип Автор
ModBus ModBus 3.8 GPL2 daq_ModBus.so en,uk,ru,de x86,x86_64,ARM Сбор Данных Роман Савоченко
Описание
Предоставляет реализацию клиентского сервиса протокола ModBus. Поддерживаются ModBus/TCP, ModBus/RTU и ModBus/ASCII протоколы.
ModBus ModBus 2.10 GPL2 daq_ModBus.so en,uk,ru,de x86,x86_64,ARM Протокол Роман Савоченко
Описание
Предоставляет реализацию протоколов ModBus. Поддерживаются ModBus/TCP, ModBus/RTU и ModBus/ASCII протоколы.
-

ModBus — коммуникационный протокол, основанный на клиент-серверной архитектуре. Разработан фирмой Modicon для использования в контроллерах с программируемой логикой (PLC). Стал стандартом де-факто в промышленности и широко применяется для организации связи промышленного электронного оборудования. Используется для передачи данных через последовательные линии связи RS-485, RS-422, RS-232, а также сети TCP/IP. В настоящее время поддерживается некоммерческой организацией ModBus-IDA.

Существуют три режима протокола: ModBus/RTU, ModBus/ASCII и ModBus/TCP. Первые два используют последовательные линии связи (в основном RS-485, реже RS-422/RS-232), последний использует сети TCP/IP для передачи данных.

Модуль сбора данных предоставляет возможность собирать информацию у различных устройств по протоколу ModBus во всех режимах. Также, модулем реализуются функции горизонтального резервирования, а именно — совместной работы с удалённой станцией этого-же уровня. В то же время, модуль протокола позволяет сформировать и выдать данные по протоколу ModBus в различных режимах и через интерфейсы, поддерживаемые модулями подсистемы "Транспорты".

Contents

1 Общее описание протокола ModBus

Протокол ModBus/{RTU,ASCII} предполагает одно ведущее (запрашивающее) устройство в линии (master), которое может передавать команды одному или нескольким ведомым устройствам (slave), обращаясь к ним по уникальному адресу в линии. Синтаксис команд протокола позволяет адресовать 247 устройств на одной линии связи стандарта RS-485 (реже RS-422 или RS-232). В случае с режимом TCP, адресация исключена из протокола, поскольку выполняется на уровне TCP/IP стека.

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

Окончание ответной посылки определяется в зависимости от режима. В режиме RTU окончание посылки определяется по временному интервалу между окончанием приёма предыдущего байта и началом приёма следующего — время символа. Если этот интервал превысил время, необходимое для приёма полтора байта на заданной скорости передачи то приём фрейма ответа считается завершённым. В режиме ASCII критерием окончания посылки является символ '\r', а в режиме TCP — ожидаемый размер посылки, информация о котором присутствует в заголовке пакета.

1.1 Адресация

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

1.2 Стандартные коды функций

В протоколе ModBus можно выделить несколько подмножеств команд (Таблица 1).

Таблица 1: Подмножества команд протокола ModBus

Подмножество Диапазон кодов
Стандартные 1-21
Резерв для расширенных функций 22-64
Пользовательские 65-119
Резерв для внутренних нужд 120-255

Модулем сбора данных используются команды 3 и 6(16) для чтения и записи регистров, 1 и 5(15) для чтения и записи битов, 2 и 4 для чтения бита и регистра входа, соответственно. Для реализации остальных и нетипичных команд модулем предусмотрена функция API пользовательского программирования, которую можно вызывать из процедуры шаблона логического уровня, отправляя произвольные PDU пакеты и обрабатывая полученные в ответ.

Модуль протокола обрабатывает запросы командами 3 и 6(16) для чтения и записи регистров, 1 и 5(15) для чтения и записи битов.

2 Модуль реализации протокола

Модуль протокола ModBus содержит код реализации протокольной части ModBus, а именно — особенности вариантов протоколов ModBus/TCP, ModBus/RTU и ModBus/ASCII. Модуль протокола, совместно с выбранным транспортом, активно используется модулем сбора данных для осуществления непосредственных запросов. Поскольку модуль протокола является автономным то, используя его, можно создавать дополнительные модули сбора данных посредством нестандартных функций расширения ModBus различного оборудования автоматизации.

2.1 API функции исходящих запросов

API функции исходящих запросов (messIO()) оперируют обменом блоками PDU, завёрнутыми в XML-пакеты, со следующей структурой:

Где:
  • prt — имя тега запроса с названием используемого варианта протокола (TCP, RTU или ASCII).
  • sId — идентификатор источника запроса. Используется для помещения в отчёт выходного протокола.
  • reqTm — время запроса, а именно — время, в течение которого, ожидать ответ, в миллисекундах.
  • node — номер узла назначения или идентификатор юнита ModBus/TCP.
  • reqTry — количество попыток повторения запроса с ошибкой в ответе. Только для вариантов ModBus/{RTU,ASCII}.
  • pdu — непосредственно блок юнита данных (PDU) протокола ModBus.

Результирующий pdu в XML-пакете заменяет pdu запроса, а также устанавливается атрибут "err" с кодом и текстом ошибки, если таковая имела место.

2.2 Обслуживание запросов по протоколу ModBus

Входная часть, обслуживания запросов к модулю протокола, осуществляет проверку и обработку запросов посредством предусмотренных модулем объектов узлов (рис.1). Фактически, реализуется механизм, позволяющий OpenSCADA выполнять роль сервера ModBus/TCP или подчинённого устройства ModBus/{RTU,ADCII}. Таким образом, OpenSCADA получает возможность использоваться в роли любого участника сети ModBus.

Рис.1. Вкладка перечня узлов обслуживания входящих запросов протокола.

Узел протокола эквивалентен физическому узлу устройства сети ModBus и может работать в трёх режимах:

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

Рассмотрим особенности конфигурации узла протокола в различных режимах.

2.2.1 Режим "Данные"

Режим используется для отражения данных OpenSCADA на массивы регистров и битов ModBus. Общая конфигурация узла осуществляется во вкладке "Узел" (рис.2) параметрами:

Узлом в этом режиме обрабатываются следующие стандартные команды протокола ModBus:

Рис.2. Вкладка "Узел" страницы конфигурации узла протокола в режиме "Данные".

To form the table of reflection the ModBus network data, that is registers and bits, the tab "Data" is provided (Fig.3). The tab "Data" contains a table of parameters and program of processing the parameters with the specified programming language which is available in OpenSCADA, but in the template there is only the table available and in the "Enabled" mode. The table contains parameters with the properties:

  • R{N}[w~], RI{N}[w~] — specific register and input register form, can be expanded by the suffixes: "i"—Int32, "f"—Float, "d"—Double, "s"—String (by default the size is 10 and up to 100 registers);
  • R:{N}[:w~], RI:{N}[:w~] — classic register and input register form, can be expanded by the suffixes: "i4"—Int32, "i8"—Int64, "f"—Float, "d"—Double, "s"—String
  • C{N}[w], CI{N}[w], C:{N}[:w], CI:{N}[:w] — coil and input coil.
Where:
  • {N} — ModBus device's data address (decimal, hexadecimal or octal) [0...65535];
  • w~e — flags: write mode 'w', registers order inversion '~', register 'e'ndian toggle (to LE in generic and BE for strings).
Examples:
"R0x300w" — register access;
"C100w" — coil access, allowed to write;
"R_f200", "R_f200~" — get float from registers 200 and 201, 201 and 200;
"R_i400,300" — get int32 from registers 400 and 300;
"R_s15,20" — get string, registers block, from register 15 and size 20.
"R_i8:0x10:w" — get and set int64 into registers [0x10-0x13];
"R_d:0x20,0x30" — get double float point (8 byte) from registers [0x20,0x30-0x32].
All other parameters are internal and used for a variety of intermediate calculations, processing, conversion and their values can be operative controlled and changed from the table into execution mode.

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

At.png Поскольку в указателе расширенных типов регистров может использоваться недопустимый символ ',' то доступ к нему из программы можно осуществить только альтернативным способом, через объект "arguments":

arguments["R_s10,5w"] = "9876543210";
Рис.3. Вкладка "Данные" страницы конфигурации узла протокола в режиме "Данные".

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

Рис.4. Вкладка "Связи" страницы конфигурации узла протокола в режиме "Конфигурация шаблона".

2.2.2 Режим "Шлюз узла"

Режим используется для перенаправления запросов к отдельному устройству в другой сети ModBus, из сети ModBus для которой сконфигурирован данный узел. Общая конфигурация узла осуществляется во вкладке "Узел" (рис.5) параметрами:

Рис.5. Вкладка "Узел" страницы конфигурации узла протокола в режиме "Шлюз узла".

2.2.3 Режим "Шлюз сети"

Режим используется для перенаправления запросов сети целиком в другую сеть ModBus, из сети ModBus для которой сконфигурирован данный узел протокола. Т.е., запрос на устройство с любым адресом будет направляться в другую сеть, без переадресовки. Общая конфигурация узла протокола осуществляется во вкладке "Узел" (рис.6) параметрами:

Рис.6. Вкладка "Узел" страницы конфигурации узла протокола в режиме "Шлюз сети".

2.3 Отчёт запросов ModBus

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

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

Рис.7. Вкладка "Отчёт" страницы модуля протокола.

3 Модуль сбора данных

Модуль сбора данных предоставляет возможность опроса и записи регистров и битов устройств посредством режимов протокола TCP, RTU, ASCII и команд запроса 16, 15, 16.

3.1 Объект контроллера

Для добавления источника данных ModBus создаётся и конфигурируется объект контроллера OpenSCADA. Пример вкладки конфигурации объекта контроллера данного типа изображен на рисунке 8.

Рис.8. Вкладка конфигурации объекта контроллера.

Using this tab you can set:

At.png Manual restart of the enabled controller object causes the force reformation of the acquisition blocks.
At.png Installing of this parameter must be approached with caution, since not all devices support access to the registers between fragments.
At.png This mode also prevents for loss the writing data at the connection loss and the wrote data will be transmitted just the connection will be restored.

3.2 Параметры

Модуль сбора данных предоставляет два типа параметра: "Стандартный (Prm)" и "Логический (PrmL)". Дополнительными конфигурационными полями параметров данного модуля являются:

3.2.1 Стандартный (Prm)

Главная страница конфигурации параметра стандартного типа представлена на рисунке 9.

Рис.9. Вкладка конфигурации параметра стандартного типа.

One attribute line in the parameter of the attributes list can be written as "{dt}:{numb}[:{flg}[:{id}[:{name}]]]".
Where:

"R" and "RI" can be expanded by the suffixes: "i2"—Int16, "i4"—Int32, "i8"—Int64, "u2"—UInt16, "u4"—UInt32, "f"—Float, "d"—Double, "b5"—Bit5, "b"—Bit in address, "s[CHARSET]"—String (size by default is 10 and up to 100 registers);

Примеры:

"R:0x300:rw:var:Variable" — доступ к регистру;
"C:100:rw:var1:Variable 1" — доступ к биту;
"R_f:200:r:float:Float", "R_f:200:r~:float:Float" — получить вещественное из регистров 200 и 201, 201 и 200;
"R_i4:400,300:r:int32:Int32" — получить int32 из регистров 400 и 300;
"R_b10:25:r:rBit:Reg bit", "R_b:25.10:r:rBit:Reg bit" — получить бит 10 из регистра 25;
"R_s:15,20:r:str:Reg blk" — получить строку (блок регистров) из регистра 15 и размером 20.

Линия, которая начинается с символа '#', считается комментарием и не обрабатывается.

В соответствии с указанным списком атрибутов выполняется опрос и создание атрибутов параметра (рис.10).

Рис.10. Вкладка атрибутов параметра стандартного типа.

3.2.2 Логический (PrmL)

Главная страница конфигурации параметра логического типа представлена на рисунке 11.

Рис.11. Вкладка конфигурации параметра логического типа.

Link value, when configuring the template (Fig.12), is written in the form {dt}:{numb}[:{flg}].
Where:

"R" and "RI" can be expanded by the suffixes: "i2"—Int16, "i4"—Int32, "i8"—Int64, "u2"—UInt16, "u4"—UInt32, "f"—Float, "d"—Double, "b5"—Bit5, "b"—Bit in address, "s[CHARSET]"—String (size by default is 10 and up to 100 registers);

Примеры:

"R:0x300:rw" — доступ к регистру;
"C:100:rw" — доступ к биту;
"R_f:200:r", "R_f:200:r~" — получить вещественное из регистров 200 и 201, 201 и 200;
"R_i4:400,300:r" — получить int32 из регистров 400 и 300;
"R_b10:25:r", "R_b:25.10:r" — получить бит 10 из регистра 25;
"R_s:15,20:r" — получить строку (блок регистров) из регистра 15 и размером 20.
Рис.12. Вкладка "Конфигурация шаблона" параметра логического типа.

Модулем предусмотрена особая обработка ряда атрибутов шаблона:

В соответствии с шаблоном, лежащим в основе параметра, мы получаем набор атрибутов параметра (рис.13).

Рис.13. Вкладка атрибутов параметра логического типа.

3.3 API пользовательского программирования

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

Объектная модель пользователя модуля ModBus.

Объект "Контроллер" [this.cntr()]

Объект "Параметр" [this]


4 Ссылки

Modules/ModBus/ru - GFDLMarch 2024OpenSCADA 0.9.7