From OpenSCADAWiki
Jump to: navigation, search

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

  • TProtocol->TModule — Корневой объект модуля подсистемы "Протоколы":
    • void itemListIn( vector<string> &ls, const string &curIt = "" ); — Перечень подэлементов у входящего протокола, если протокол их предусматривает. Используется при выборе в конфигурации объекта входящего транспорта.
    • void outMess( XMLNode &io, TTransportOut &tro ); — Реализуемая передача данных объектами ядра OpenSCADA в дереве XML in удалённой системе посредством транспорта tro и текущего исходящего протокола. Представление данных в дереве XML in неунифицировано и специфично логической структуре протокола. Эти данные сериализуются (переводятся в последовательность байтов согласно протоколу) и отправляются через указанный исходящий транспорт tro функцией messIO() выше.
    • TProtocolIn *in_open( const string &name ) — Вызывается при открытии или создании нового объекта входящего транспортного протокола name данным модулем.
  • TProtocolIn — Объект протокола обработки входящих запросов из объекта входящего транспорта TTransportIn выше. На каждый сеанс входящего запроса создаётся объект связанного входящего протокола, который остаётся жив до момента завершения полного сеанса "Запрос->Ответ". Адрес транспорта, открывшего экземпляр протокола, указан в srcTr():
    • bool mess( const string &request, string &answer, const string &sender ); — Передача последовательности данных request объекту протокола для их разбора согласно реализации протокола с указанием адреса запросившего объекта в sender. Данная функция протокола должна обработать запрос, сформировать ответ в answer и вернуть "false" в случае полноты запроса. В случае если запрос поступил не весь, нужно возвращать "true" для индикации транспорту "ожидать завершения", при этом первую часть запроса нужно сохранять в контексте объекта протокола.