Модулі/Sockets - OpenSCADAWiki

# Модулі/Sockets

This page is a translated version of the page Modules/Sockets and the translation is 100% complete.

English • ‎mRussian • ‎Українська

Модуль | Ім'я | Версія | Ліцензія | Джерело | Мови | Платформи | Тип | Автор | Опис
--- | --- | --- | --- | --- | --- | --- | --- | --- | ---
Sockets | Сокети | 5.1 | GPL2 | tr_Sockets.so | en,uk,ru,de,pt | x86,x86_64,ARM | Транспорт | Роман Савоченко Максим Кочетков(2014) | Надає транспорт заснований на сокетах. Підтримуються мережеві та UNIX сокети. Мережевий сокет підтримує TCP, UDP та RAWCAN протоколи. Завдання (To Do): - додати підтримку AF_BLUETOOTH сокетів для прямого запиту BLE пристроїв.

Модуль надає до програми підтримку транспортів, заснованих на сокетах. Підтримуються вхідні та вихідні транспорти, основані на мережевих сокетах TCP, UDP, UNIX та RAWCAN.

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

## 1 Вхідні транспорти

Сконфігурований та запущений вхідний транспорт відкриває серверний сокет для очікування підключення клієнтів, крім ініціативного підключення. У випадку з UNIX сокетом створюється файл UNIX сокету. Сокети TCP та UNIX є багатопотоковими, тобто при підключені клієнту до сокетів цих типів створюється клієнтський сокет та новий потік, у якому відбувається обслуговування клієнту. Серверний сокет, на цей час, переходить до очікування запитів від нового клієнту. Таким чином досягається паралельне обслуговування клієнтів. RAWCAN сокет здійснює прийом CAN кадрів з інтерфейсу згідно до налаштованому фільтру.

Кожний вхідний транспорт пов'язується з одним або декількома з доступних транспортних протоколів, якому передаються вхідні повідомлення. Разом з транспортним протоколом підтримується механізм об'єднання шматків розрізнених при передачі запитів.

Прочитати про механізм пасивного збору та ініціативні підключення ви можете у відповідній частині документу "Збір даних в OpenSCADA".

Рис.1. Загальні діалоги конфігурації вхідного сокету.

За допомогою основного діалогу можна встановити:

- Стан транспорту, а саме: статус, "Підключення", ім'я сховища (яке містить конфігурацію) та інформація про поточні підключення.
- Ідентифікатор, ім'я та опис транспорту.
- Адреса транспорту. Формат адреси описано у таблиці нижче.
- Обрання транспортних протоколів.

  Порожнє значення обрання протоколу перемикає транспорт у режим створення асоційованого вихідного транспорту для кожного прочитаного ІД підключення на цей вхідний.

- Стан "Підключення", у який переводити транспорт при запуску.

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

- Пріоритет задач транспорту.
- [TCP] Розмір системного вхідного буферу сокетів в кілобайтах. Встановити в 0 для зняття користувацького розміру. Актуальний розмір можете бачити у статусі.
- [TCP] Максимальний розмір сегмента (MSS) в байтах для обмеження розміру пакетів що відсилаються (сегментів TCP) на поганих каналах зв'язку. Встановити в 0 для зняття користувацького обмеження розміру. Актуальний розмір можете бачити у статусі.
- [TCP|UNIX|RAWCAN] Довжина черги сокетів.
- [TCP|UNIX|RAWCAN,!INIT] Максимальна кількість клієнтів та Максимальна кількість клієнтів за хостами (для TCP).
- [TCP|UNIX|RAWCAN,!INIT] Keep alive запитів — закриття підключення після визначеної кількості запитів. Нульове значення для вимкнення — не закривається ніколи.
- [TCP|UNIX|RAWCAN] Keep alive час очікування, в секундах — закриття підключення після відсутності запитів протягом визначеного часу. Нульове значення для вимкнення — не закривається ніколи.

  Вимикати цю функцію не рекомендується оскільки властивість мереж TCP/IP не гарантує повідомлення серверу про відключення з'єднання, скажемо у випадку зникнення живлення на клієнті. У результаті чого можуть назавжди залишатися відкритими клієнтські підключення, а при досягненні ліміту сервер припинить приймати нові!

- [TCP,INIT|ASSOC] Таймаути, спроби ініціативного підключення і асоційованих вихідних транспортів, порожнє для типового і поділене '||'. Формат таймаутів і спроб відповідає вихідному транспорту.
- Специфічні до протоколу користувацькі параметри.
- Скинути усі додаткові параметри до типових значень та очистити специфічні до протоколу користувацькі параметри.

Особливості формування адреси вхідних сокетів приведено у таблиці нижче:

Тип сокету | Адреса
--- | ---
TCP | [TCP:]{addr}[:{port}[,{port2}[,{portN}]][:{mode}[:{IDmess}]]] де: addr — адреса відкриття сокету, порожня або "*" адреса відкриває сокет на всіх інтерфейсах. Допускаються як символьне, так й IPv4 "127.0.0.1" або IPv6 "[::1]" представлення адреси. port, port2, portN — мережеві порти на яких послідовно відкривається сокет (при зайнятості перших), можливе вказання символьної назви порту відповідно до /etc/services. mode — режим роботи вхідного сокету: 0 — примусово розривати з'єднання після сеансу прийом-відповідь. 1(типово) — не розривати з'єднання, тільки з урахуванням параметрів KeepAlive. 2 — ініціативне підключення. Включає режим ініціативи підключення цього вхідного транспорту до віддаленого хосту (адреса замість локального) та перехід у режим очікування запитів від цього хосту. Значення "Keep alive час очікування" використовується як таймаут перепідключення даного транспорту за відсутності активності з метою відновлення можливо втраченого підключення. IDmess — ідентифікуюче повідомлення ініціативного підключення — режим 2. Приклад: "TCP::10001:1" — TCP-сокет доступний на всіх інтерфейсах, відкритий на порту 10001 та з'єднання не розриває.
UDP | UDP:{addr}:{port} де: addr — теж що й у TCP; port — теж що й у TCP. Приклад: "UDP:localhost:10001" — UDP-сокет доступний тільки на інтерфейсі "localhost" та відкритий на порту 10001.
RAWCAN | RAWCAN:{if}:{mask}:{id} де: if — ім'я CAN інтерфейсу; mask, id — маска та ідентифікатор фільтрації CAN кадрів. Приклад: "RAWCAN:can0:0:0" — приймати всі CAN кадри на інтерфейсі "can0".
UNIX | UNIX:{name}:{mode} де: name — ім'я файлу UNIX сокету; mode — те саме, що у TCP. Приклад: "UNIX:/tmp/oscada:1" — UNIX-сокет доступний через файл "/tmp/oscada" та з'єднання не розриває.

RAWCAN має деякі особливості у формуванні посилки, а саме:

- ідентифікатор отриманого CAN фрейму розташовується у відправнику (sender), а дані у полі запиту (request);
- ознакою розширеного ідентифікатору-відправника є наявність старшого біту (0x80000000).

## 2 Вихідні транспорти

Сконфігурований та запущений вихідний транспорт відкриває з'єднання з вказаним сервером. При розриві з'єднання вихідний транспорт зупиняється. Для відновлення з'єднання транспорт треба знову запустити, що всі протоколи роблять автоматично.

Транспорт підтримує пряме визначення декількох адрес серверу та опрацювання всіх IP-адрес у які резолвиться символьна адреса, що дозволяє будувати вертикальне резервування безпосередньо транспортом, який буде автоматично підключатися до першого доступного серверу.

Рис.2. Загальні діалоги конфігурації вихідного сокету.

За допомогою основного діалогу можна встановити:

- Стан транспорту, а саме: статус, "Підключення" та ім'я сховища, яке містить конфігурацію.
- Ідентифікатор, ім'я та опис транспорту.
- Адреса транспорту. Формат адреси описано у таблиці нижче.

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

- Інтервали часу підключення у форматі "{conn}:{next}[:{rep}]", де:
  - conn — максимальний час очікування відповіді підключення, у секундах;
  - next — максимальний час очікування продовження відповіді, у секундах;
  - rep — мінімальний час затримки наступного запиту, в секундах.

  Може бути пріоритетно визначено другим глобальним аргументом поля адреси, на кшталт "localhost:123||5:1".

- Спроб запиту транспортом та протоколом, для повних запитів.

  Може бути пріоритетно визначено третім глобальним аргументом поля адреси, на кшталт "localhost:123||5:1||3".

- [TCP] Максимальний розмір сегмента (MSS) в байтах для обмеження розміру пакетів що відсилаються (сегментів TCP) на поганих каналах зв'язку. Встановити в 0 для зняття користувацького обмеження розміру. Актуальний розмір можете бачити у статусі.
- Специфічні до протоколу користувацькі параметри.
- Скинути усі додаткові параметри до типових значень та очистити специфічні до протоколу користувацькі параметри.

Адреса вихідних сокетів різного типу формуються наступним чином:

Тип сокету | Адреса
--- | ---
TCP/UDP | [TCP:]{addr}[,{addrN}]:{port} UDP:{addr}[,{addrN}]:{port} де: addr — адреса до якої здійснюється підключення. Допускається як символьне так й IPv4 "127.0.0.1" або IPv6 "[::1]" представлення адреси. port — мережевий порт до якого здійснюється підключення. Можливе вказання символьного ім'я порту відповідно до /etc/services. Приклад: "TCP:127.0.0.1:7634" — підключення з портом 7634 на хості 127.0.0.1.
RAWCAN | RAWCAN:{if}:{mask}:{id} де: if — ім'я CAN інтерфейсу; mask, id — маска та ідентифікатор CAN кадрів. Приклад: "RAWCAN:can0:0:0" — приймати всі CAN кадри на інтерфейсі "can0".
UNIX | UNIX:{name} де: name — ім'я файлу UNIX сокета. Приклад: "UNIX:/tmp/oscada" — з'єднатися з UNIX-сокетом через файл "/tmp/oscada".

RAWCAN має деякі особливості у формуванні посилки, а саме:

- надсилання CAN фреймів (прозоро) до транспорту здійснюється у вигляді структури struct can_frame. Розмір структури 16 байт, де: 4 байти — ідентифікатор, 4 байти — довжина, 8 байтів — дані. Наприклад, посилка: 15 CD 5B 07 08 00 00 00 11 12 13 14 15 16 17 18. Де:
  - ідентифікатор: 123456789 (0x75BCD15) => 15 CD 5B 07, додати 0x80 у останньому байті якщо потрібен розширений;
  - довжина: 08 00 00 00 (вісім байтів);
  - дані: 11 12 13 14 15 16 17 18.

Modules/Sockets/uk - GFDL | May 2026 | OpenSCADA 0.9.9