OpenSCADA

Модулі/ModBus

This page is a translated version of the page Modules/ModBus and the translation is 100% 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 для використання у контролерах з програмованою логікою (ПЛК). Став стандартом де-факто у промисловості та широко застосовується для організації зв'язку промислового електронного обладнання. Використовується для передачі даних через послідовні лінії зв'язку 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,ASCII}. Таким чином, OpenSCADA отримує можливість використовуватися у ролі будь якого учасника мережі ModBus.

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

Вузол протоколу еквівалентно фізичному вузлу пристрою мережі ModBus та може працювати у трьох режимах:

Оскільки вузлів протоколу може бути створено багато то виходить, що на одному інтерфейсі, тобто у одній мережі, одна станція на основі OpenSCADA може прозоро представляти декілька вузлів мережі ModBus з різними даними.

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

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

Режим використовується для відображення даних OpenSCADA на масиви регістрів та бітів ModBus. Загальна конфігурація вузла здійснюється у вкладці "Вузол" (рис.2) параметрами:

Вузлом у цьому режимі обробляються наступні стандартні команди протоколу ModBus:

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

Для формування таблиці віддзеркалення даних мережі ModBus, а саме регістрів та бітів, передбачається вкладка "Дані" (рис.3). Вкладка "Дані" містить таблицю параметрів та програму обробки параметрів визначеною мовою програмування доступною у OpenSCADA, але за шаблоном тут доступно тільки таблицю та у режимі "Ввімкнено". Таблиця містить параметри з властивостями:

  • R{N}[w~], RI{N}[w~] — специфічна форма регістру та регістру входу, може бути розширено суфіксами: "i"—Int32, "f"—Float, "d"—Double, "s"—Рядок (розмір по замовченню 10 та до 100 регістрів);
  • R:{N}[:w~], RI:{N}[:w~] — класична форма регістру та регістру входу, може бути розширено суфіксами: "i4"—Int32, "i8"—Int64, "f"—Float, "d"—Double, "s"—Рядок;
  • C{N}[w], CI{N}[w], C:{N}[:w], CI:{N}[:w] — біт та біт входу.
Де:
  • {N} — адреса даних ModBus пристрою (десяткова, шістнадцяткова, або вісімкова) [0...65535];
  • w~e — прапорці: режим запису 'w', інверсія порядку регістрів '~', перемикання порядку байтів 'e' регістрів (у LE загалом та BE для рядків).
Приклади:
"R0x300" — доступ до регістру;
"C100w" — доступ до біту, доступний для запису;
"R_f200", "R_f200~" — отримати реальне з регістрів 200 та 201, 201 та 200;
"R_i400,300" — отримати int32 з регістрів 400 та 300;
"R_s15,20" — отримати рядок, блок регістрів, з регістру 15 та розміром 20;
"R_i8:0x10:w" — отримати та встановити int64 у регістри [0x10-0x13];
"R_d:0x20,0x30" — отримати реальне подвійної точності (8 байтів) з регістрів [0x20,0x30-0x32].
Всі інші параметри, які не потрапили під вище-зазначені правила, є внутрішніми, використовуються для різних проміжних обчислень, обробки, перетворень та значення їх може бути оперативно проконтрольовано та змінено з цієї таблиці у режимі виконання.

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

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. Вкладка конфігурації об'єкту контролеру.

За допомогою цієї вкладки можна встановити:

At.png Ручний перезапуск ввімкненого об'єкту контролеру викликає примусове переформування блоків збору.
At.png До встановлення цього параметру треба підходити з обережністю, оскільки не всі пристрої підтримують доступ до регістрів між фрагментами.
At.png Цей режим також запобігає втраті записаних даних за втрати підключення та записані дані будуть передані щойно підключення буде відновлено.

3.2 Параметри

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

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

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

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

Лінія атрибуту у параметрі переліку атрибутів записується як "{dt}:{numb}[:{flg}[:{id}[:{name}]]]".
Де:

"R" та "RI" можуть бути розширені суфіксами: "i2"—Int16, "i4"—Int32, "i8"—Int64, "u2"—UInt16, "u4"—UInt32, "f"—Float, "d"—Double, "b5"—Біт5, "b"—Біт у адресі, "s[КОДУВАННЯ]"—Рядок (розмір по умовчанню 10 та до 100 регістрів);

Приклади:

"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. Вкладка конфігурації параметру логічного типа.

Значення посилання при конфігурації шаблону (рис.12) записується у формі "{dt}:{numb}[:{flg}]".
Де:

"R" та "RI" можуть бути розширені суфіксами: "i2"—Int16, "i4"—Int32, i8-Int64, u2-UInt16, u4-UInt32, "f"—Float, "d"—Double, "b5"—Біт5, "b"—Біт у адресі, "s[КОДУВАННЯ]"—Рядок (розмір по умовчанню 10 та до 100 регістрів);

Приклади:

"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/uk - GFDLNovember 2024OpenSCADA 1+r2996