| Модуль: | Serial |
| Имя: | Последовательный интерфейс |
| Тип: | Транспорт |
| Источник: | tr_Serial.so |
| Версия: | 0.8.0 |
| Автор: | Роман Савоченко |
| Описание: | Предоставляет последовательный интерфейс. Используется для обмена данными через последовательные интерфейсы типа RS232, RS485, GSM и другое. |
| Лицензия: | GPL |
Модуль транспорта Serial предоставляет в систему поддержку транспортов, основанных на последовательных интерфейсах типа RS232, RS485, GSM и другие. Поддерживаются входящие и исходящие транспорты. Добавить новые входящие и исходящие интерфейсы можно посредством конфигурации транспортной подсистемы в любом конфигураторе системы OpenSCADA.
В режиме модема модулем поддерживается смешанный режим работы. Смешанный режим подразумевает наличие входящего транспорта, который ожидает внешних подключений, а также исходящего транспорта на том-же устройстве. Т.е. входящий транспорт будет игнорировать все запросы при наличии установленного исходящим транспортом соединения, в то-же время исходящий транспорт не будет осуществлять попыток установить соединение при наличии подключения к входящему транспорту или соединения другого исходящего транспорта например, с другим номером телефона.
Внимание! В обычном режиме последовательного интерфейса не допускается многократное использование одного и того-же порта во входящих и исходящих транспортах. Глобального блокирования последовательного устройства не осуществляется в виду неоднозначности этого процесса на системном уровне, а многократное использование может привести к непредсказуемым проблемам. При необходимости организации локального последовательного канала с парой связанных портов рекомендуется использование команды "$ socat -d -d pty,raw,echo=0,perm=0666 pty,raw,echo=0,perm=0666".
Сконфигурированный и запущенный входящий транспорт открывает порт последовательного интерфейса для ожидания запросов клиентов. Каждый входящий интерфейс обязательно связывается с одним из доступных транспортных протоколов, к которому передаются входящие сообщения.
Диалог конфигурации входящего последовательного интерфейса изображён на рис.1.

С помощью этого диалога можно установить:
Транспорт поддерживает возможность работы в режиме модема. Данный режим включается пятым параметром адреса и подразумевает ожидания звонка от удалённого модема (запрос "RING"), ответа на звонок (команда "ATA") и последующей передачи запросов от удалённой станции протоколу транспорта. Отключение сеанса связи осуществляется инициатором соединения и приводит к переподключению модема приёмника на ожидание новых звонков.
Для настройки модема входящего транспорта предусмотрена специальная вкладка "Модем" (рис.2).
![Вкладка [Модем], конфигурации модема. (67 Кб) Вкладка [Модем], конфигурации модема. (67 Кб)](http://wiki.oscada.org/Doc/Serial/files?get=serial_in_mdm.png)
С помощью этого диалога можно установить следующие свойства работы с модемом:
Сконфигурированный и запущенный исходящий транспорт открывает порт последовательного интерфейса для отправки запросов через него.
Главная вкладка страницы конфигурации исходящего последовательного интерфейса изображёна на рис.3.

С помощью этого диалога можно установить:
Транспорт поддерживает возможность работы в режиме модема. Данный режим включается наличием пятого параметра адреса и подразумевает осуществление звонка по телефону, указанному пятым параметром, в момент запуска транспорта. После установки связи с удалённым модемом все запросы передачи направляются станции за удалённым модемом. Отключение сеанса связи, с остановкой транспорта, осуществляется по таймауту активности.
Для настройки модема исходящего транспорта предусмотрена специальная вкладка "Модем" (рис.4).
![Вкладка [Модем], конфигурации модема. (77 Кб) Вкладка [Модем], конфигурации модема. (77 Кб)](http://wiki.oscada.org/Doc/Serial/files?get=serial_out_mod.png)
С помощью этого диалога можно установить следующие свойства работы с модемом:
Коммуникации через последовательные интерфейсы имеют ряд особенностей. Наиболее важной особенностью является критерий окончания сообщения и время ожидания этого критерия. В одних протоколах таким критерием является признак окончания или указанный размер сообщения. В других протоколах таким критерием является отсутствие данных во входящем потоке в течение указанного времени, время символа. В обоих случаях время ожидания критерия или символа является ключевым и сильно сказывается на общем времени обмена. Следовательно, чем меньше это время тем лучше. Вот тут и возникает проблема латентности оборудования и его драйверов.
Проверить латентность канала обмена и тем самым оптимально настроить время дожидания, символа можно с помощью интерфейса вкладки "Запрос" исходящего транспорта. Для этого необходимо указать образцовый запрос соответствующего протокола, указать "Ожидать таймаут", отослать запрос и проконтролировать его целостность. Для получения более репрезентативного результата необходимо запрос повторить несколько раз. Если наблюдается получение неполных ответов, то время символа необходимо увеличить, иначе можно уменьшить.
На встроенном оборудовании последовательных интерфейсов RS232/422/485 можно добиться низкого уровня латентности, вплоть до единиц миллисекунд. Однако, на высоко-нагруженных системах с множеством задач с приоритетом реального времени латентность может стать недетерминированной в связи с исполнением потока обслуживания событий ядра Linux в низком приоритете. Для решения этой проблемы необходимо установить высокий приоритет этим потокам, что можно сделать с помощью скрипта, поместив его, например, в /etc/rc.local:
На внешнем оборудовании последовательных интерфейсов, например, в переходниках USB->RS232/422/485, может возникнуть проблема высокой латентности связанная с особенностью аппаратной реализации или его драйвера. Решать эту проблему можно путём изучения настроек этого оборудования или установкой большого времени ожидания, символа!