OpenSCADAWiki: Doc/API/part19 ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Doc/API/part19 from 2015-02-12 12:47:05..

19. API ìîäóëåé ìîäóëüíûõ ïîäñèñòåì

Ìîäóëè â ñèñòåìå OpenSCADA ðåàëèçóþòñÿ â âèäå ðàçäåëÿåìûõ áèáëèîòåê. Êàê óæå ðàíåå óïîìèíàëîñü, îäíà òàêàÿ áèáëèîòåêà ìîæåò ñîäåðæàòü ìíîæåñòâî ìîäóëåé ïîäñèñòåì OpenSCADA, ôàêòè÷åñêè âûñòóïàÿ â ðîëè êîíòåéíåðà.


Ïåðâûì øàãîì ïðè ïîäêëþ÷åíèè ðàçäåëÿåìûõ (SO — shared object) áèáëèîòåê ÿâëÿåòñÿ ïîäêëþ÷åíèå ôóíêöèé èíèöèàëèçàöèè. Ýòè ôóíêöèè äîëæíû áûòü îïðåäåëåíû êàê îáû÷íûå “Ñ” ôóíêöèè äëÿ èñêëþ÷åíèÿ èñêàæåíèÿ èìåí ôóíêöèé. Îáû÷íî ýòî äåëàåòñÿ ñëåäóþùèì îáðàçîì:

//================== CUT =========================
extern "C"
{
#ifdef MOD_INCL
    //Íóæíî óêàçûâàòü òîëüêî â ñëó÷àå ïîääåðæêè ìîäóëåì âîçìîæíîñòè
    //âëèíêîâêè â ÿäðî OpenSCADA
    TModule::SAt bd_DBF_module( int n_mod )
#else
    TModule::SAt module( int n_mod )
#endif
    {
    //Ôîðìèðîâàíèå îïèñàòåëåé ìîäóëåé èç ñïèñêà
    //äîñòóïíûõ â ðàçäåëÿåìîé áèáëèîòåêå.
    }

#ifdef MOD_INCL
    //Íóæíî óêàçûâàòü òîëüêî â ñëó÷àå ïîääåðæêè ìîäóëåì âîçìîæíîñòè
    //âëèíêîâêè â ÿäðî OpenSCADA
    TModule *bd_Tmpl_attach( const TModule::SAt &AtMod, const string &source )
#else
    TModule *attach( const TModule::SAt &AtMod, const string &source )
#endif
    {
    //Ïîäêëþ÷èòü óêàçàííûé ìîäóëü
    }
}
//================== CUT =========================


Ôóíêöèè äëÿ ðàáîòû ñ ðàçäåëÿåìîé áèáëèîòåêîé:
TModule::SAt module( int n_mod );

Ôóíêöèÿ ïðåäíàçíà÷åíà äëÿ ïîñëåäîâàòåëüíîãî îïðîñà èíôîðìàöèè î ìîäóëÿõ, ñîäåðæàùèõñÿ â SO áèáëèîòåêå. Ïàðàìåòð <n_mod> óêàçûâàåò íà ïîðÿäêîâûé íîìåð çàïðàøèâàåìîãî ìîäóëÿ è äîëæåí ïåðåáèðàòüñÿ, íà÷èíàÿ ñ íóëÿ.  ñëó÷àå îòñóòñòâèÿ ìîäóëÿ ñ äàííûì èäåíòèôèêàòîðîì ôóíêöèÿ äîëæíà âîçâðàùàòü ñòðóêòóðó ñ èìåíåì ìîäóëÿ íóëåâîé äëèíû, ÷òî è ñëóæèò îêîí÷àíèåì ïðîöåññà ñêàíèðîâàíèÿ.

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

Ïîäêëþ÷åíèå ê óêàçàííîìó ìîäóëþ.

Ïðàêòè÷åñêè âñå ôóíêöèè è äàííûå ñèñòåìû ñâåäåíû â API-ñèñòåìû, îïèñûâàåìîãî â äàííîì äîêóìåíòå. Îäíàêî äëÿ óïðîùåíèÿ è óñêîðåíèÿ ïðîöåññà íàïèñàíèÿ ìîäóëåé îñíîâíûå ôóíêöèè, ïåðåîïðåäåëÿåìûå â ìîäóëÿõ, ïðèâåäåíû â òàáëèöå 22.


Òàáëèöà 22. Îñíîâíûå ôóíêöèè, èñïîëüçóþùèåñÿ ïðè ñîçäàíèè ìîäóëåé
Îáùåå API

API îáúåêòà (TCntrNode):

  • virtual void load_( ); — Çàãðóçêà îáúåêòà èç õðàíèëèùà.
  • virtual void save_( ); — Ñîõðàíåíèå îáúåêòà â õðàíèëèùå.

Îáùåå API ìîäóëåé (TModule):

Àòðèáóòû:
  • string mId; — Èäåíòèôèêàòîð ìîäóëÿ.
  • string mName; — Èìÿ ìîäóëÿ.
  • string mDescr; — Îïèñàíèå ìîäóëÿ.
  • string mType; — Òèï ìîäóëÿ.
  • string mVers; — Âåðñèÿ ìîäóëÿ.
  • string mAutor; — Àâòîð ìîäóëÿ.
  • string mLicense; — Ëèöåíçèÿ ìîäóëÿ.
  • string mSource; — Èñòî÷íèê/ïðîèñõîæäåíèå ìîäóëÿ.

Ìåòîäû:

  • virtual void modStart( ); — Çàïóñê ìîäóëÿ.
  • virtual void modStop( ); — Îñòàíîâ ìîäóëÿ.
  • virtual void modInfo( vector<string> &list ); — Ñïèñîê äîñòóïíûõ ýëåìåíòîâ èíôîðìàöèè î ìîäóëå. Ïðåäóñìîòðåíû ñëåäóþùèå èíôîðìàöèîííûå ýëåìåíòû:
    Module — èäåíòèôèêàòîð ìîäóëÿ;
    Name — ëîêàëèçîâàííîå èìÿ ìîäóëÿ;
    Type — òèï ìîäóëÿ;
    Source — èñòî÷íèê ìîäóëÿ (êîíòåéíåð);
    Version — âåðñèÿ ìîäóëÿ;
    Author — àâòîðà ìîäóëÿ;
    Description — îïèñàíèå ìîäóëÿ;
    License — ëèöåíçèÿ ìîäóëÿ.
  • virtual string modInfo( const string &name ); — Çàïðîñ óêàçàííîãî ýëåìåíòà èíôîðìàöèè.
  • virtual void perSYSCall( unsigned int cnt ); — Âûçîâ èç ñèñòåìíîãî ïîòîêà, ñ ïåðèîäè÷íîñòüþ 10 ñåêóíä è ñåêóíäíûì ñ÷¸ò÷èêîì <cnt>.
  • void postEnable( int flag ); — Ïîäêëþ÷åíèå ìîäóëÿ ê äèíàìè÷åñêîìó äåðåâó îáúåêòîâ.
  • void modFuncReg( ExpFunc *func ); — Ðåãèñòðàöèÿ ýêñïîðòèðóåìîé ôóíêöèè.
API ìîäóëåé ïîäñèñòåìû “ÁÄ”.

Òèï ÁÄ (ïîòîìîê îò TTypeBD):

  • virtual TBD *openBD( const string &id ); — Îòêðûòü/ñîçäàòü ÁÄ.

ÁÄ (ïîòîìîê îò TBD):

  • virtual void enable( ); — Âêëþ÷åíèå ÁÄ.
  • virtual void disable( ); — Îòêëþ÷åíèå ÁÄ.
  • 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 ìîäóëåé ïîäñèñòåìû "Òðàíñïîðòû".

Òèï òðàíñïîðòà (ïîòîìîê îò TTypeTransport):

  • virtual TTransportIn *In( const string &name, const string &db ); — Ñîçäàòü/îòêðûòü íîâûé «âõîäÿùèé» òðàíñïîðò.
  • virtual TTransportOut *Out( const string &name, const string &db ); — Ñîçäàòü/îòêðûòü íîâûé «èñõîäÿùèé» òðàíñïîðò.

Âõîäÿùèé òðàíñïîðò (ïîòîìîê îò TTransportIn):

  • virtual string getStatus( ); — Ñòàòóñ èíòåðôåéñà.
  • virtual void setAddr( const string &addr ); — Óñòàíîâêà àäðåñà òðàíñïîðòà. Ìîæåò ïåðåîïðåäåëÿòüñÿ äëÿ îáðàáîòêè è ïðîâåðêè ñïåöèôè÷åñêîãî äëÿ ìîäóëÿ ôîðìàòà àäðåñà òðàíñïîðòà.
  • virtual void start(); — Çàïóñê òðàíñïîðòà.
  • virtual void stop(); — Îñòàíîâ òðàíñïîðòà.

Èñõîäÿùèé òðàíñïîðò (ïîòîìîê îò TTransportOut):

  • virtual string getStatus( ); — Ñòàòóñ èíòåðôåéñà.
  • virtual void setAddr( const string &addr ); — Óñòàíîâêà àäðåñà òðàíñïîðòà. Ìîæåò ïåðåîïðåäåëÿòüñÿ äëÿ îáðàáîòêè è ïðîâåðêè ñïåöèôè÷åñêîãî äëÿ ìîäóëÿ ôîðìàòà àäðåñà òðàíñïîðòà.
  • 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 ìîäóëåé ïîäñèñòåìû "Ïðîòîêîëû".

Ïðîòîêîë (ïîòîìîê îò TProtocol):

  • virtual void itemListIn( vector<string> &ls, const string &curIt = "" ); — Ïåðå÷åíü ïîäºëåìåíòîâ ó âõîäÿùåãî ïðîòîêîëà, åñëè ïðîòîêîë èõ ïðåäóñìàòðèâàåò. Èñïîëüçóåòñÿ ïðè âûáîðå â êîíôèãóðàöèè îáúåêòà âõîäÿùåãî òðàíñïîðòà.
  • 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 ìîäóëåé ïîäñèñòåìû “Ñáîð äàííûõ”.

Òèï êîíòðîëëåðà (ïîòîìîê îò TTypeDAQ):

  • virtual void compileFuncLangs( vector<string> &ls ); — Ïåðå÷åíü ÿçûêîâ ïîëüçîâàòåëüñêîãî ïðîãðàììèðîâàíèÿ, ïîääåðæèâàåìûõ ìîäóëåì.
  • virtual void compileFuncSynthHighl( const string &lang, XMLNode &shgl ); — Çàïðîñ ïðàâèë ïîäñâåòêè ñèíòàêñèñà <shgl> óêàçàííîãî ÿçûêà ïîëüçîâàòåëüñêîãî ïðîãðàììèðîâàíèÿ <lang>.
  • 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 string getStatus( ); — Âûçîâ äëÿ ïîëó÷åíèÿ ñïåöèôè÷åñêîãî ñòàòóñà êîíòðîëëåðà.
  • virtual void enable_( ); — Âêëþ÷åíèå êîíòðîëëåðà.
  • virtual void disable_( ); — Îòêëþ÷åíèå êîíòðîëëåðà.
  • virtual void start_( ); — Çàïóñê êîíòðîëëåðà.
  • virtual void stop_( ); — Îñòàíîâ êîíòðîëëåðà.
  • virtual void redntDataUpdate( bool firstArchiveSync = false ); — Âûïîëíåíèå îïåðàöèè ïîëó÷åíèÿ äàííûõ èç ðåçåðâíîé ñòàíöèè. Âûçûâàåòñÿ àâòîìàòè÷åñêè çàäà÷åé îáñëóæèâàíèÿ ñõåìû ðåçåðâèðîâàíèÿ è ïåðåä çàïóñêîì äëÿ ñèíõðîíèçàöèè àðõèâîâ ñ óñòàíîâëåííûì ïàðàìåòðîì <firstArchiveSync>.
  • virtual TParamContr *ParamAttach( const string &name, int type ); — Ñîçäàíèå/îòêðûòèå íîâîãî ïàðàìåòðà.

Ïàðàìåòð êîíòðîëëåðà (ïîòîìîê îò TParamContr->TValue):

  • virtual void enable( ); — Âêëþ÷èòü ïàðàìåòð.
  • virtual void disable( ); — Îòêëþ÷èòü ïàðàìåòð.
  • virtual void setType( const string &tpId ); — Âûçûâàåòñÿ äëÿ ñìåíû òèïà ïàðàìåòðà <tpId> è ìîæåò áûòü îáðàáîòàí â îáúåêòå ìîäóëÿ, äëÿ ñìåíû ñîáñòâåííûõ äàííûõ.
  • virtual TVal* vlNew( ); — Âûçûâàåòñÿ ïðè ñîçäàíèè íîâîãî àòðèáóòà. Ìîæåò áûòü ïåðåîïðåäåë¸í äëÿ ðåàëèçàöèè îñîáîãî ïîâåäåíèÿ â ðàìêàõ ñâîåãî, íàñëåäîâàííîãî îò TVal, êëàññà ïðè äîñòóïå ê àòðèáóòó.
  • virtual void vlSet( TVal &val, const TVariant &pvl ); — Âûçûâàåòñÿ äëÿ àòðèáóòà ñ ïðÿìûì ðåæèìîì çàïèñè TVal::DirWrite (ñèíõðîííûé ðåæèì èëè çàïèñü âî âíóòðåííèé áóôåð îáúåêòà) ïðè óñòàíîâêå çíà÷åíèÿ, ñ öåëüþ íåïîñðåäñòâåííîé çàïèñè çíà÷åíèÿ â ôèçè÷åñêèé êîíòðîëëåð èëè áóôåð îáúåêòà.
  • virtual void vlGet( TVal &val ); — Âûçûâàåòñÿ äëÿ àòðèáóòà ñ ïðÿìûì ðåæèìîì ÷òåíèÿ TVal::DirRead (ñèíõðîííûé ðåæèì èëè ÷òåíèå èç âíóòðåííåãî áóôåðà îáúåêòà) ïðè ÷òåíèè çíà÷åíèÿ, ñ öåëüþ íåïîñðåäñòâåííîãî ÷òåíèÿ çíà÷åíèÿ èç ôèçè÷åñêîãî êîíòðîëëåðà èëè áóôåðà îáúåêòà.
  • virtual void vlArchMake( TVal &val ); — Âûçûâàåòñÿ ïðè ñîçäàíèè àðõèâà çíà÷åíèé ñ àòðèáóòîì <val> â êà÷åñòâå èñòî÷íèêà ñ öåëüþ èíèöèàëèçàöèè êà÷åñòâåííûõ õàðàêòåðèñòèê áóôåðà àðõèâà ñîãëàñíî îñîáåííîñòÿì èñòî÷íèêà äàííûõ è èõ îïðîñà.
API ìîäóëåé ïîäñèñòåìû "Àðõèâû".

Òèï àðõèâàòîðà (ïîòîìîê îò TTypeArñhivator):

  • virtual TMArchivator *AMess(const string &id, const string &db ); — Ñîçäàíèå àðõèâàòîðà ñîîáùåíèé.
  • virtual TVArchivator *AVal(const string &id, const string &db ); — Ñîçäàíèå àðõèâàòîðà çíà÷åíèé.

Àðõèâàòîð ñîîáùåíèé (ïîòîìîê îò TMArchivator):

  • virtual 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, time_t upTo = 0 ); — Çàïðîñèòü ñîîáùåíèå èç àðõèâàòîðà.

Àðõèâàòîð çíà÷åíèé (ïîòîìîê îò TVArchivator):

  • virtual void setValPeriod( double per ); — Óñòàíîâèòü ïåðèîäè÷íîñòü çíà÷åíèé àðõèâàòîðà.
  • virtual void setArchPeriod( int per ); — Óñòàíîâèòü ïåðèîäè÷íîñòü àðõèâèðîâàíèÿ.
  • virtual void start( ); — Çàïóñòèòü àðõèâàòîð.
  • virtual void stop( bool full_del = false ); — Îñòàíîâèòü àðõèâàòîð ñ âîçìîæíîñòüþ ïîëíîãî óäàëåíèÿ, åñëè óñòàíîâëåí <full_del>.
  • virtual TVArchEl *getArchEl( TVArchive &arch ); — Ïîëó÷åíèå àðõèâà <arch>, îáñëóæèâàåìîãî àðõèâàòîðîì.

Àðõèâíûé ýëåìåíò çíà÷åíèé (ïîòîìîê îò TVArchEl):

  • virtual void fullErase( ); — Ïîëíîå óäàëåíèå ÷àñòè àðõèâà â àðõèâàòîðå.
  • virtual int64_t end( ); — Âðåìÿ îêîí÷àíèÿ àðõèâà â àðõèâàòîðå.
  • virtual int64_t begin( ); — Âðåìÿ íà÷àëà àðõèâà â àðõèâàòîðå.
  • virtual TVariant getValProc( long long *tm, bool up_ord ); — Ôóíêöèÿ îáðàáîòêè çàïðîñà îäíîãî çíà÷åíèÿ èç àðõèâà.
  • virtual void getValsProc( TValBuf &buf, int64_t beg, int64_t end ); — Ôóíêöèÿ îáðàáîòêè çàïðîñà ìîäóëåì íà ïîëó÷åíèå äàííûõ ãðóïïû çíà÷åíèé <buf> çà óêàçàííûé ïðîìåæóòîê âðåìåíè.
  • virtual void setValsProc( TValBuf &buf, int64_t beg, int64_t end ); — Ôóíêöèÿ îáðàáîòêè çàïðîñà ìîäóëåì íà óñòàíîâêó äàííûõ ãðóïïû çíà÷åíèé <buf> çà óêàçàííûé ïðîìåæóòîê âðåìåíè.
API ìîäóëåé ïîäñèñòåìû "Ïîëüçîâàòåëüñêèå èíòåðôåéñû".
Ïîëüçîâàòåëüñêèé èíòåðôåéñ (ïîòîìîê îò TUI):
Íå ñîäåðæèò ñïåöèôè÷åñêèõ ôóíêöèé!
API ìîäóëåé ïîäñèñòåìû "Ñïåöèàëüíûå”.
Ñïåöèàëüíûå (ïîòîìîê îò TSpecial):
Íå ñîäåðæèò ñïåöèôè÷åñêèõ ôóíêöèé!

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