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