This is an old revision of
Doc/API/part5 from 2016-04-21 08:18:17..
5. Подсистема "Архивы" (TArchiveS)
Подсистема «Архивы» представлена объектом TArchiveS, который содержит на уровне подсистемы модульные объекты типов архиваторов TTypeArchivator. Каждый объект типа архиватора содержит объекты архиваторов сообщений TMArchivator и архиваторов значений TVArchivator. Кроме этого объект подсистемы архивы содержит методы архива сообщений и объекты архивов значений TVArchive. Объект архива значений TVArchive содержит буфер значений путём наследования объекта буфера TValBuf. Для связи архива значений с архиваторами предназначен объект элемента значения TVArchEl. Этот объект содержится в архиваторе и на него ссылается архив. Структура подсистемы "Архивы" представлена на рис. 5.
Рис. 5. Иерархическая структура подсистемы архивов.
Подсистема "Архивы" содержит механизмы архивирования сообщений и значений. Непосредственно содержит архив сообщений вместе с его буфером. Содержит методы доступа к архивам значений и архиваторам значений и сообщений. Кроме этого выполняет задачу активного сбора данных из источников значений для архивов значений, а также архивирование архива сообщений по архиваторам.
Архив значений (TVArchive) содержит буфер (TValBuf) для промежуточного накопления значений перед архивированием. Связывается с источником значений в лице параметров системы OpenSCADA в активном или пассивном режиме, а также с другими источниками в пассивном режиме. Для архивирования на физические хранилища связывается с архиваторами значений различных типов.
Объект буфера TValBuf содержит массив значений основных типов системы OpenSCADA: строка, целое, вещественное и логичное. Поддерживается хранение значений в режимах жесткой, мягкой сетки и режиме свободного доступа. Предусмотрен также режим времени высокого разрешения (микросекунды). Используется как для непосредственного хранения больших массивов значений, так и для обмена с большими массивами методом покадрового доступа.
Корневой объект модуля подсистемы "Архивы" (TTypeArchivator) содержит информацию о конкретно взятом типе модуля. В рамках отдельных модулей может реализовывать собственные общемодульные функции. В общем для модулей этого типа содержит методы доступа к хранилищам значений и сообщений.
Объект архиватора сообщений (TMArchivator) содержит конкретную реализацию хранилища сообщений. В общем для архиваторов сообщений предоставляется интерфейс доступа к реализации механизма архивирования в модулях.
Объект архиватора значений (TVArchivator) содержит конкретную реализацию хранилища значений. В общем для архиваторов значений предоставляется интерфейс доступа к реализации механизма архивирования и назначение архивов значений на обслуживание архиватором.
Объект элемента архива TVArchEl связывает объекты архивов с архиваторами. Используется для доступа к архиваторам из архива, а также к архивам из архиватора, т.е. для перекрёстных вызовов.
5.1. Объект подсистемы «Архивы» (TArchiveS)
Публичные методы:
- int subVer( ); — Версия подсистемы.
- int messPeriod( ); — Период архивирование сообщений из буфера (секунд).
- int valPeriod( ); — Период сбора значений для активных архиваторов (миллисекунд).
- int valPrior( ); — Приоритет задачи сбора значений для активных архиваторов.
- void setMessPeriod( int ivl ); — Установка периода архивирования сообщений из буфера (секунд).
- void setValPeriod( int ivl ); — Установка периода сбора значений для активных архиваторов (миллисекунд).
- void setValPrior( int ivl ); — Установка приоритета задачи сбора значений для активных архиваторов.
- void setToUpdate( ); — Установка флага планирования обновления.
- void subStart( ); — Запуск подсистемы.
- void subStop( ); — Останов подсистемы.
- void valList( vector<string> &list ); — Список архивов значений в подсистеме.
- bool valPresent( const string &iid ); — Проверка на наличие архива значений iid.
- void valAdd( const string &iid, const string &idb = "*.*" ); — Добавление нового архива значений iid.
- void valDel( const string &iid, bool db = false ); — Удаление архива значений iid.
- AutoHD<TVArchive> valAt( const string &iid ); — Подключение/обращение к архиву значений iid.
- void setActMess( TMArchivator *a, bool val ); — Установка архиватора сообщений a в активное состояние val. Активный архиватор будет подсистемой обеспечиваться потоком сообщений.
- void setActVal( TVArchive *a, bool val ); — Установка архива значений a в активное состояние val. Активный архив будет подсистемой обеспечиваться периодическим потоком значений (определяется периодичностью архива).
- AutoHD<TTypeArchivator> at( const string &name ); — Подключение/обращение к типу архиватора (модулю) name.
- void messPut( time_t tm, int utm, const string &categ, int8_t level, const string &mess, const string &arch = "" ); — Помещение значения mess с уровнем level категории categ и время tm+utm в буфер, а затем в архив сообщений или прямо в указанный архиваторы arch (разделены символом ';').
- void messPut( const vector<TMess::SRec> &recs ); — Помещение группы значений recs в буфер, а затем в архив сообщений.
- void messGet( time_t b_tm, time_t e_tm, vector<TMess::SRec> & recs, const string &category = "", int8_t level = TMess::Debug, const string &arch = "", time_t upTo = 0 ); — Запрос значений reqs за указанный период времени b_tm, e_tm для указанной категории (по шаблону) category и уровня level из архиваторов arch (разделены символом ';').
- time_t messBeg( const string &arch = "" ); — Начало архива сообщений в целом или для указанного архиватора arch.
- time_t messEnd( const string &arch = "" ); — Конец архива сообщений в целом или для указанного архиватора arch.
- TElem &messE( ); — Структура БД архиваторов сообщений.
- TElem &valE( ); — Структура БД архиваторов значений.
- TElem &aValE( ); — Структура БД архивов значений.
Публичные атрибуты:
- bool SubStarting; — Признак запуска подсистемы.
5.2. Объект архива значений (TVArchive)
Наследует: | TCntrNode, TValBuf, TConfig |
Данные:
Режим сбора данных/источник (struct — TVArchive::SrcMode):
- Passive — пассивный режим сбора данных, источник самостоятельно помещает данные в архив;
- PassiveAttr — пассивный режим сбора данных у атрибута параметра, атрибут параметра самостоятельно помещает данные в архив;
- ActiveAttr — активный режим сбора данных у атрибута параметра, атрибут параметра периодически опрашивается подсистемой "Архивы".
Публичные методы:
- TVArchive( const string &id, const string &db, TElem *cf_el ); — Инициализирующий конструктор архива. Где id — идентификатор архива, db — БД для хранения и cf_el — cтруктура БД архивов значений.
- string id( ); — Идентификатор архива.
- string name( ); — Имя архива.
- string dscr( ); — Описание архива.
- SrcMode srcMode( ); — Режим связывания с источником данных.
- string srcData( ); — Параметры источника данных, в случае режима доступа к параметру это адрес параметра.
- AutoHD<TVal> srcPAttr( bool force = false, const string &ipath = "" ); — Подключение к ассоциированному атрибуту параметра источника данных.
- bool toStart( ); — Признак: "Запускать архив при включении".
- bool startStat( ); — Состояние: "Архив запущен".
- string DB( ); — Адрес БД архива значений.
- string tbl( ); — Таблица БД архива значений.
- string fullDB( ); — Полное имя таблицы БД архива значений.
- int64_t end( const string &arch = BUF_ARCH_NM ); — Время окончания архива в целом (arch="") или указанного архиватора, буфера (arch="<bufer>").
- int64_t begin( const string &arch = BUF_ARCH_NM ); — Время начала архива в целом (arch="") или указанного архиватора, буфера (arch="<bufer>").
- int64_t period( const string &arch = BUF_ARCH_NM ); — Периодичность буфера архива или указанного архиватора (микросекунд).
- TFld::Type valType( bool full = false ); — Тип архивируемого значения. full — получать полный тип, иначе только общий.
- bool hardGrid( ); — Использование жесткой сетки в буфере архива.
- bool highResTm( ); — Использование высокого разрешения времени в буфере архива (микросекунды).
- int size( ); — Размер буфера архива (единицы).
- void setName( const string &inm ); — Установка имени архива.
- void setDscr( const string &idscr ); — Установка описания архива.
- void setSrcMode( SrcMode vl = SaveCur, const string &isrc = "<*>", bool noex = false ); — Установка режима связывания с источником данных.
- void setToStart( bool vl ); — Установка признака: "Запускать архив при включении".
- void setDB( const string &idb ); — Установка адреса БД архива значений.
- void setValType( TFld::Type vl ); — Установка типа архивируемого значения.
- void setHardGrid( bool vl ); — Установка использования жесткой сетки в буфере архива.
- void setHighResTm( bool vl ); — Установка использования высокого разрешения времени в буфере архива (микросекунды).
- void setSize( int vl ); — Установка размера буфера архива (единиц).
- void setPeriod( int64_t vl ); — Установка периодичности буфера архива.
- void start( ); — Запуск архива.
- void stop( bool full_del = false ); — Останов архива, с полным удалением full_del.
- TVariant getVal( int64_t *tm = NULL, bool up_ord = false, const string &arch = "", bool onlyLocal = false ); — Запрос одного значения за время tm и признаком притягивания к верху <up_ord> из указанного архиватора <arch>, буфера (arch="<bufer>") или всех архиваторов по мере падения качества (arch=""). Для обработки запроса только локальной станцией устанавиливается <onlyLocal>.
- void getVals( TValBuf &buf, int64_t beg = 0, int64_t end = 0, const string &arch = "", int limit = 100000, bool onlyLocal = false ); — Запрос кадра значений buf за время от beg до end из указанного архиватора arch, буфера (arch="<bufer>") или всех архиваторов по мере падения качества (arch=""), с ограничением размера запроса в limit записей. Для запроса только локальных архивов, без компенсации пробелов архивов из резервных станций, устанавливается onlyLocal.
- void setVals( TValBuf &buf, int64_t beg, int64_t end, const string &arch ); — Загрузка кадра значений buf за время от beg до end в указанный архиватор arch, буфер (arch="<bufer>") или все архиваторы (arch="").
- void getActiveData( ); — Опросить источник данных. Используется подсистемой для периодического сборa данных активными архивами.
- void archivatorList( vector<string> &ls ); — Список архиваторов, которыми обслуживается архив.
- bool archivatorPresent( const string &arch ); — Проверка архиватора на обслуживание данного архива.
- void archivatorAttach( const string &arch ); — Подключение данного архива на обслуживание указанным архиватором.
- void archivatorDetach( const string &arch, bool full = false ); — Отключение данного архива от обслуживание указанным архиватором.
- void archivatorSort( ); — Сортировка обслуживающих архиваторов в порядке ухудшения качества.
- string makeTrendImg( int64_t beg, int64_t end, const string &arch, int hsz = 650, int vsz = 230 ); — Формирование изображения (pdf) тренда за указанный промежуток времени beg, end и указанного архиватора arch.
- TArchiveS &owner( ); — Подсистема "Архивы" — владелец архива значений.
5.3. Объект буфера значений (TValBuf)
Публичные методы:
- TValBuf( ); — Инициализатор буфера с установками по умолчанию.
- TValBuf( TFld::Type vtp, int isz, int64_t ipr, bool ihgrd = false, bool ihres = false ); — Инициализатор буфера с указанными параметрами.
- void clear( ); — Очистка буфера.
- TFld::Type valType( bool full = false ); — Тип значения, хранимого буфером. full — получать полный тип, иначе только общий.
- bool hardGrid( ); — Работа буфера в режиме жесткой сетки.
- bool highResTm( ); — Работа буфера в режиме времени высокого разрешения (микросекунды).
- int size( ); — Максимальный размер буфера (едениц).
- int realSize( ); — Реальный размер буфера (едениц).
- int64_t period( ); — Периодичность значений в буфере (микросекунд). Если периодичность нулевая то буфер функционирует в режиме свободного доступа.
- int64_t begin( ); — Время начала буфера (микросекунд).
- int64_t end( ); — Время окончания буфера (микросекунд).
- bool vOK( int64_t ibeg, int64_t iend ); — Проверка наличия значений в буфере за указанный промежуток времени от ibeg до iend.
- void setValType( TFld::Type vl ); — Установка типа значения хранимого буфером.
- void setHardGrid( bool vl ); — Установка режима жесткой сетки.
- void setHighResTm( bool vl ); — Установка режима времени высокого разрешения (микросекунды).
- void setSize( int vl ); — Установка размера буфера (едениц).
- void setPeriod( int64_t vl ); — Установка периодичности значений в буфере (микросекунд).
- virtual void getVals( TValBuf &buf, int64_t beg = 0, int64_t end = 0 ); — Запрос кадра значений buf за время от beg до end.
- TVariant get( int64_t *tm = NULL, bool up_ord = false ); — Запрос значения за время tm и признаком притягивания к верху up_ord.
- virtual string getS( int64_t *tm = NULL, bool up_ord = false ); — Запрос значения строкового типа за время tm и признаком притягивания к верху up_ord.
- virtual double getR( int64_t *tm = NULL, bool up_ord = false ); — Запрос значения вещественного типа за время tm и признаком притягивания к верху up_ord.
- virtual int64_t getI( int64_t *tm = NULL, bool up_ord = false ); — Запрос значения целого типа за время tm и признаком притягивания к верху up_ord.
- virtual char getB( int64_t *tm = NULL, bool up_ord = false ); — Запрос значения логического типа за время tm и признаком притягивания к верху up_ord.
- virtual void setVals( TValBuf &buf, int64_t beg = 0, int64_t end = 0 ); — Установка кадра значений из buf за время от beg до end.
- void set( const TVariant &value, int64_t tm = 0 ); — Установка значения с временем tm.
- virtual void setS( const string &value, int64_t tm = 0 ); — Установка значения строкового типа с временем tm.
- virtual void setR( double value, int64_t tm = 0 ); — Установка значения вещественного типа с временем tm.
- virtual void setI( int64_t value, int64_t tm = 0 ); — Установка значения целого типа с временем tm.
- virtual void setB( char value, int64_t tm = 0 ); — Установка значения логического типа с временем tm.
- //
Защищённые методы:
- void makeBuf( TFld::Type v_tp, int isz, int64_t ipr, bool hd_grd, bool hg_res ); — Пересоздание буфера для указанных параметров.
5.4. Модульный объект типа архиватора (TTypeArchivator)
Наследует: | TModule. |
Наследуется: | Корневыми объектами модулей подсистемы «Архивы». |
Публичные методы:
- void messList( vector<string> &list ); — Список архиваторов сообщений.
- bool messPresent( const string &iid ); — Проверка на наличие указанного архиватора сообщений.
- void messAdd( const string &iid, const string &idb = "*.*" ); — Добавление архиватора сообщений.
- void messDel( const string &iid, bool full = false ); — Удаление архиватора сообщений.
- AutoHD<TMArchivator> messAt( const string &iid ); — Подключение к архиватору сообщений.
- void valList( vector<string> &list ); — Список архиваторов значений.
- bool valPresent( const string &iid ); — Проверка на наличие указанного архиватора значений.
- void valAdd( const string &iid, const string &idb = "*.*" ); — Добавление архиватора значений.
- void valDel( const string &iid, bool full = false ); — Удаление архиватора значений.
- AutoHD<TVArchivator> valAt( const string &iid ); — Подключение к архиватору значений.
- TArchiveS &owner( ); — Подсистема "Архивы" — владелец типа архиватора.
Защищённые методы:
- virtual TMArchivator *AMess( const string &iid, const string &idb ); — Модульный метод создание архиватора сообщений.
- virtual TVArchivator *AVal( const string &iid, const string &idb ); — Модульный метод создание архиватора значений.
5.5. Объект архиватора сообщений (TMArchivator)
Наследует: | TCntrNode, TConfig |
Наследуется: | Объектами архиваторов сообщений модулей подсистемы «Архивы». |
Публичные методы:
- TMArchivator( const string &id, const string &db, TElem *cf_el ); — Инициализирующий конструктор архиватора сообщений с идентификатором id, для хранения на БД db со структурой cf_el.
- string id( ); — Идентификатор архиватора.
- string workId( ); — Рабочий идентификатор, включает имя модуля.
- string name( ); — Имя архиватора.
- string dscr( ); — Описание архиватора.
- bool toStart( ); — Признак «Запускать архиватор».
- bool startStat( ); — Состояние архиватора «Запущен».
- string &addr( ); — Адрес хранилища архиватора.
- int &level( ); — Уровень сообщений, обслуживаемых архиватором.
- void categ( vector<string> &list ); — Категории (шаблоны) сообщений, обслуживаемых архиватором.
- string DB( ); — Адрес БД архиватора.
- string tbl( ); — Адрес таблицы БД архиватора.
- string fullDB( ); — Полный адрес таблицы БД архиватора.
- void setName( const string &vl ); — Установка имени архиватора.
- void setDscr( const string &vl ); — Установка описания архиватора.
- void setToStart( bool vl ); — Установка признака «Запускать архиватор».
- void setAddr( const string &vl ); — Установка адреса хранилища архиватора.
- void setLevel( int lev ); — Установка уровня сообщений, обслуживаемых архиватором.
- void setDB( const string &idb ); — Установка адреса БД архиватора.
- bool redntUse( ); — Режим получения данных у резервной станции.
- void setRedntUse( bool vl ); — Смена режима получения данных у резервной станции.
- bool redntMode( ); — Режим резервирования ("<high>", "<low>", "<optimal>", {ForceStation}), включение.
- void setRedntMode( bool vl ); — Установка режима резервирования, включение.
- string redntRun( ); — Конфигурация предпочтительного исполнения.
- void setRedntRun( const string &vl ); — Установка конфигурации предпочтительного исполнения.
- virtual void redntDataUpdate( ); — Выполнение операции получения данных из резервной станции. Вызывается автоматически процедурой обслуживания схемы резервирования подсистемы.
- virtual void start( ); — Запуск архиватора.
- virtual void stop( ); — Останов архиватора.
- virtual time_t begin( ); — Начало архива данного архиватора.
- virtual time_t end( ); — Конец архива данного архиватора.
- virtual bool put( vector<TMess::SRec> &mess, bool force = false ); — Поместить группу сообщений в архив сообщений данного архиватора. Возвращает "true", при успешной операции. force для прямой записи в архиватор минуя резервирование.
- 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 ); — Получить сообщения из архива данного архиватора для указанных параметров фильтра.
- TTypeArchivator &owner( ); — Тип архиватора – владелец архиватора сообщений.
Защищённые атрибуты:
- bool run_st; — Признак «Запущен».
- int messHead; — Указатель на последнее прочитанное сообщений буфера сообщений.
Защищённые методы:
- bool chkMessOK( const string &icateg, int8_t ilvl ); — Проверка сообщения на соответствие условиям фильтра.
5.6. Объект архиватора значений (TVArchivator)
Наследует: | TCntrNode, TConfig |
Наследуется: | Объектами архиваторов значений модулей подсистемы «Архивы». |
Публичные методы:
- TVArchivator( const string &id, const string &db, TElem *cf_el ); — Инициализирующий конструктор архиватора значений с идентификатором id, для хранения на БД db со структурой cf_el.
- string id( ); — Идентификатор архиватора.
- string workId( ); — Рабочий идентификатор, включает имя модуля.
- string name( ); — Имя архиватора.
- string dscr( ); — Описание архиватора.
- string addr( ); — Адрес хранилища архиватора.
- double valPeriod( ); — Периодичность значений архиватора (микросекунд).
- int archPeriod( ); — Периодичность архивирования значений архиватором. Время через которое архиватор производит архивирование кадра значений из буфера архива.
- int selPrior( ); — Приоритет выбора для режима "Все" архиваторы.
- bool toStart( ); — Признак «Запускать архиватор».
- bool startStat( ); — Состояние архиватора «Запущен».
- string DB( ); — Адрес БД архиватора.
- string tbl( ); — Адрес таблицы БД архиватора.
- string fullDB( ); — Полный адрес таблицы БД архиватора.
- void setName( const string &inm ); — Установка имени архиватора.
- void setDscr( const string &idscr ); — Установка описания архиватора.
- void setAddr( const string &vl ); — Установка адреса хранилища архиватора.
- void setValPeriod( double iper ); — Установка периодичности значений архиватора (микросекунд).
- void setArchPeriod( int iper ); — Установка периодичности архивирования значений архиватором. Время через которое архиватор производит архивирование кадра значений из буфера архива.
- void setSelPrior( int vl ); — Установка приоритета выбора для режима "Все" архиваторы.
- void setToStart( bool vl ); — Установка признака "Запускать арзиватор".
- void setDB( const string &idb ); — Установка адреса БД архиватора.
- virtual void start( ); — Запуск архиватора.
- virtual void stop( bool full_del = false ); — Останов архиватора с возможностью полного удаления full_del.
- void archiveList( vector<string> &ls ); — Список архивов обслуживаемых архиватором.
- bool archivePresent( const string &iid ); — Проверка на обслуживаемость указанного архива архиватором.
- TTypeArchivator &owner( ); — Тип архиватора – владелец архиватора значений.
Защищённые методы:
- TVArchEl *archivePlace( TVArchive &item ); — Включить архив item в обработку архиватором.
- void archiveRemove( const string &id, bool full = false ); — Удалить архив id из обработки архиватором, с возможностью полного удаления full.
- virtual TVArchEl *getArchEl( TVArchive &arch ); — Получение объекта элемента архива для указанного архива.
Защищённые атрибуты:
- Res a_res — Ресурс процесса архивирования.
- bool run_st — Признак "Архив запущен".
- vector<TVArchEl *> arch_el; — Массив элементов архивов.
5.7. Объект элемента архива в архиваторе (TVArchEl)
Наследуется: | Объектами архиваторов значений модулей подсистемы «Архивы». |
Публичные методы:
- TVArchEl( TVArchive &iarchive, TVArchivator &iarchivator ); — Инициализирующий конструктор для связи архива iarchive с архиватором iarchivator.
- virtual void fullErase( ); — Полное удаление элемента.
- virtual int64_t end( ); — Время конца данных (микросекунды).
- virtual int64_t begin( ); — Время начала данных (микросекунды).
- int64_t lastGet( ); — Время последнего сброса данных из буфера в хранилище.
- TVariant getVal( int64_t *tm, bool up_ord, bool onlyLocal = false ); — Запрос значения за время tm и признаком притягивания к верху up_ord, с указанием запроса только локального архива в onlyLocal.
- void getVals( TValBuf &buf, int64_t beg = 0, int64_t end = 0, bool onlyLocal = false ); — Запрос кадра значений buf за время от beg до end, с указанием запроса только локального архива в onlyLocal.
- void setVals( TValBuf &buf, int64_t beg = 0, int64_t end = 0 ); — Установка кадра значений из buf за время от beg до end.
- TVArchive &archive( ); — Архив элемента.
- TVArchivator &archivator( ); — Архиватор элемента.
Публичные атрибуты:
- int64_t prev_tm; — Время предыдущего значения. Используется для усреднения.
- string prev_val; — Предыдущее значение. Используется для усреднения.
Защищённые методы:
- virtual TVariant getValProc( int64_t *tm, bool up_ord ); — Функция обработки запроса одного значения из архива.
- virtual void getValsProc( TValBuf &buf, int64_t beg, int64_t end ); — Функция обработки запроса модулем на получение данных.
- virtual void setValsProc( TValBuf &buf, int64_t beg, int64_t end ); — Функция обработки запроса модулем на установку данных.