Модуль |
Имя |
Версия |
Лицензия |
Источник |
Языки |
Платформы |
Тип |
Автор |
Описание
|
Sockets |
Сокеты
|
4.3 |
GPL2 |
tr_Sockets.so |
en,uk,ru,de |
x86,x86_64,ARM
|
Транспорт |
Роман Савоченко, Максим Кочетков |
Предоставляет транспорт основанный на сокетах. Поддерживаются сетевые и UNIX сокеты. Сетевой сокет поддерживает TCP, UDP и RAWCAN протоколы.
|
Модуль предоставляет в программу поддержку транспортов, основанных на сокетах. Поддерживаются входные и выходные транспорты, основанные на сетевых сокетах TCP, UDP, UNIX и RAWCAN.
Добавить новые входные и выходные сокеты можно посредством конфигурации транспортной подсистемы в любом конфигураторе OpenSCADA.
1 Входные транспорты
Сконфигурированный и запущенный входной транспорт открывает серверный сокет для ожидания соединения клиентов, кроме инициативного подключения. В случае с UNIX сокетом создаётся файл UNIX сокета. Сокеты TCP и UNIX являются многопоточными, т.е. при подключении клиента к сокетам данных типов создаётся клиентский сокет и новый поток, в котором производиться обслуживание клиента. Серверный сокет, в этот момент, переходит к ожиданию запросов от нового клиента. Таким образом достигается параллельное обслуживание клиентов. RAWCAN сокет осуществляет прием CAN кадров из интерфейса согласно настроенному фильтру.
Каждый входной транспорт связывается с одним из доступных транспортных протоколов, которому передаются входные сообщения. В связке с транспортным протоколом поддерживается механизм объединения кусков разрозненных при передаче запросов.
Диалог конфигурации входного сокета изображён на рисунке 1.
Рис.1. Диалог конфигурации входного сокета.
С помощью этого диалога можно установить:
- Состояние транспорта, а именно: статус, "Подключение", имя БД (содержащей конфигурацию) и информация о текущих подключениях.
- Идентификатор, имя и описание транспорта.
- Адрес транспорта. Формат адреса описан в таблице ниже.
- Выбор транспортных протоколов.
Пустое значение выбора протокола переключает транспорт в режим создания ассоциированного выходного транспорта для каждого подключения на данный входной.
- Режим ассоциированных выходных транспортов для входного предусматривает наличие некоей внешней для транспорта процедуры, выполняющей роль протокола, которая должна "обходить" все ассоциированные выходные транспорты, и выполнять запросы на чтение или запись-чтение.
Отсутствие такой процедуры неизбежно приведёт к росту ассоциированных выходных транспортов из-за отсутствия сущности, останавливающей транспорты с закрытыми соединениями и возможности последующего удаления остановленных выходных транспортов данным входным.
- Состояние "Подключение", в которое переводить транспорт при загрузке.
- Приоритет задач транспорта.
- Максимальный размер сегмента (MSS), для ограничения размера отправляемых пакетов (сегментов TCP) на плохих каналах связи. Установить в 0 для снятия пользовательского ограничения размера.
- Размер входного буфера, Длина очереди сокетов, Максимальное число клиентов и Максимальное число клиентов по хостам (для TCP).
- Keep alive запросов — закрытие подключения после указанного количества запросов. Нулевое значение для отключения — не закрывается никогда.
- Keep alive время ожидания, секунд — закрытие подключения после отсутствия запросов в течении указанного времени. Нулевое значение для отключения — не закрывается никогда.
Отключать данную функцию не рекомендуется поскольку свойство сетей TCP/IP не гарантирует уведомления сервера об отключении соединения, скажем в случае пропадания питания на клиенте. В результате чего могут навсегда оставаться открытые клиентские подключения, а при достижении лимита сервер перестанет принимать новые!
Особенности формирования адреса входных сокетов приведены в таблице ниже:
Тип сокета |
Адрес
|
TCP |
[TCP:]{addr}:{port}:{mode}[:{IDmess}]
где:
- addr — адрес открытия сокета, пустой или "*" адрес открывает сокет на всех интерфейсах. Допускаются как символьное, так и IPv4 "127.0.0.1" или IPv6 "[::1]" представление адреса.
- port — сетевой порт на котором открывается сокет, возможно указание символьного имени порта согласно /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.
Рис.2. Главная вкладка страницы конфигурации выходного сокета.
С помощью этого диалога можно установить:
- Состояние транспорта, а именно: статус, "Подключение" и имя БД, содержащей конфигурацию.
- Идентификатор, имя и описание транспорта.
- Адрес транспорта. Формат адреса описан в таблице ниже.
- Максимальный размер сегмента (MSS), для ограничения размера отправляемых пакетов (сегментов TCP) на плохих каналах связи. Установить в 0 для снятия пользовательского ограничения размера.
- Временные интервалы соединения в формате "{conn}:{next}[:{rep}]", где:
- conn — максимальное время ожидания ответа соединения, в секундах;
- next — максимальное время ожидания продолжения ответа, в секундах;
- rep — минимальное время задержки следующего запроса, в секундах.
- Может быть приоритетно определён вторым глобальным аргументом поля адреса, вроде "localhost:123||5:1".
- Попыток запроса транспортом и протоколом, для полных запросов.
- Может быть приоритетно определён третьим глобальным аргументом поля адреса, вроде "localhost:123||5:1||3".
Адрес выходных сокетов различного типа формируются следующим образом:
Тип сокета |
Адрес
|
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.