OpenSCADAWiki: Doc/API/part19 ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 

19. API модулей модульных подсистем

Модули в системе OpenSCADA реализуются в виде разделяемых библиотек. Как уже ранее упоминалось, одна такая библиотека может содержать множество модулей подсистем OpenSCADA, фактически выступая в роли контейнера.


Первым шагом при подключении разделяемых (SO - shared object) библиотек является подключение функций инициализации. Эти функции должны быть определены как обычные “С” функции для исключения искажения имен функций. Обычно это делается следующим образом:

//================== CUT =========================
extern "C"
{
    TModule::SAt module( int n_mod )
    {
    //Формирование описателей модулей из списка
    //доступных в разделяемой библиотеке.
    }
    TModule *attach( const TModule::SAt &AtMod, const string &source )
    {
    //Подключить указанный модуль
    }
}
//================== CUT =========================


Функции для работы с разделяемой библиотекой:
TModule::SAt module( int n_mod );

Функция предназначена для последовательного опроса информации о модулях, содержащихся в SO библиотеке. Параметр <n_mod> указывает на порядковый номер запрашиваемого модуля и должен перебираться, начиная с нуля. В случае отсутствия модуля с данным идентификатором функция должна возвращать структуру с именем модуля нулевой длины, что и служит окончанием процесса сканирования.

TModule *attach( const TModule::SAt &AtMod, const string &source );

Подключение к указанному модулю.

Практически все функции и данные системы сведены в API-системы, описываемого в данном документе. Однако для упрощения и ускорения процесса написания модулей основные функции, переопределяемые в модулях, приведены в таблице 22.


Таблица 22. Основные функции, использующиеся при создании модулей

Общее API модулей (TModule):

Атрибуты

  • string mId; - Идентификатор модуля.
  • string mName; - Имя модуля.
  • string mDescr; - Описание модуля.
  • string mType; - Тип модуля.
  • string mVers; - Версия модуля.
  • string mAutor; - Автор модуля.
  • string mLicense; - Лицензия модуля.
  • string mSource; - Источник/происхождение модуля.
Методы

  • virtual void load_( ); - Загрузка модуля.
  • virtual void save_( ); - Сохранение модуля.
  • virtual void modStart( ); - Запуск модуля.
  • virtual void modStop( ); - Останов модуля.
  • virtual void modInfo( vector<string> &list ); - Список доступных элементов информации о модуле. Предусмотрены следующие информационные элементы:
    Modul - идентификатор модуля;
    Name - локализованное имя модуля;
    Type - тип модуля;
    Source - источник модуля (контейнер);
    Version - версия модуля;
    Autor - автора модуля;
    Description - описание модуля;
    License - лицензия модуля.
  • virtual string modInfo( const string &name ); - Запрос указанного элемента информации.
  • void postEnable( int flag ); - Подключение модуля к динамическому дереву объектов.
  • void modFuncReg( ExpFunc *func ); - Регистрация экспортируемой функции.
API модулей подсистемы “БД”.

Тип БД (потомок от TTipBD):

  • virtual TBD *openBD( const string &id ); - Открыть/создать БД.

БД (потомок от TBD):

  • virtual void enable( ); - Включение БД.
  • virtual void disable( ); - Отключение БД.
  • virtual void load_( ); - Загрузка БД.
  • virtual void save_( ); - Сохранение БД.
  • virtual void allowList( vector<string> &list ); - Перечень таблиц в БД.
  • virtual void sqlReq( const string &req, vector< vector<string> > *tbl = NULL, char intoTrans = EVAL_BOOL ); - Отправка SQL-запроса <req> на БД и получение результата в виде таблицы <tbl>. При установке <intoTrans> в true для запроса будет открыта транзакция, в false будет закрыта.
  • virtual void transCloseCheck( ) - Периодически вызываемая функция для проверки транзакций и закрытия старых или содержащих много запросов.
  • virtual TTable *openTable( const string &table, bool create ); - Открыть/создать таблицу.

Таблица (потомок от TTable):

  • virtual void fieldStruct( TConfig &cfg ); - Получение структуры таблицы.
  • virtual bool fieldSeek( int row, TConfig &cfg ); - Последовательное сканирование записей таблицы.
  • virtual void fieldGet( TConfig &cfg ); - Получение указанной записи.
  • virtual void fieldSet( TConfig &cfg ); - Установка указанной записи.
  • virtual void fieldDel( TConfig &cfg ); - Удаление указанной записи.
API модулей подсистемы “Сбор данных”.

Тип контроллера (потомок от TTipDAQ):

  • virtual void compileFuncLangs( vector<string> &ls ); - Перечень языков пользовательского программирования, поддерживаемых модулем.
  • virtual string compileFunc( const string &lang, TFunction &fnc_cfg, const string &prog_text ); - Компиляция пользовательской процедуры и создания объекта исполнения функции для указанного языка пользовательского программирования.
  • virtual bool redntAllow( ); - Признак поддержки механизмов резервирования модулем. Должен просто переопределяться и возвращать true.
  • virtual TController *ContrAttach( const string &name, const string &daq_db ); - Открытие/подключение контроллера.

Контроллер (потомок от TController):

  • virtual void load_( ); - Загрузка контроллера.
  • virtual void save_( ); - Сохранение контроллера.
  • virtual void start_( ); - Запуск контроллера.
  • virtual void stop_( ); - Останов контроллера.
  • virtual void enable_( ); - Включение контроллера.
  • virtual void disable_( ); - Отключение контроллера.
  • virtual void redntDataUpdate( bool firstArchiveSync = false ); - Выполнение операции получения данных из резервной станции. Вызывается автоматически задачей обслуживания схемы резервирования и перед запуском для синхронизации архивов с установленным параметром <firstArchiveSync>.
  • virtual TParamContr *ParamAttach( const string &name, int type ); - Создание/открытие нового параметра.

Параметр контроллера (потомок от TParamContr):

  • virtual void enable( ); - Включить параметр.
  • virtual void disable( ); - Отключить параметр.
  • virtual void load_( ); - Загрузка параметра.
  • virtual void save_( ); - Сохранение параметра.
  • virtual void setType( const string &tpId ); - Вызывается для смены типа параметра <tpId> и может быть обработан в объекте модуля, для смены собственных данных.
API модулей подсистемы "Архивы".

Тип архиватора (потомок от TTipArсhivator):

  • virtual TMArchivator *AMess(const string &id, const string &db ); - Создание архиватора сообщений.
  • virtual TVArchivator *AVal(const string &id, const string &db ); - Создание архиватора значений.

Архиватор сообщений (потомок от TMArchivator):

  • virtual void load_( ); - Загрузка архиватора.
  • virtual void save_( ); - Сохранение архиватора.
  • void start( ); - Старт архиватора.
  • virtual void stop( ); - Останов архиватора.
  • virtual time_t begin( ); - Начало данных в архиваторе.
  • virtual time_t end( ); - Конец данных в архиваторе.
  • virtual void put( vector<TMess::SRec> &mess ); - Передать сообщение архиватору.
  • virtual void get( time_t b_tm, time_t e_tm, vector<TMess::SRec> &mess, const string &category = "", char level = 0, const string &arch = "" ); - Запросить сообщение из архиватора.

Архиватор значений (потомок от TVArchivator):

  • virtual void setValPeriod( double per ); - Установить периодичность значений архиватора.
  • virtual void setArchPeriod( int per ); - Установить периодичность архивирования.
  • virtual void load_( ); - Загрузить архиватор.
  • virtual void save_( ); - Сохранить архиватор.
  • virtual void start( ); - Запустить архиватор.
  • virtual void stop( bool full_del = false ); - Остановить архиватор с возможностью полного удаления, если установлен <full_del>.
  • virtual TVArchEl *getArchEl( TVArchive &arch ); - Получение архива <arch>, обслуживаемого архиватором.

Архивный элемент значений (потомок от TVArchEl):

  • virtual void fullErase( ); - Полное удаление части архива в архиваторе.
  • virtual long long end( ); - Время окончания архива в архиваторе.
  • virtual long long begin( ); - Время начала архива в архиваторе.
  • virtual TVariant getValProc( long long *tm, bool up_ord ); - Функция обработки запроса одного значения из архива.
  • virtual void getValProc( TValBuf &buf, long long beg, long long end ); — Функция обработки запроса модулем на получение данных.
  • virtual void setValProc( TValBuf &buf, long long beg, long long end ); - Функция обработки запроса модулем на установку данных.
API модулей подсистемы "Протоколы".

Протокол (потомок от TProtocol):

  • virtual void outMess( XMLNode &io, TTransportOut &tro ); - Передача данных в дереве XML <in> удалённой системе посредством транспорта <tro> и текущего исходящего протокола.
  • virtual TProtocolIn *in_open( const string &name ) - Открыть/создать входной протокол.

Входной протокол (потомок от TProtocolIn):

  • virtual bool mess( const string &request, string &answer, const string &sender ); - Передача неструктурированного сообщения в протокол.
API модулей подсистемы "Транспорты".

Тип транспорта (потомок от TTipTransport):

  • virtual TTransportIn *In( const string &name, const string &db ); - Создать/открыть новый «входящий» транспорт.
  • virtual TTransportOut *Out( const string &name, const string &db ); - Создать/открыть новый «исходящий» транспорт.

Входящий транспорт (потомок от TTransportIn):

  • virtual string getStatus( ); - Статус интерфейса.
  • virtual void start(); - Запуск транспорта.
  • virtual void stop(); - Останов транспорта.

Исходящий транспорт (потомок от TTransportOut):

  • virtual string getStatus( ); - Статус интерфейса.
  • virtual void start( ); - Запуск транспорта.
  • virtual void stop( ); - Останов транспорта.
  • virtual int messIO( const char *obuf, int len_ob, char *ibuf = NULL, int len_ib = 0, int time = 0, bool noRes = false ); - Отправка данных через транспорт. Время ожидания <time> соединения указывается в милисекундах. <noRes> используется протоколами для монопольного блокирования транспорта на время работы с ним и исключения собственной блокировки функцией.
API модулей подсистемы "Пользовательские интерфейсы".
Пользовательский интерфейс (потомок от TUI):
Не содержит специфических функций!
API модулей подсистемы "Специальные”.
Специальные (потомок от TSpecial):
Не содержит специфических функций!

 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]