13. Data in the OpenSCADA system and their storage in the DB (TConfig)
Storing data in the system based on the objects TConfig and TElem. These objects store the structure and fields' values of the database, allowing for direct loading and saving the configuration via the "DB" subsystem. For the specialized different types data storage the TVariant object is provided.
TElem object contains the structure of database record. Structure of the record contains extensive information about the elements, their types, sizes and other parameters. Information in this structure is enough to create, control and manage the real structure of the database. Elementary unit of the record is the cell Tfld.
TSonfig object is the heir of TElem and contains the actual values of elements. TConfig is used as the parameter in the functions of the manipulating with the table's records in the "DB" subsystem. Elementary unit of the record is the cell TCfg.
To provide an opportunity to inform the data storehouse about the changes in the structure it is provides an object TValElem, from which it is inherited the storehouse TConfig and the list of which is contained in the TElem structure.
13.1. Data object (TConfig)
| Inherits: | TValElem |
| Inherited: | TParamContr, TController, TMArchivator, TPrmTempl, TPrmTmplLib, TUser, TGroup, TTransportIn, TTransportOut, TBD, TVArchive, TVArchivator, а также модульные объекты хранящие свои данные в БД. |
Public methods:
- TConfig( TElem *Elements = NULL ); -- Initializing constructor.
- TConfig &operator=( TConfig &cfg ); -- Copying from <cfg>.
- void cfgList( vector<string> &list ); -- Elements' list <list>.
- bool cfgPresent( const string &n_val ); -- Check for the element's presence <n_val>.
- TCfg &cfg( const string &n_val ); -- Getting of th element <n_val>.
- TCfg *at( const string &n_val, bool noExpt = false ); -- Getting of the element's pointer <n_val>. If the element is absent an exception is generated or the null pointer is returned when setting <noExpt>.
- void cfgViewAll( bool val = true ); -- Set/unset the sign of the visibility for all the elements.
- void cfgKeyUseAll( bool val ); -- Set/unset the sign of the using the key for all the elements.
- TElem &elem( ); -- The using structure.
- void setElem( TElem *Elements, bool first = false ); -- Setting the structure in <Elements>.
- void cntrCmdMake( XMLNode *fld, const string &path, int pos, const string &user = "root", const string &grp = "root", int perm = 0664 ); -- Formation of the information description of elements of the configuration for the management interface of OpenSCADA.
- void cntrCmdProc( XMLNode *fld, const string &elem, const string &user = "root", const string &grp = "root", int perm = 0664 ); -- Requests' of the OpenSCADA management interface to the elements of the configuration processing.
- bool noTransl( ); -- The sign: "Do not broadcast messages when working with the database".
- void setNoTransl( bool vl ); -- Setting the sign of the broadcasting the messages.
Protected methods:
- virtual bool cfgChange( TCfg &cfg ); -- Is called in the case of changing the contents of the configuration element.
13.2. Data cell (TCfg)
Data:
Additional flags to TFld (enum - TCfg::AttrFlg):
- TCfg::TransltText -- Translate the text variables of the record.
- TCfg::NoVal -- Do not reflect an element on the value of the TValue object.
- TCfg::Key -- key field.
- TCfg::Hide -- attribute is hidden.
Requests flags (enum - ReqFlg):
- TFld::ForceUse -- Forcing the setting of the flag of the element's using during the setting of its value.
Public methods:
- TCfg( TFld &fld, TConfig &owner ); -- Initializing constructor.
- const string &name( ); -- Cell name.
- bool operator==( TCfg &cfg ); -- Comparison of the cells.
- TCfg &operator=( TCfg &cfg ); -- Copying of the cells.
- bool view( ); -- The sign - "Cell is visible".
- bool keyUse( ); -- The sign - "Use the key" for the dataSeek() and dataDel() requests.
- bool noTransl( ); -- Признак «Отключить перевод» предназначен для отключения механизма перевода текстовых переменных для данной записи на время одного запроса.
- void setView( bool vw ); -- Установка признака «Ячейка видима» в <vw>.
- void setKeyUse( bool vl ); -- Установка признака «Использовать ключ» в <vl>.
- void setNoTransl( bool vl ); -- Установка признака «Отключить перевод».
- TFld &fld( ); -- Конфигурация ячейки.
- string getSEL( char RqFlg = 0 ); -- Получить значение выборочного типа с флагами запроса <RqFlg>.
- string getS( char RqFlg = 0 ); -- Получить значение строкового типа с флагами запроса <RqFlg>.
- double getR( char RqFlg = 0 ); -- Получить значение вещественного типа с флагами запроса <RqFlg>.
- int getI( char RqFlg = 0 ); -- Получить значение целого типа с флагами запроса <RqFlg>.
- bool getB( char RqFlg = 0 ); -- Получить значение логического типа с флагами запроса <RqFlg>.
- string &getSd( ); -- Получить прямой доступ к значению строкового типа.
- double &getRd( ); -- Получить прямой доступ к значению вещественного типа.
- int &getId( ); -- Получить прямой доступ к значению целого типа.
- bool &getBd( ); -- Получить прямой доступ к значению логического типа.
- void setSEL( const string &val, char RqFlg = 0 ); -- Установить значение выборочного типа в <val> с флагами запроса <RqFlg>.
- void setS( const string &val, char RqFlg = 0 ); -- Установить значение строкового типа в <val> с флагами запроса <RqFlg>.
- void setR( double val, char RqFlg = 0 ); -- Установить значение вещественного типа в <val> с флагами запроса <RqFlg>.
- void setI( int val, char RqFlg = 0 ); -- Установить значение целого типа в <val> с флагами запроса <RqFlg>.
- void setB( bool val, char RqFlg = 0 ); -- Установить значение логического типа в <val> с флагами запроса <RqFlg>.
13.3. Объект структуры данных (TElem)
| Наследуется: | TTipParam, TControllerS, TTipController, а также модульными объектами, совмещающими функции хранения структуры. |
Публичные методы:
- TElem( const string &name = "" ); -- Инициализация структуры с указанным именем <name>.
- string &elName( ); -- Имя структуры.
- void fldList( vector<string> &list ); -- Список ячеек в структуре <list>.
- unsigned fldSize( ); -- Количество ячеек в структуре.
- unsigned fldId( const string &name); -- Получение индекса ячейки по её идентификатору <name>.
- bool fldPresent( const string &name ); -- Проверка на наличие указанной ячейки <name>.
- int fldAdd( TFld *fld, int id = -1 ); -- Добавление/вставка ячейки <fld> в позицию <id> (-1 - вставка в конец).
- void fldDel( unsigned int id ); -- Удаление ячейки <id>.
- TFld &fldAt( unsigned int id ); -- Получение ячейки <id>.
- void valAtt( TValElem *cnt ); -- Вызывается автоматически в случае подключения структуры к хранилищу данных <cnt>.
- void valDet( TValElem *cnt ); -- Вызывается автоматически в случае отключения структуры от хранилища данных <cnt>.
13.4. Ячейка структуры данных (TFld)
Данные:
Тип ячейки (enum – TFld::Type):
- TFld::Boolean(0) -- логический тип;
- TFld::Integer(1) -- целочисленный тип;
- TFld::Real(4) -- вещественный тип;
- TFld::String(5) -- строковый тип.
Флаги ячейки (enum - TFld::AttrFlg):
- TFld::NoFlag -- флаги отсутствуют;
- TFld::Selected -- режим выборки из доступных значений, выборочный тип;
- TFld::SelfFld -- создавать собственную копию этой ячейки;
- TFld::NoWrite -- недоступна для записи;
- TFld::HexDec -- целый тип: шестнадцатеричное представление;
- TFld::OctDec -- целый тип: восьмеричное представление;
- TFld::DateTimeDec -- целый тип: содержит дату в UTC;
- TFld::FullText -- полнотекстовый, многострочный, режим тестового типа.
Публичные методы:
- TFld( ); -- Инициализация по умолчанию.
- TFld( TFld &ifld ); -- Копирующий конструктор.
- TFld( const char *name, const char *descr, Type type, unsigned char flg, const char *valLen = "", const char *valDef = "", const char *vals = "", const char *nSel = "", const char *res = "" ); -- Инициализация с указанной конфигурацией.
- TFld &operator=( TFld &fld ); -- Копирование ячейки из <fld>.
- const string &name( ); -- Имя ячейки.
- const string &descr( ); -- Описание ячейки.
- int len( ); -- Размер значения ячейки (символов в символьном представлении).
- int dec( ); -- Размер дробной части для вещественного (символов в символьном представлении).
- Type type( ); -- Тип ячейки.
- unsigned flg( ); -- Флаги ячейки.
- const string &def( ); -- Значение по умолчанию.
- string values( ); -- Рабочий диапазон значения или перечень возможных значений для выборочного типа (в виде - "vl1;vl2;vl3").
- string selNames( ); -- Перечень имён значений для выборочного типа (в виде - "Value 1;Value 2;Value 3").
- const string &reserve( ); -- Резервный параметр.
- void setDescr( const string &dscr ); -- Установка описания в <dscr>.
- void setLen( int vl ); -- Установка размера ячейки в <vl>.
- void setDec( int vl ); -- Установка дробной части для вещественного, в <vl>.
- void setDef( const string &def ); -- Установка значения по умолчанию в <def>.
- void setFlg( unsigned flg ); -- Установка флагов в <flg>.
- void setValues( const string &vls ); -- Установка рабочего диапазона значения или перечня возможных значений для выборочного типа (в виде - "vl1;vl2;vl3") в <vls>.
- void setSelNames( const string &slnms ); -- Установка перечня имён значений для выборочного типа (в виде - "Value 1;Value 2;Value 3") в <slnms>.
- void setReserve( const string &ires ); -- Установка резервного параметра в <res>.
- const vector<string> &selValS(); -- Список вариантов значений для строкового типа.
- const vector<int> &selValI(); -- Список вариантов значений для целого типа.
- const vector<double> &selValR(); -- Список вариантов значений для вещественного типа.
- const vector<bool> &selValB(); -- Список вариантов значений для логического типа.
- const vector<string> &selNm(); -- Список имён вариантов значений.
- string selVl2Nm( const string &val ); -- Получить выбранное имя по значению <val> строкового типа.
- string selVl2Nm( int val ); -- Получить выбранное имя по значению целого <val> типа.
- string selVl2Nm( double val ); -- Получить выбранное имя по значению <val> вещественного типа.
- string selVl2Nm( bool val ); -- Получить выбранное имя по значению <val> логического типа.
- string selNm2VlS( const string &name ); -- Получить значение строкового типа по выбранному имени <name>.
- int selNm2VlI( const string &name ); -- Получить значение целого типа по выбранному имени <name>.
- double selNm2VlR( const string &name ); -- Получить значение вещественного типа по выбранному имени <name>.
- bool selNm2VlB( const string &name ); -- Получить значение логического типа по выбранному имени <name>.
- XMLNode *cntrCmdMake( XMLNode *opt, const string &path, int pos, const string &user = "root", const string &grp = "root", int perm = 0664 ); -- Создать элемент формы в соответствии с параметрами ячейки.
13.5. Объект упреждения про смену структуры (TValElem)
| Наследуется: | TValue, TConfig. |
Защищённые методы:
- virtual void detElem( TElem *el ); -- Уведомление элементом <el> контейнера про желание отключиться.
- virtual void addFld( TElem *el, unsigned id ) = 0; -- Уведомление про добавление ячейки <id> елемента <el>.
- virtual void delFld( TElem *el, unsigned id ) = 0; -- Уведомление про удаление ячейки <id> елемента <el>.
13.6. Ячейка данных (TVariant)
Данные:
Значения ошибки для различных типов данных (define):
- EVAL_BOOL -- Значение ошибки логического (2);
- EVAL_INT -- Значение ошибки целого (-2147483647);
- EVAL_REAL -- Значение ошибки вещественного (-3.3E308);
- EVAL_STR -- Значение ошибки строкового ("<EVAL>").
Типы данных (enum - TVariant::Type):
- TVariant::Null -- тип данных и данные не установлены.
- TVariant::Boolean -- логический тип (boolean, 8бит).
- TVariant::Integer -- целочисленный тип (integer, 32бит).
- TVariant::Real -- вещественный тип (double).
- TVariant::String -- строка.
- TVariant::Object -- объект.
Публичные методы:
- TVariant( ); -- Конструктор по умолчанию.
- TVariant( char ivl ); -- Конструктор для логического типа.
- TVariant( int ivl ); -- Конструктор для целого типа.
- TVariant( double ivl ); -- Конструктор для вещественного типа.
- TVariant( string ivl ); -- Конструктор для строки.
- TVariant( TVarObj *ivl ); -- Конструктор для объекта.
- TVariant( const TVariant &var ); -- Копирующий конструктор.
- bool operator==( TVariant &vr ); -- Сравнение объекта.
- TVariant &operator=( const TVariant &vr ); -- Копирование объекта.
- bool isNull( ) const; -- Признак того, что объект не инициирован.
- Type type( ) const; -- Тип значения.
- void setType( Type tp ); -- Установка типа.
- bool isModify( ); -- Флаг модификации. Служит в объектных функциях для индикации модификации переменных.
- void setModify( bool vl = true ); -- Установка флага модификации.
- char getB( ) const; -- Получение значения как логическое.
- int getI( ) const; -- Получение значения как целого.
- double getR( ) const; -- Получение значения как вещественного.
- string getS( ) const; -- Получение значения как строки.
- TVarObj *getO( ) const; -- Получение объекта.
- void setB( char val ); -- Установка в значение логического.
- void setI( int val ); -- Установка в значение целого.
- void setR( double val ); -- Установка в значение вещественного.
- void setS( const string &val ); -- Установка в значение строки.
- void setO( TVarObj *val ); -- Установка объекта.
13.7. Пользовательский объект (TVarObj)
Публичные методы:
- TVarObj( ); -- Конструктор.
- int connect( ); -- Подключение к объекту.
- int disconnect( ); -- Отключение от объекта.
- virtual TVariant propGet( const string &id ); -- Запрос свойства объекта с идентификатором <id>.
- virtual void propSet( const string &id, TVariant val ); -- Установка свойства объекта с идентификатором <id> в значение <val>.
- virtual string getStrXML( const string &oid = "" ); -- Преобразование содержимого объекта в поток XML.
- virtual TVariant funcCall( const string &id, vector<TVariant> &prms ); -- Вызов функции объекта с идентификатором <id> и параметрами <prms>.