OpenSCADAWiki: Home Page Uk/Doc/ Sockets ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of HomePageUk/Doc/Sockets from 2017-06-28 08:21:46..
English (1 Kb) English
Russian (1 Kb) Российский
 (2 Kb) Переклад

Модуль <Soсkets> підсистеми "Транспорти"

Модуль: Sockets
Ім'я: Сокеты
Тип: Транспорт
Джерело: tr_Sockets.so
Версія: 2.3
Автор: Роман Савоченко, Максим Кочетков
Опис: Надає транспорт заснований на сокетах. Підтримуються інтернет та UNIX сокети. Інтернет сокет використовує TCP, UDP та RAWCAN протоколи.
Ліцензія: GPL

Contents

Вступ

Модуль транспорту Sockets надає до системи підтримку транспортів, заснованих на сокетах. Підтримуються вхідні та вихідні транспорти, основані на інтернет сокетах: TCP, UDP та UNIX. Додати нові вхідні та вихідні сокети можна за посередництвом конфігурації транспортної підсистеми у будь якому конфігураторі системи OpenSCADA.


Переклад

1. Входящие транспорты

Сконфигурированный и запущенный входящий транспорт открывает серверный сокет для ожидания соединения клиентов, кроме инициативного подключения. В случае с UNIX сокетом создаётся файл UNIX сокета. Сокеты TCP и UNIX являются многопоточными, т.е. при подключении клиента к сокетам данных типов создаётся клиентский сокет и новый поток, в котором производиться обслуживание клиента. Серверный сокет в этот момент переходит к ожиданию запросов от нового клиента. Таким образом достигается параллельное обслуживание клиентов. RAWCAN сокет осуществляет прием CAN кадров из интерфейса согласно настроенному фильтру.


Каждый входящий сокет связывается с одним из доступных транспортных протоколов, которому передаются входящие сообщения. В связке с транспортным протоколом поддерживается механизм объединения кусков разрозненных при передаче запросов.


Диалог конфигурации входящего сокета изображён на рис.1.


Діалог конфігурації вхідного сокету. (108 Kb)
Рис.1. Диалог конфигурации входящего сокета.

С помощью этого диалога можно установить:

 (2 Kb) Пустое значение выбора протокола переключает транспорт в режим создания ассоциированного исходящего транспорта для каждого подключения на данный входящий.
Режим ассоциированных исходящих транспортов для входящего предусматривает наличие некоей внешней для транспорта процедуры, выполняющей роль протокола, которая должна "обходить" все ассоциированные исходящие транспорты, и выполнять запросы на чтение или запись-чтение.
 (2 Kb) Отсутствие такой процедуры неизбежно приведёт к росту ассоциированных исходящих транспортов в виду отсутствия сущности останавливающей транспорты с закрытыми соединениями и возможности последующего удаления остановленных исходящих транспортов данным входящим транспортом.
 (2 Kb) Отключать данную функцию не рекомендуется поскольку свойство сетей TCP/IP не гарантирует уведомления сервера об отключении соединения, скажем в случае пропадания питания на клиенте. В результате чего могут навсегда оставаться открытые клиентские подключения, а при достижении лимита сервер перестанет принимать новые!

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

Тип сокетаАдрес
TCP

TCP:{адрес}:{порт}:{режим}
где:

  • адрес — Адрес, на котором открывается сокет. Должен быть одним из адресов хоста. Если ничего не указано, то сокет будет доступен на всех интерфейсах хоста. Допускаются как символьное, так и IP представление адреса.
  • порт — Сетевой порт, на котором открывается сокет. Возможно указание символьного имени порта (в соответствии с /etc/services).
  • режим — режим работы входящего сокета:
    • '0' — Принудительно разрывать соединение после сеанса приём-ответ.
    • '1' — Не разрывать соединение, только с учётом параметров KeepAlive.
    • '2' — Инициативное подключение. Включает режим инициативы подключения данного входного транспорта к удалённому хосту (адрес вместо локального) и переход в режим ожидания запросов от этого хоста. Значение "Keep alive время ожидания (сек.)" используется как таймаут переподключения данного транспорта по отсутствию активности, с целью восстановления возможно потерянного подключения.

Пример: "TCP::10001:1" — TCP-сокет доступен на всех интерфейсах, открыт на порту 10001 и соединения не разрывает.

UDP

UDP:{адрес}:{порт}
где:

  • адрес — тоже что в TCP;
  • порт — тоже что в TCP.

Пример: "UDP:localhost:10001" — UDP-сокет доступен только на интерфейсе “localhost” и открыт на порту 10001.

RAWCAN

RAWCAN:{интерфейс}:{маска}:{идентификатор}
где:

  • интерфейс — имя CAN интерфейса;
  • маска, идентификатор — маска и идентификатор для фильтрации CAN кадров.

Пример: "RAWCAN:can0:0:0" — принимать все CAN кадры на интерфейсе can0.
Идентификатор CAN фрейма помещается в поле sender, данные - в request, длина поля данных - request.length. Признаком расширенного идентификатора является наличие старшего бита в идентификаторе (0x80000000)

UNIX

UNIX:{имя}:{режим}
где:

  • имя — имя файла UNIX сокета;
  • режим — тоже что в TCP.

Пример: "UNIX:/tmp/oscada:1" — UNIX-сокет доступен через файл /tmp/oscada и соединения не разрывает.

2. Исходящие транспорты

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


Главная вкладка страницы конфигурации исходящего сокета изображёна на рис.2.


Головна вкладка сторінки конфігурації вихідного сокету. (90 Kb)
Рис.2. Главная вкладка страницы конфигурации исходящего сокета.

С помощью этого диалога можно установить:


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

Тип сокетаАдрес
TCP/UDP

TCP:{адрес}:{порт}
UDP:{адрес}:{порт}
где:

  • адрес — Адрес, с которым выполняется соединение. Допускаются как символьное так и IP представление адреса.
  • порт — Сетевой порт, с которым выполняется соединение. Возможно указание символьного имени порта (в соответствии с /etc/services).

Пример: "TCP:127.0.0.1:7634" — соединится с портом 7634 на хосте 127.0.0.1.

RAWCAN

RAWCAN:{интерфейс}:{маска}:{идентификатор}
где:

  • интерфейс — имя CAN интерфейса;
  • маска, идентификатор — маска и идентификатор CAN кадров.

Пример: "RAWCAN:can0:0:0" — принимать все CAN кадры на интерфейсе can0.
Отправка 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 dec = 0x75BCD15 hex ->15 CD 5B 07 (если нужен расширенный - 0x80 добавить в последнем байте)
длина - 08 00 00 00 восемь байт
данные - 11 12 13 14 15 16 17 18

UNIX

UNIX:{имя}
где:

  • имя — имя файла UNIX сокета.

Пример: "UNIX:/tmp/oscada" — соединится с UNIX-сокетом через файл /tmp/oscada.

Ссылки

Referring pages: HomePageUk/Doc
HomePageUk/Doc/DAQ
HomePageUk/Doc/OPCUA
HomePageUk/Doc/Serial
HomePageUk/Function
HomePageUk/Using/PLC/firmware
HomePageUk/Using/SmartHouse

 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]