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 Sub Starting; — Признак запуска подсистемы.
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( ); — Параметры источника данных, в случае режима доступа к параметру это адрес параметра.
- Auto HD<TVal> srcPAttr( bool force = false, const string &ipath = "" ); — Подключение к ассоциированному атрибуту параметра источника данных.
- 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>.
- 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>.
- 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 ); — Функция обработки запроса модулем на установку данных.