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; — Èñòî÷íèê/ïðîèñõîæäåíèå ìîäóëÿ.
Ìåòîäû: |
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):
Íå ñîäåðæèò ñïåöèôè÷åñêèõ ôóíêöèé! |