From OpenSCADAWiki
Jump to: navigation, search

Программный интерфейс OpenSCADA для обслуживания входящих и исходящих запросов через сетевой интерфейс представлен объектами и виртуальными функциями вызовов из ядра OpenSCADA:

  • TTypeTransport->TModule — Корневой объект модуля подсистемы "Транспорты":
    • TTransportIn *In( const string &name, const string &db ); — Вызывается при открытии или создании нового объекта входящего транспорта name данным модулем с хранилищем в db.
    • TTransportOut *Out( const string &name, const string &db ); — Вызывается при открытии или создании нового объекта исходящего транспорта name данным модулем с хранилищем в db.
  • TTransportIn — Объект транспорта обработки входящих запросов, функция сервера. Входящие запросы, полученные модулем через реализацию сетевого интерфейса, должны направляться к указанному в конфигурации входящему протоколу protocol() посредством функции mess():
    • string getStatus( ); — Вызов для получения специфического статуса интерфейса.
    • void setAddr( const string &addr ); — Установка адреса транспорта. Может переопределяться для обработки и проверки специфического для модуля формата адреса транспорта.
    • void start(); — Запуск транспорта. При запуске входящего транспорта обычно создаётся задача, которая ожидает запросов извне.
    • void stop(); — Останов транспорта.
  • TTransportOut — Объект транспорта обработки исходящих запросов, функция клиента:
    • string getStatus( ); — Вызов для получения специфического статуса интерфейса.
    • void setAddr( const string &addr ); — Установка адреса транспорта. Может переопределяться для обработки и проверки специфического для модуля формата адреса транспорта.
    • void start( ); — Запуск транспорта. При запуске исходящего транспорта осуществляется фактическое подключение к удалённой станции для интерфейсов работающих по подключению. В этот момент возможны ошибки, если подключение невозможно, и транспорт должен вернуться в остановленное состояние.
    • void stop( ); — Останов транспорта.
    • int messIO( const char *obuf, int len_ob, char *ibuf = NULL, int len_ib = 0, int time = 0, bool noRes = false ); — Обслуживание запросов из ядра OpenSCADA на отправку данных через транспорт. Время ожидания time соединения указывается в милисекундах, при ненулевом значении должно замещать одноимённый таймаут транспорта в его общих настройках. noRes используется протоколами для монопольного блокирования транспорта на время работы с ним и исключения собственной блокировки функцией. Пакет для отправки указывается в буфере obuf длиной len_ob, а в ibuf и len_ib указывается буфер и его размер для ответа. Исходящий буфер obuf может быть пуст (NULL) если нужно проверить наличие продолжения ответа или ответов, поступающих без запроса, режим вещания. Если не указан буфер для ответа (NULL) то ожидание ответа не будет осуществляться.