12. Êîìïîíåíòû îáúåêòíîé ìîäåëè ñèñòåìû OpenSCADA
Îáúåêòíàÿ ìîäåëü ñèñòåìû OpenSCADA ñòðîèòñÿ íà îñíîâå îáúåêòà ôóíêöèè TFunction, ïàðàìåòðàõ ôóíêöèè IO è êàäðå çíà÷åíèé ôóíêöèè TValFunc.  ïîñëåäñòâèè îáúåêòû ôóíêöèè âêëþ÷àþòñÿ â îáúåêòíîå äåðåâî, ôîðìèðóÿ îáúåêòíóþ ìîäåëü ñèñòåìû. Èñïîëüçîâàíèå ôóíêöèé îáúåêòíîé ìîäåëè ïðîèçâîäèòñÿ ïóò¸ì ñâÿçûâàíèÿ êàäðà çíà÷åíèé TValFunc ñ ôóíêöèåé.
Èäåÿ â öåëîì äîñòóïíî ïðåäñòàâëåííà íà ðèñ. 7.

Ðèñ. 7. Îñíîâà ñðåäû ïðîãðàììèðîâàíèÿ ñèñòåìû OpenSCADA.
Îáúåêò ôóíêöèè (TFunction) ïðåäîñòàâëÿåò èíòåðôåéñ äëÿ ôîðìèðîâàíèÿ ïàðàìåòðîâ ôóíêöèè è àëãîðèòìà âû÷èñëåíèÿ â îáúåêòå, íàñëåäóþùåì åãî.
Îáúåêò ïàðàìåòðà ôóíêöèè (IO) ñîäåðæèò êîíôèãóðàöèþ îòäåëüíî âçÿòîãî ïàðàìåòðà.
Îáúåêò êàäðà çíà÷åíèé (TValFunc) ñîäåðæèò çíà÷åíèÿ â ñîîòâåòñòâèè ñî ñòðóêòóðîé ñâÿçàííîé ôóíêöèè. Ïðè èñïîëíåíèè àëãîðèòìà àññîöèèðîâàíîé ôóíêöèè èñïîëüçóþòñÿ çíà÷åíèÿ ýòîãî îáúåêòà.
12.1. Îáúåêò ôóíêöèè (TFunction)
Íàñëåäóåò: | TCntrNode |
Íàñëåäóåòñÿ: | Ìîäóëÿìè è óçëàìè ñèñòåì, ñîäåðæàùèìè ôóíêöèè äëÿ ïóáëèêàöèè â îáúåêòíóþ ìîäåëü ñèñòåìû. |
Ïóáëè÷íûå ìåòîäû:
- TFunction( const string &iid ); - Èíèöèàëèçèðóþùèé êîíñòðóêòîð ôóíêöèè ñ èäåíòèôèêàòîðîì <id>.
- TFunction &operator=( TFunction &func ); - Êîïèðîâàíèå ôóíêöèé.
- string &id( ); - Èäåíòèôèêàòîð ôóíêöèè.
- virtual string name( ); - Ëîêàëèçîâàííîå èìÿ ôóíêöèè.
- virtual string descr( ); - Îïèñàíèå ôóíêöèè.
- bool startStat( ); - Ñîñòîÿíèå - «Ôóíêöèÿ çàïóùåíà».
- int use( ); - Ñ÷¸ò÷èê èñïîëüçîâàíèÿ ôóíêöèè.
- virtual void setStart( bool val ); - Çàïóñê/îñòàíîâ <val> ôóíêöèè.
- void ioList( vector<string> &list ); - Ñïèñîê ïàðàìåòðîâ ôóíêöèè <list>.
- int ioId( const string &id ); - Ïîëó÷åíèå èäåíòèôèêàòîðà ïàðàìåòðà ôóíêöèè <id>.
- int ioSize( ); - Êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè.
- IO *io( int id ); - Ïîëó÷åíèå ïàðàìåòðà ôóíêöèè ïî èíäåêñó <id>.
- void ioAdd( IO *io ); - Äîáàâëåíèå ïàðàìåòðà ôóíêöèè <io>.
- int ioIns( IO *io, int pos ); - Âñòàâêà ïàðàìåòðà ôóíêöèè <io> â ïîçèöèþ <pos>. Âîçâðàùàåò ðåàëüíîå ïîëîæåíèå íîâîãî ïàðàìåòðà.
- void ioDel( int pos ); - Óäàëåíèå ïàðàìåòðà ôóíêöèè â ïîçèöèè <pos>.
- void ioMove( int pos, int to ); - Ïåðåìåùåíèå ïàðàìåòðà ôóíêöèè èç ïîçèöèè <pos> â ïîçèöèþ to>.
- virtual void calc( TValFunc *val ); - Âû÷èñëåíèå àëãîðèòìà ôóíêöèè íàä óêàçàííûìè çíà÷åíèÿìè <val>.
- void valAtt( TValFunc *vfnc ); - Âûçûâàåòñÿ îáúåêòîì êàäðà çíà÷åíèé <vfnc> â ñëó÷àå ñâÿçûâàíèÿ ñ ôóíêöèåé.
- void valDet( TValFunc *vfnc ); - Âûçûâàåòñÿ îáúåêòîì êàäðà çíà÷åíèé <vfnc> â ñëó÷àå îòâÿçûâàíèÿ îò ôóíêöèè.
- virtual void preIOCfgChange( ); - Âûçûâàåòñÿ ïåðåä èçìåíåíèåì êîíôèãóðàöèè ôóíêöèè.
- virtual void postIOCfgChange( ); - Âûçûâàåòñÿ ïîñëå èçìåíåíèÿ êîíôèãóðàöèè ôóíêöèè.
Çàùèù¸ííûå àòðèáóòû:
- string mId; - Èäåíòèôèêàòîð ôóíêöèè.
- bool run_st; - Ïðèçíàê - «Çàïóùåí».
- TValFunc *mTVal; - Ññûëêà íà îáúåêò çíà÷åíèé, èñïîëüçóåìûé äëÿ òåñòèðîâàíèÿ ôóíêöèè. Ìîæåò îòñóòñòâîâàòü.
12.2. Îáúåêò ïàðàìåòðà ôóíêöèè (IO)
Äàííûå:
Òèïû ïàðàìåòðà (enum - IO::Type):
- IO::String - ñòðîêà/òåêñò;
- IO::Integer - öåëîå;
- IO::Real - âåùåñòâåííîå;
- IO::Boolean - ëîãè÷åñêèé;
- IO::Object - îáúåêò.
Ôëàãè ïàðàìåòðà (enum - IO::IOFlgs):
- IO::Default - ðåæèì ïî óìîë÷àíèþ (âõîä);
- IO::Output - âûõîä;
- IO::Return - âîçâðàò.
Ïóáëè÷íûå ìåòîäû:
- IO( const char *id, const char *name, IO::Type type, unsigned flgs, const char *def = "", bool hide = false, const char *rez = "" ); - Èíèöèàëèçèðóþùèé êîíñòðóêòîð.
- IO &operator=( IO &iio ); - Êîïèðîâàíèå ïàðàìåòðîâ ôóíêöèè.
- const string &id( ); - Èäåíòèôèêàòîð ïàðàìåòðà ôóíêöèè.
- const string &name( ); - Ëîêàëèçîâàííîå èìÿ ïàðàìåòðà ôóíêöèè.
- const Type &type( ); - Òèï ïàðàìåòðà ôóíêöèè.
- unsigned flg( ); - Ôëàãè ïàðàìåòðà ôóíêöèè.
- const string &def( ); - Çíà÷åíèå ïî óìîë÷àíèþ.
- bool hide( ); - Ïðèçíàê - «Ñêðûòî».
- const string &rez( ); - Ðåçåðâíîå ñâîéñòâî ïàðàìåòðà ôóíêöèè.
- void setId( const string &val ); - Óñòàíîâèòü èäåíòèôèêàòîð â <val>.
- void setName( const string &val ); - Óñòàíîâèòü èìÿ â <val>.
- void setType( Type val ); - Óñòàíîâèòü òèï â <val>.
- void setFlg( unsigned val ); - Óñòàíîâèòü ôëàãè â <val>.
- void setDef( const string &val ); - Óñòàíîâèòü çíà÷åíèå ïî óìîë÷àíèþ â <val>.
- void setHide( bool val ); - Óñòàíîâèòü/ñíÿòü ïðèçíàê - «Ñêðûòî».
- void setRez( const string &val ); - Óñòàíîâèòü ðåçåðâíîå ñâîéñòâî â <val>.
12.3. Îáúåêò çíà÷åíèÿ ôóíêöèè (TValFunc).
Ïóáëè÷íûå ìåòîäû:
- TValFunc( const string &iname = "", TFunction *ifunc = NULL, bool iblk = true ); - Èíèöèàëèçèðóþùèé êîíñòðóêòîð.
- string user( ); - Ïîëüçîâàòåëü, îò èìåíè êîòîðîãî èñïîëíÿåòñÿ ôóíêöèÿ.
- const string &vfName( ); - Èìÿ îáúåêòà çíà÷åíèé.
- bool blk( ); - Ïðèçíàê - "Áëîêèðîâàíèå èçìåíåíèé ïàðàìåòðîâ ôóíêöèè".
- bool dimens( ); - Ïðèçíàê - "Èçìåðÿòü âðåìÿ âû÷èñëåíèÿ".
- bool mdfChk( ); - Ïðèçíàê - "Ïðîâåðêà àòðèáóòîâ íà ìîäèôèêàöèþ".
- void setUser( const string &iuser ); - Óñòàíîâèòü ïîëüçîâàòåëÿ, îò èìåíè êîòîðîãî áóäåò èñïîëíÿòñÿ ôóíêöèÿ.
- void setVfName( const string &nm ); - Óñòàíîâèòü èìÿ îáúåêòà çíà÷åíèé â <nm>.
- void setDimens( bool set ) - Óñòàíîâêà/ñáðîñ <set> ïðèçíàêà - «Èçìåðÿòü âðåìÿ âû÷èñëåíèÿ».
- void setMdfChk( bool set ); - ñòàíîâêà/ñáðîñ <set> ïðèçíàêà - "Ïðîâåðêà àòðèáóòîâ íà ìîäèôèêàöèþ".
- void ioList( vector<string> &list ); - Ñïèñîê ïàðàìåòðîâ ôóíêöèè <list>.
- int ioId( const string &id ); - Ïîëó÷åíèå èíäåêñà ïàðàìåòðà <id>.
- int ioSize( ); - Îáùåå êîëè÷åñòâî ïàðàìåòðîâ.
- IO::Type ioType( unsigned id ); - Òèï ïàðàìåòðà <id>.
- unsigned ioFlg( unsigned id ); - Ôëàãè ïàðàìåòðà <id>.
- bool ioHide( unsigned id ); - Ïðèçíàê ïàðàìåòðà <id> - «Ñêðûò».
- bool ioMdf( unsigned id ); - Ïðèçíàê ïàðàìåòðà <id> - «Ìîäèôèöèðîâàí».
- string getS( unsigned id ); - Ïîëó÷èòü çíà÷åíèå (ñòðîêà) ïàðàìåòðà <id>.
- int getI( unsigned id ); - Ïîëó÷èòü çíà÷åíèå (öåëîå) ïàðàìåòðà <id>.
- double getR( unsigned id ); - Ïîëó÷èòü çíà÷åíèå (âåùåñòâåííîå) ïàðàìåòðà <id>.
- TVarObj *getO( unsigned id ); - Ïîëó÷èòü çíà÷åíèå îáúåêòà ïàðàìåòðà <id>.
- bool getB( unsigned id ); - Ïîëó÷èòü çíà÷åíèå (ëîãè÷åñêîå) ïàðàìåòðà <id>.
- void setS( unsigned id, const string &val ); - Óñòàíîâèòü çíà÷åíèå <val> (ñòðîêà) ïàðàìåòðà <id>.
- void setI( unsigned id, int val ); - Óñòàíîâèòü çíà÷åíèå <val> (öåëîå) ïàðàìåòðà <id>.
- void setR( unsigned id, double val ); - Óñòàíîâèòü çíà÷åíèå <val> (âåùåñòâåííîå) ïàðàìåòðà <id>.
- void setB( unsigned id, bool val ); - Óñòàíîâèòü çíà÷åíèå <val> (ëîãè÷åñêîå) ïàðàìåòðà <id>.
- void setO( unsigned id, TVarObj *val ); - Óñòàíîâèòü çíà÷åíèå <val> îáúåêòà ïàðàìåòðà <id>.
- virtual void calc( const string &user = "" ); - Âû÷èñëèòü îò èìåíè ïîëüçîâàòåëÿ <user> èëè ïîëüçîâàòåëÿ, óñòàíîâëåííîãî ðàíåå.
- double calcTm( ); - Âðåìÿ âû÷èñëåíèÿ.
- void setCalcTm( double vl ); - Èíèöèàëèçàöèÿ âðåìåíè âû÷èñëåíèÿ çíà÷åíèåì <vl>.
- TFunction *func( ); - Ñâÿçàííàÿ ôóíêöèÿ.
- void setFunc( TFunction *func, bool att_det = true ); - Ñâÿçàòü ñ óêàçàííîé ôóíêöèåé <func>.
- virtual void preIOCfgChange( ); - Âûçûâàåòñÿ ïåðåä èçìåíåíèåì êîíôèãóðàöèè.
- virtual void postIOCfgChange( ); - Âûçûâàåòñÿ ïîñëå èçìåíåíèÿ êîíôèãóðàöèè.