5. Подсистема “Архивы” (TArchiveS)
Подсистема «Архивы» представлена объектом TArchiveS, который содержит на уровне подсистемы модульные объекты типов архиваторов TTipArchivator. Каждый объект типа архиватора содержит объекты архиваторов сообщений TMArchivator и архиваторов значений TVArchivator. Кроме этого объект подсистемы архивы содержит методы архива сообщений и объекты архивов значений TVArchive. Объект архива значений TVArchive содержит буфер значений путём наследования объекта буфера TValBuf. Для связи архива значений с архиваторами предназначен объект элемента значения TVArchEl. Этот объект содержится в архиваторе и на него ссылается архив. Структура подсистемы "Архивы" представлена на рис. 5.

Рис. 5. Иерархическая структура подсистемы архивов.
Подсистема "Архивы" содержит механизмы архивирования сообщений и значений. Непосредственно содержит архив сообщений вместе с его буфером. Содержит методы доступа к архивам значений и архиваторам значений и сообщений. Кроме этого выполняет задачу активного сбора данных из источников значений для архивов значений, а также архивирование архива сообщений по архиваторам.
Архив значений (TVArchive) содержит буфер (TValBuf) для промежуточного накопления значений перед архивированием. Связывается с источником значений в лице параметров системы OpenSCADA в активном или пассивном режиме, а также с другими источниками в пассивном режиме. Для архивирования на физические хранилища связывается с архиваторами значений различных типов.
Объект буфера TValBuf содержит массив значений основных типов системы OpenSCADA: строка, целое, вещественное и логичное. Поддерживается хранение значений в режимах жесткой, мягкой сетки и режиме свободного доступа. Предусмотрен также режим времени высокого разрешения (микросекунды). Используется как для непосредственного хранения больших массивов значений, так и для обмена с большими массивами методом покадрового доступа.
Корневой объект модуля подсистемы "Архивы" (TTipArchivator) содержит информацию о конкретно взятом типе модуля. В рамках отдельных модулей может реализовывать собственные общемодульные функции. В общем для модулей этого типа содержит методы доступа к хранилищам значений и сообщений.
Объект архиватора сообщений (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 setActValArch( const string &id, bool val ); - Установка архива <id> в активное состояние <val>. Активный архив будет обеспечиваться периодическим потоком значений (определяется периодичностью архива) подсистемой.
- AutoHD<TTipArchivator> at( const string &name ); - Подключение/обращение к типу архиватора (модулю) <name>.
- void messPut( time_t tm, int utm, const string &categ, int8_t level, const string &mess ); - Помещение значения <mess> с уровнем <level> категории <categ> и время <tm>+<utm> в буфер, а затем в архив сообщений.
- 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труктура БД архивов значений.
- const string &id( ); - Идентификатор архива.
- string name( ); - Имя архива.
- string dscr( ); - Описание архива.
- SrcMode srcMode( ); - Режим связывания с источником данных.
- string srcData( ); - Параметры источника данных, в случае режима доступа к параметру это адрес параметра.
- bool toStart( ); - Признак: "Запускать архив при включении".
- bool startStat( ); - Состояние: "Архив запущен".
- string DB( ); - Адрес БД архива значений.
- string tbl( ); - Таблица БД архива значений.
- string fullDB( ); - Полное имя таблицы БД архива значений.
- long long end( const string &arch = BUF_ARCH_NM ); - Время окончания архива в целом (arch="") или указанного архиватора, буфера (arch="<bufer>").
- long long begin( const string &arch = BUF_ARCH_NM ); - Время начала архива в целом (arch="") или указанного архиватора, буфера (arch="<bufer>").
- long long period( const string &arch = BUF_ARCH_NM ); - Периодичность буфера архива или указанного архиватора (микросекунд).
- TFld::Type valType( ); - Тип архивируемого значения.
- bool hardGrid( ); - Использование жесткой сетки в буфере архива.
- bool highResTm( ); - Использование высокого разрешения времени в буфере архива (микросекунды).
- int size( ); - Размер буфера архива (единицы).
- void setName( const string &inm ); - Установка имени архива.
- void setDscr( const string &idscr ); - Установка описания архива.
- void setSrcMode( SrcMode vl, const string &isrc = "" ); - Установка режима связывания с источником данных.
- 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( long long vl ); - Установка периодичности буфера архива.
- void start( ); - Запуск архива.
- void stop( bool full_del = false ); - Останов архива, с полным удалением <full_del>.
- TVariant getVal( long long *tm = NULL, bool up_ord = false, const string &arch = "", bool onlyLocal = false ); - Запрос одного значения за время <tm> и признаком притягивания к верху <up_ord> из указанного архиватора <arch>, буфера (arch="<bufer>") или всех архиваторов по мере падения качества (arch=""). Для обработки запроса только локальной станцией устанавиливается <onlyLocal>.
- void getVals( TValBuf &buf, long long beg = 0, long long end = 0, const string &arch = "", int limit = 100000, bool onlyLocal = false ); - Запрос кадра значений <buf> за время от <beg> до <end> из указанного архиватора <arch>, буфера (arch="<bufer>") или всех архиваторов по мере падения качества (arch=""), с ограничением размера запроса в <limit> записей. Для запроса только локальных архивов, без компенсации пробелов архивов из резервных станций, устанавливается <onlyLocal>.
- void setVals( TValBuf &buf, long long beg, long long 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( long long beg, long long 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, long long ipr, bool ihgrd = false, bool ihres = false ); - Инициализатор буфера с указанными параметрами.
- void clear( ); - Очистка буфера.
- TFld::Type valType( ); - Тип значения, хранимого буфером.
- bool hardGrid( ); - Работа буфера в режиме жесткой сетки.
- bool highResTm( ); - Работа буфера в режиме времени высокого разрешения (микросекунды).
- int size( ); - Максимальный размер буфера (едениц).
- int realSize( ); - Реальный размер буфера (едениц).
- long long period( ); - Периодичность значений в буфере (микросекунд). Если периодичность нулевая то буфер функционирует в режиме свободного доступа.
- long long begin( ); - Время начала буфера (микросекунд).
- long long end( ); - Время окончания буфера (микросекунд).
- bool vOK( long long ibeg, long long iend ); - Проверка наличия значений в буфере за указанный промежуток времени от <ibeg> до <iend>.
- void setValType( TFld::Type vl ); - Установка типа значения хранимого буфером.
- void setHardGrid( bool vl ); - Установка режима жесткой сетки.
- void setHighResTm( bool vl ); - Установка режима времени высокого разрешения (микросекунды).
- void setSize( int vl ); - Установка размера буфера (едениц).
- void setPeriod( long long vl ); - Установка периодичности значений в буфере (микросекунд).
- virtual void getVals( TValBuf &buf, long long beg = 0, long long end = 0 ); - Запрос кадра значений <buf> за время от <beg> до <end>.
- virtual string getS( long long *tm = NULL, bool up_ord = false ); - Запрос значения строкового типа за время <tm> и признаком притягивания к верху <up_ord>.
- virtual double getR( long long *tm = NULL, bool up_ord = false ); - Запрос значения вещественного типа за время <tm> и признаком притягивания к верху <up_ord>.
- virtual int getI( long long *tm = NULL, bool up_ord = false ); - Запрос значения целого типа за время <tm> и признаком притягивания к верху <up_ord>.
- virtual char getB( long long *tm = NULL, bool up_ord = false ); - Запрос значения логического типа за время <tm> и признаком притягивания к верху <up_ord>.
- virtual void setVals( TValBuf &buf, long long beg = 0, long long end = 0 ); - Установка кадра значений из <buf> за время от <beg> до <end>.
- virtual void setS( const string &value, long long tm = 0 ); - Установка значения строкового типа с временем <tm>.
- virtual void setR( double value, long long tm = 0 ); - Установка значения вещественного типа с временем <tm>.
- virtual void setI( int value, long long tm = 0 ); - Установка значения целого типа с временем <tm>.
- virtual void setB( char value, long long tm = 0 ); - Установка значения логического типа с временем <tm>.
Защищённые методы:
- void makeBuf( TFld::Type v_tp, int isz, long long ipr, bool hd_grd, bool hg_res ); - Пересоздание буфера для указанных параметров.
5.4. Модульный объект типа архиватора (TTipArchivator)
| Наследует: | 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>.
- const 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 ); - Установка адреса БД архиватора.
- 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 ); - Получить сообщения из архива данного архиватора для указанных параметров фильтра.
- TTipArchivator &owner( ); - Тип архиватора – владелец архиватора сообщений.
Защищённые атрибуты:
- bool run_st; - Признак «Запущен».
Защищённые методы:
- bool chkMessOK( const string &icateg, TMess::Type ilvl ); - Проверка сообщения на соответствие условиям фильтра.
5.6. Объект архиватора значений (TVArchivator)
| Наследует: | TCntrNode, TConfig |
| Наследуется: | Объектами архиваторов значений модулей подсистемы «Архивы». |
Публичные методы:
- TVArchivator( const string &id, const string &db, TElem *cf_el ); - Инициализирующий конструктор архиватора значений с идентификатором <id>, для хранения на БД <db> со структурой <cf_el>.
- const string &id( ); - Идентификатор архиватора.
- string workId( ); - Рабочий идентификатор, включает имя модуля.
- string name( ); - Имя архиватора.
- string dscr( ); - Описание архиватора.
- string addr( ); - Адрес хранилища архиватора.
- double valPeriod( ); - Периодичность значений архиватора (микросекунд).
- int archPeriod( ); - Периодичность архивирования значений архиватором. Время через которое архиватор производит архивирование кадра значений из буфера архива.
- 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 ); - Установка адреса хранилища архиватора.
- virtual void setValPeriod( double iper ); - Установка периодичности значений архиватора (микросекунд).
- virtual void setArchPeriod( int iper ); - Установка периодичности архивирования значений архиватором. Время через которое архиватор производит архивирование кадра значений из буфера архива.
- 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 ); - Проверка на обслуживаемость указанного архива архиватором.
- TTipArchivator &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 &iachive, TVArchivator &iarchivator ); - Инициализирующий конструктор для связи архива <iachive> с архиватором <iarchivator>.
- virtual void fullErase( ); - Полное удаление элемента.
- virtual long long end( ); - Время конца данных (микросекунды).
- virtual long long begin( ); - Время начала данных (микросекунды).
- long long lastGet( ); - Время последнего сброса данных из буфера в хранилище.
- TVariant getVal( long long *tm, bool up_ord, bool onlyLocal = false ); - Запрос значения за время <tm> и признаком притягивания к верху <up_ord>, с указанием запроса только локального архива в <onlyLocal>.
- void getVals( TValBuf &buf, long long beg = 0, long long end = 0, bool onlyLocal = false ); - Запрос кадра значений <buf> за время от <beg> до <end>, с указанием запроса только локального архива в <onlyLocal>.
- void setVals( TValBuf &buf, long long beg = 0, long long end = 0 ); - Установка кадра значений из <buf> за время от <beg> до <end>.
- TVArchive &archive( ); - Архив элемента.
- TVArchivator &archivator( ); - Архиватор элемента.
Публичные атрибуты:
- long long prev_tm; - Время предыдущего значения. Используется для усреднения.
- string prev_val; - Предыдущее значение. Используется для усреднения.
Защищённые методы:
- virtual TVariant getValProc( long long *tm, bool up_ord ); - Функция обработки запроса одного значения из архива.
- virtual void getValsProc( TValBuf &buf, long long beg, long long end ); - Функция обработки запроса модулем на получение данных.
- virtual void setValsProc( TValBuf &buf, long long beg, long long end ); - Функция обработки запроса модулем на установку данных.