Содержание материала

1.3. Состав таблиц

1.3.1. TB_Objects - измерительные величины и логическая структура объекта

SQL-оператор создания таблицы:
CREATE TABLE TB_OBJECTS(OBJID INTEGER PRIMARY KEY NOT NULL,TYPE INTEGER,PARENT INTEGER,DEVID INTEGER,NAME VARCHAR(255),MEMIND INTEGER,SHORTNAME VARCHAR(64),TARIFID INTEGER,PERIOD INTEGER,CALC INTEGER,CALCID INTEGER,KOEFF NUMERIC,DIMID INTEGER,FORMULA VARCHAR(255),ACCU INTEGER,ENABLEREACT INTEGER,MIN1 NUMERIC,MIN2 NUMERIC,MAX1 NUMERIC,MAX2 NUMERIC,REACTALRM INTEGER,REACTWARN INTEGER,REACTNORM INTEGER,TIME1 INTEGER,TIME2 INTEGER,HASHID INTEGER,DISABLETREND INTEGER)

Наименование поля

Тип данных

Содержание

ObjId

Integer

Ключевое поле, уникальный идентификатор измерительной величины. При наполнении БД (создании новых изм.величин) использовать автоинкремент. Присваивать значения начиная с 1. Значение ObjId=0 можно использовать для указания несуществующей величины.

Type

Integer

Тип:

  1. - ветвь логического дерева объекта автоматизации
  2. – вещественная величина
  3. – логическая величина (ВКЛЮЧЕНО\ВЫКЛЮЧЕНО; ДА/НЕТ)
  4. – вещественная управляющая величина (управляющее воздействие)
  5. – логическая управляющая величина (ВКЛЮЧИТЬ\ВЫКЛЮЧИТЬ)

Значение Type=0 является отличительным признаком ветви логического дерева (структуры) объекта автоматизации. Для построения логического дерева используются поля ObjId, Type, Parent, Name [, ShortName]. Значения остальных полей таблицы TB_Objects игнорируются.

Parent

Integer

[используется совместно с Type=0] Ссылка на хозяина (указывается его ObjId) в логическом дереве объекта.
Значение Parent=0 используется для корневой вершины логического дерева. Допускается несколько корневых вершин.

DevId

Integer

Ссылка на устройство (идентификатор DevId в таблице TB_Devices), в котором размещена данная изм.величина. Для логических ветвей и вычисляемых величин DevId=0

MemInd

Integer

Адрес изм.величины в устройстве (карте памяти устройства). Значение MemInd имеет смысл при DevId!=0
Значение MemInd зависит от типа устройства, режима программирования устройства и используемой реализации протокола передачи данных (драйвера). Конкретное устройство представляется драйвером в виде карты памяти – списком имеющихся (доступных) изм.величин (параметров). Т.о. MemInd указывает на порядковый номер изм.величины в карте памяти.
Совокупность DevId+MemInd должна однозначно адресовать физический параметр в имеющихся устройствах. DevId+MemInd используется драйвером для получения единицы данных, которая в дальнейшем будет идентифицироваться уже значением ObjId.

Name

Varchar(255)

Имя измерительной величины либо логической ветви. Произвольный текст, однако рекомендуется, чтобы имя содержало достаточно полную информацию. Например, можно предложить режим автогенерации имени на основе цепочки имен логических хозяев и содержания полей TarifId, Accu, Period, DimId. Например:
Прием Л-352 Тариф-1 за день, кВт*ч” или
Прием Л-352 Тариф-1 на начало дня, кВт*ч
Т.о. “Прием” и “Л-352” указывает на логических хозяев (Parent), “Тариф-1” – на тарифную зону (TarifId), “день” – период тарификации (Period), “за”, ”на начало” – тип накопления (Accu), “кВт*ч” – размерность (DimId).

ShortName

Varchar(64)

Сокращенное имя изм.величины. М.б. использовано некоторыми приложениями взамен Name.

TarifId

Integer

Ссылка на таблицу тарифов (TB_Tarif). TarifId=0 для нетарифицируемых величин. (суточный график, график уровня напряжения и т.п.)
В настоящее время не используется.

Period

Integer

Период параметра:
0 - непериодический параметр (сьем показаний в случайные моменты времени)

  1. – СУТКИ
  2. – МЕСЯЦ
  3. – КВАРТАЛ
  4. – ГОД
  5. – НЕДЕЛЯ (начало в Понедельник 00:00:00)
  6. – РАСЧЕТНЫЕ СУТКИ (начало суток в HH:00:00)
  7. – РАСЧЕТНЫЙ МЕСЯЦ (начало в DD HH:00:00)

8,9 - зарезервировано
>9 - период в секундах
Значения <0 резервируется для будущего применения.
Значения HH (часы начала расчетных суток) и DD (день начала расчетных суток) статически прописываются в файле-лицензии electro.ini

Calc

Integer

Определяет, существует ли данная величина физически (т.е. имеет адрес DevId+MemInd) либо является результатом вычисления:

0 – Физическая (первичная) величина

1 – Препроцессор. Вычисляемая величина, рассчитываема по некоторому, достаточно сложному, алгоритму. Необходимая для расчетов информация хранится в Formula и таблице TB_Depend.
Например Formula=’LPREST2(@;@)’ указывает что используется алгоритм LPREST2, в расчетах используется две базовые переменные (перечисляются в таблице TB_Depend)

2 – Агрегатирование (вычисляемая величина). В этом случае поле CalcId содержит ObjId базовой величины. Соответствующая компонента системы (препроцессор обработки данных) должна обеспечить вычисление и сохранение в БД Energo данной вычисляемой величины (с использованием значений полей TarifId, Period, Accu, Koeff, Formula).
Пример: В кач-ве базовой величины указан 15-минутный (Period=900) график мощности (W, без учета коэффициентов трансформации). Агрегатированная величина должна быть почасовым (Period=3600) графиком нагрузки (kW*h, реальная феличина).

3 – Группирование (вычисляемая величина). Аналогично Calc=1, однако суть вычислений заключается в алгебраических операциях над несколькими базовыми величинами. Например, вычисляемая величина может быть алгебраической суммой, необходимой для рассчета баланса. Необходимая информация содержится в Formula.

4 – Селектор (вычисляемая величина) образуется путем смешивания базовых величин. На некотором интервале времени селектор принимает значение одной базовой величины, далее – другой и т.д. Моменты времени «переключения» и идентификаторы базовых величин задаются в таблице TB_Depend.

  1. - Ручной ввод

 

CalcId

Integer

Идентификатор базовой величины для вычисляемой величины (Calc=2). В общем случае базовая величина м.б. вычисляемой.

Koeff

Double precision

Дополнительный коэффициент (множитель). Используется для вычисляемых переменных Calc=1,2,3,4

DimId

Integer

Ссылка на таблицу размерностей TB_Dimension

Formula

Varchar(255)

Формула для Calc=1,2,3.
Общий синтаксис формулы для Calc=1 и Calc=2:
[Процессор.]Функция[(@,@,..)]
например:
AVG - вычислить среднее значение;
VERIFY(@,@) - верификация по основному и дополнительному параметрам;
APPL1.Func1(@,@,@) - вычислить функцию Func1 по трем параметрам приложением APPL1.
Список формальных параметров содержится в таблице TB_Depend.
При отсутствии списка формальных параметров предполагается единственный параметр CalcId.
Общий синтаксис формулы для Calc=3:
+34-45+100
Т.е. перечисляются базовые параметры с указанием знака вхождения в группу.

Accu

Integer

Тип накопления:
0 - “за период”;
1 - “на начало периода”
2 - “на конец периода”
Например:
Accu=0: “Прием Л-352 Тариф-1 за день
Accu=1: “Прием Л-352 Тариф-1 нараст.итогом на начало дня
Accu=2: “Прием Л-352 Тариф-1 нараст.итогом на конец месяца

В настоящее время не используется.

Time1

Integer

Время хранения в основной БД, сутки

Time2

Integer

Время хранения в БД 2-го уровня, сутки

EnableReact

Integer

!=0 – «Активизировать контроль текущего значения параметра»
Контролируется положение текущего значения параметра в диапазонах
Min2, Min1, Max1, Max2
[Min1; Max1] – нормальное значение. При входе значения в этот диапазон отрабатывается реакция ReactNorm
[Min2; Min1[ или ]Max1; Max2] – предупреждение. При входе значения в этот диапазон отрабатывается реакция ReactWarn
<Min2 или >Max2 – аварийное значение. При входе значения в этот диапазон отрабатывается реакция ReactAlrm

Min2, Min1, Max1, Max2

Double precision

Значения задающие диапазоны контроля текущего значения переменной. См. EnableReact

ReactNorm, ReactWarn, ReactAlrm

Integer

Идентификаторы реакций (ссылки на TB_React) для контроля текущего значения переменной. См. EnableReact

DisableTrend

Integer

!=0 – Запрет записи в таблицы Trend, Trend2
Установка запрета записи используется если нет необходимости хранить тренд (историю значений) данного параметра.

 

1.3.2. TB_Devices - устройства

SQL-оператор создания таблицы:
CREATE TABLE TB_DEVICES(DEVID INTEGER PRIMARY KEY NOT NULL,DEVNUM INTEGER,TYPE INTEGER,SUBTYPE INTEGER,SERIALNUMB VARCHAR(64),NAME VARCHAR(128),CONNID INTEGER,CONNSTR VARCHAR(255),CONNID2 INTEGER,CONNSTR2 VARCHAR(255),ISACTIVE INTEGER,FIRSTDAY INTEGER,MODID INTEGER,LQLIM0 INTEGER,REACTOFF INTEGER,REACTON INTEGER,ENABLEAUTO INTEGER)

Наименование поля

Тип данных

Содержание

DevId

Integer

Ключевое поле, уникальный идентификатор устройства. При наполнении БД (создании новых устройств) использовать автоинкремент. Присваивать значения начиная с 1. Значение DevId=0 можно использовать для указания несуществующего устройства.

DevNum

Integer

Номер устройства.
Задумывалось как некий целочисленный идентификатор устройства, альтернатива символьному полю SerialNumb.
Впоследствии было осознано, что из-за отсутствия механизма (алгоритма) назначения номеров идея не работает…
Так что при автоматическом создании устройств Электро просто присваивает DevNum := DevId
В любом случае, необходимо следить за уникальностью DevNum.

Type

Integer

Тип устройства. Условное число, определяющее класс устройства. Type=0 – “неизвестное устройство”. Резервируются значения:
1 – “Счетчик ABB Alpha”
2 – “Счетчик ABB EuroAlpha”
3 – “Счетчик Shlumberger Indigo+”
4– “Счетчик L&G”
5– “ЦТ5000”
6-“Источник макетов //..”
Полный список типов устройств содержится в таблице TB_Strings (Part=2)

SubType

Integer

Доопределение типа счетчика в классе Type. SubType=0 – “неизвестное устройство класса Type”.
Совокупность Type+SubType используется компонентами системы (например, драйвером протокола передачи данных) для настройки режима работы с данным устройством.

SerialNumb

Varchar(64)

Серийный (заводской) номер устройства либо его другая характеристика, позволяющая провести идентификацию устройства.

Name

Varchar(128)

Имя устройства. Произвольный текст, однако, как и в случае с TB_Objects.Name, рекомендуется включить в имя достаточно полную информацию.

ConnId

Integer

Ссылка на таблицу подключений (TB_Connections)

ConnStr

Varchar(255)

Строка, используемая драйвером для настройки режима работы с устройством. Любая такая строка имеет унифицорованный формат
“КЛЮЧ1=значение КЛЮЧ2=значение …”
(например “DEVNUMB=4 CHAN=1”)
ConnStr анализируется драйвером для получения дополнительной информации об устройстве. Другими словами, ConnStr – это специальная строка настройки драйвера на данное устройство.

IsActive

Integer

IsActive =0 – работа с устройством приостановлена.
IsActive =1 – действующее устройство.
Пояснение. Иногда необходимо указать, что устройство не является активным (выведено из эксплуатации, еще не установлено и т.п.) В этом случае ставим IsActive =0
Функция Ядра ElectroXML(“ACTION=5”)

FirstDay

integer

День месяца – начало отчетного периода.
Например, FirstDay=21 указывает на то, что начало месячного отчетного периода начинается в 00:00 21-го числа (предыдущего месяца) и заканчивается в 24:00 20-го числа.
Значение FirstDay=0 отменяет режим (использование календарного месяца)

 

 

 

 

 

 

 

 

 

Конфигурирование опроса устройства. Информация, необходимая для осуществления сеанса связи с данным устройством, содержится в следующих полях таблицы TB_Devices:
TB_Devices.ConnId - ссылка на таблицу TB_Connections, которая содержит имя DLL-модуля (TB_Connections.DLL), статическая строка настройки DLL-модуля (TB_Connections.IniStr) и ссылку на таблицу TB_Modems (TB_Connections.ModId).
TB_Devices.ConnStr – строка настройки опроса устройства.

Таким образом, при необходимости осуществить сеанс связи с данным устройством инициализируется DLL-модуль TB_Connections[ConnId].DLL. При этом модулю сообщается о необходимости использовать канал связи с описанием в TB_Modems[TB_Connections[ConnId].ModId] и строк настройки ConnStr и TB_Connections[ConnId].IniStr.

1.3.3. TB_Connections – таблица настроек средств связи

SQL-оператор создания таблицы:
CREATE TABLE TB_Connections (ConnId integer not null, DLL varchar(32), IniStr varchar(128), PRIMARY KEY (ConnId) );

 

Наименование поля

Тип данных

Содержание

ConnId

Integer

Ключевое поле, уникальный идентификатор настройки.

DLL

Varchar(32)

Имя DLL-драйвера протокола передачи данных. В настоящее время имеются:
ZMB.DLL
EMF.DLL
SLB.DLL

IniStr

Varchar(128)

«Статическая» строка настройки (синтаксис аналогичен TB_Devices.ConnStr) используемого средства связи (DLL-модуля). Данная строка настройки создает некоторую степень свободы (см. комментарий к таблице TB_Devices). В ней не рекомендуется помещать настройки, относящиеся к конкретному последовательному порту либо к конкретному устройству.
Как правило, это поле может оставаться пустым, посколько главные настройки DLL-модуля содержатся в TB_Devices.ConnStr. С другой стороны, некоторые стандартные ключи из TB_Devices.ConnStr можно перенести в TB_Connections.IniStr.

Name

Varchar(128)

Наименование, произвольный текст

ModId

Integer

Ссылка на таблицу TB_Modems. Для связи с данным устройством используется указываемый модем.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3.4. TB_Tarif – таблица тарифов

 

Наименование поля

Тип данных

Содержание

TarifId

Integer

Ключевое поле, уникальный идентификатор тарифа.

Name

Varchar(128)

Наименование тарифа

Selector

char(48)

Селектор получасов, входящих в данный тариф. Строка фиксированной длины (48 получасов) из 0 и 1. Например, зона от часа до трех ночи описывается селектором
“001111000000000000000000000000000000000000000000”

 

 

 

 

 

 

 

 

 

 

 

 

1.3.5. TB_Dim – таблица размерностей

Наименование поля

Тип данных

Содержание

DimId

Integer

Ключевое поле, уникальный идентификатор размерности.

Name

Varchar(32)

Наименование размерности (“кВт*ч”, “Гц” и т.п)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3.6. TB_User – таблица пользователей

 

Наименование поля

Тип данных

Содержание

UserId

Integer

Ключевое поле, уникальный идентификатор пользователя (1,2 …).

Name

Varchar(32)

Имя пользователя. Например “Administrator”

ShName

Varchar(16)

Сокращенное имя пользователя. Например для “Administrator” – “AD”

Passw

Varchar(32)

Пароль пользователя. Хранится в зашифрованном виде

Rights

Integer

Права пользователя, битовый вектор:
0x0001 – разрешено редактирование конфигурации обьекта (всех таблиц БД ElectroCNF, кроме TB_User)
0x0002 – разрешено администрирование пользователей (редактирование таблицы ElectroCNF.TB_User
0x0004 – разрешено редактирование шаблонов отчетов
0x0008 –разрешен запуск шаблона (генерация отчета)
0x0010 – разрешено редактирование данных (ручной ввод)
0x0020 – разрешена запись параметров в устройство
0x0040 – разрешен опрос устройства

 

 

 

RightsCS

Integer

Секретное контрольное число поля Rights. Используется для обнаружения несанкционированного редактирования поля.

Exist

Integer

Exist =0 – учетная запись пользователя приостановлена.
Exist =1 – действующая учетная запись.
Пояснение. Запрещается удалять записи из таблицы TB_User. Учетная запись пользователя “удаляется” путем установки Exist =0

Groups

Varchar(255)

Перечень индексов в TB_Groups
Например «1,2,10», т.е. данный пользователь является членом групп 1,2 и 10.

GroupsCS

Integer

Контрольная сумма Groups

1.3.7. TB_Log – журнал событий

Таблица TB_log вообще-то не описывает конфигурацию объекта управления, поэтому она может быть вынесена в будущем из БД ElectroCNF.
Каждая строка таблицы содержит описание некоторго события, возникшего в процессе функционирования системы.

Наименование поля

Тип данных

Содержание

UserId

Integer

Идентификатор пользователя, во время активности которого возникло данное событие. Значение UserId=0 говорит о том, что во время возникновения события не боло активного пользователя.

Category

Integer

Категория события:
0 – Изменение структуры БД Electro.CNF
1 – Вход\Выход\Изменение пользователя
2 – Изменение конфигурации объекта (TB_Objects)
3 – Редактирование шаблонов (TB_Reports)
4 - Генерация отчетов
5 – Опрос устройств (программа DevGet.exe)
6 –Импорт/Экспорт данных
7 – внутрисистемное событие
8 – ручное редактирование данных

Обычно это поле используется программой просмотра журнала событий.

Tm

Integer

Метка (дата-время) события. Метка представляется в виде целого числа, номер секунды с 00:00:00 01/01/1970, по Гринвичскому времени

Event

Varchar(128)

Описание события

Prior

Integer

Приоритет события:
0 – обычное сообщение
1 – предупреждение
2 – ошибка

 

 

 

1.3.8. TB_Reports – шаблоны (заготовки) отчетов

Наименование поля

Тип данных

Содержание

RepId

Integer

Ключевое поле, уникальный идентификатор шаблона. При наполнении БД (создании новых изм.величин) использовать автоинкремент. Присваивать значения начиная с 1. Значение RepId=0 можно использовать для указания несуществующего шаблона.

Name

Varchar(128)

Имя шаблона либо логической ветви. Произвольный текст, однако рекомендуется, чтобы имя содержало достаточно полную информацию.

FileName

Varchar(64)

Имя файла шаблона

Type

Integer

Тип:

  1. – ветвь логического дерева (группа шаблонов)
  2. – шаблон
  3. – документ (реализация шаблона)

Значение Type=0 является отличительным признаком ветви логического дерева (структуры отчетов). Для построения логического дерева используются поля RepId, Type, Parent, Name. Значения остальных полей таблицы TB_Reports игнорируются.
Значение Type=2 используется для хранения документа. Поле Parent ссылается на исходный шаблон. Таким образом, некоторый шаблон (Type=1) может иметь несколько потомков (Type=2) – результатов запуска данного шаблона на исполнение.

Parent

Integer

Ссылка на хозяина (указывается его RepId) в логическом дереве объекта.
Значение Parent=0 используется для корневой вершины логического дерева. Допускается несколько корневых вершин.

 

 

 

Media

Varchar(16)

Носитель шаблона (“XLS” и т.п.)
Поле определяет, с помощью какой программы создан шаблон.
‘EXCEL’ - файл программы MS Excel
‘DOC’ - файл программы MS Word
‘HTM’ – web-страница
‘XLS’ - OLE-обьект
Первая версия RepCnf.exe сохраняла шаблон как OLE-обьект, однако указывала Media=’XLS’ (правильнее было бы выбрать имя ‘OLE’). В последующей версии шаблон записывается уже как обычный excel-файл и ради сохранения приемственности было принято решение указывать Media=’EXCEL’.

EditCmd

Varchar(255)

Командная строка для запуска редактора шаблона.

RunCmd

Varchar(255)

Командная строка для запуска генератора отчета.
В строке могут содержаться конструкции (разделитель – пробел):
DTn=”@v:text”
Где n – номер метки времени
v – период метки времени (см. TB_Objects.Period)
text – текст приглашения.
Например “DT1=@1:Укажите день начала DT2=@1:Укажите день конца”

TmCreate

Integer

Дата-время создания шаблона

TmEdit

Integer

Дата-время последней редакции шаблона

UserId

Integer

Идентификатор пользователя – разработчика шаблона

Source

BLOB

Собственно текст (файл) шаблона.
Рекомендуется хранить шаблон в таблице TB_Reports.
Допускается хранение шаблона в виде файла (директория PattPath, см. п.1.2; Имя файла – FileName). В этом случае поле Source оставлять пустым.

 

 

 

1.3.9. TB_Strings - общесистемный словарь

Таблица содержит фразы, используемые различными компонентами системы. Словарь состоит из разделов (поле Part). Внутри каждого раздела используется собственная нумерация (TextId).
TB_Strings играет в системе бОльшую роль чем просто пассивный словарь. В некоторых случаях содержание раздела словаря задает имеющийся набор некоторых свойств, причем TextId является идентификатором свойства. Например, конфигуратор объекта может использовать содержимое раздела Part=2 в качестве списка поддерживаемых устройств.
С другой стороны, для каждого раздела словаря может существовать компонента системы, отвечающая за актуальность содержания данного раздела. Например, при установке у пользователя новой версии конфигуратора объекта он может обновить содержание раздела Part=2 в существующей базе данных.
Следует также отметить, что с появлением таблицы TB_String в БД ElectroCNF можно упростить некоторые таблицы – например удалить из TB_Tarif поле Name (хранить его в TB_Strings). Таблицу TB_Dim можно бы было вообще упразднить. Делать это пожалуй уже не стоит, но при возможных в будущем изменениях БД ElectroCNF следует учитывать концептуальную гибкость таблицы TB_Strings.

 

Наименование поля

Тип данных

Содержание

Part

Integer

Номер раздела словаря:
1- Категории событий (TB_Log) TextId = TB_Log.Category

  • Типы устройств (TB_Devices) TextId = TB_Devices.Type
  • Права пользователя (TB_User) – см. TB_User.Rights
  • Список функций агрегатирования (см. TB_Objects.Calc)
  • Список функций препроцессора (см. TB_Objects.Calc)
  • Возможные значения поля TB_Objects.Calc
  • Коды ошибок драйвера устройства времени сессии опроса
  • Система безопасности
  •  

TextId

Integer

Идентификатор элемента словаря.
В отличие от поля Part, значения которого назначает разработчик Ядра, значения поля TextId определяются приложением-владельцем раздела словаря.

Name

Varchar(128)

Собственно текст

BinData

BLOB

Необязательное поле, двоичные данные произвольной длины

Comment

Varchar(255)

Необязательное поле, пояснительный текст к элементу словаря

1.3.10. TB_Depend – аргументы вычисляемых параметров

В данной таблице хранится информация, необходимая для рассчета вычисляемых по формуле параметров (TB_Objects.Calc=2).
Некоторый вычисляемый параметр TB_Depend.ObjId описывается набором нескольких строк таблицы TB_Depend, т.к. в общем случае в его рассчете может участвовать несколько базовых параметров (идентифицируются полем TB_Depend.VarNumb) и в некоторые моменты времени может происходить подмена базового параметра.

Наименование поля

Тип данных

Содержание

ObjId

Integer

Идентификатор вычисляемого параметра

VarNumb

Integer

Номер переменной в TB_Objects.Formula вычисляемого параметра

BaseId

Integer

Идентификатор базового параметра

DT

Integer

Метка времени – начало действия данной записи таблицы
(номер секунды с 01/01/1970 00:00:00 по Гринвичу)

 

 

 

 

 

 

Поля ObjId, BaseId являются обобщением идентификатора объекта (TB_Objects. ObjId). В старшем полубайте хранится признак идентификатора:
#define OD_TPOBJ 0x00000000 // TB_Objects
#define OD_TPDEV 0x10000000 // TB_Devices
#define OD_TPCON 0x20000000 // TB_Connections
#define OD_TPMOD 0x30000000 // TB_Modems
#define OD_TPREA 0x40000000 // TB_Reactions
#define OD_TPRPT 0x50000000 // TB_Reports
#define OD_TPJOB 0x60000000 // TB_Sheduler
#define OD_TPMSK 0xF0000000 // маска признака идентификатора

Рассмотрим пример.
Необходимо описать вычисляемый параметр (ObjId=100), являющийся результатом процедуры верификации по основному (VarNumb=1) и дополнительному (VarNumb=2) параметру:
TB_Objects[ObjId=100].Calc = 2
TB_Objects[ObjId=100].Formula = ’VERIFY(@1,@2)’

Фрагмент таблицы TB_Depend[ObjId=100] :

ObjId

VarNumb

BaseId

DT

C начала работы системы идентификатор основного параметра - 125, дополнительного – 130:

100

1

125

0

100

2

130

0

В момент времени 1030000200 произошла замена дополнительного параметра на 131:

100

2

131

1030000200

В момент времени 1040000000 дополнительный параметр вернули на 130:

100

2

130

1040000000

В момент времени 1050000200 произошла замена основноного параметра на 140:

100

1

140

1050000200

И т.д.

 

Таким образом, совокупность записей таблицы TB_Depend[ObjId=100] описывает всю ретроспективу, необходимую для вычисления формулы ’VERIFY(@1,@2)’ для произвольного момента времени.

1.3.11. TB_Reactions – типы реакций на события

С некоторой точки зрения, процесс функционирования системы описывается набором состояний (condition) и событий (event). Ненормальные состояния – тревога (alarm) и предупреждение (warning) – должны постоянно индицироваться средствами системы.
В системе Electro состояние сопоставляется с параметром и, соответственно, наследует его идентификатор (TB_Objects.ObjId). Другими словами, каждый параметр имеет состояние. В общем случае, состояние может иметь несколько уровней (нормальные, предупреждающие, аварийные) и подуровней внутри уровня. Состояние параметра хранится в таблице Current (БД Electro) – EvState (код состояния) и ExText (текстовое сообщение).
Различные события являются результатом как перехода некоторого состояния из нормального в ненормальное (и наоборот), так и действий оператора, изменений в конфигурации системы и др. На события необходимо некоторым образом реагировать – протоколировать в системном журнале, информировать о событии факсом, e-mail и т.п.
Таблица TB_Reactions описывает типовые реакции на события. Указывается состояние (нормальное, предупреждение, авария), возникающее по событию и локальная реакция («распечатать», «протоколировать» и т.п.).
При активизированной компоненте «Electro-Оповещение» поле TB_Reactions.AlrId ссылается на таблицу TB_Alarms.

Элементы таблицы с ReactId 1, 2, 3 и 4 зарезервированы для стандартных реакций:
ReactId=1 Name=”Станд. Рабочее событие” EvType=0 RFlags=10 AlrId=0
ReactId=2 Name=”Станд. Предупреждение” EvType=1 RFlags=11 AlrId=0
ReactId=3 Name=”Станд. Тревога” EvType=2 RFlags=15 AlrId=0
ReactId=4 Name=”Станд. Отладочное событие” EvType=3 RFlags=0 AlrId=0

Система Электро всегда создает (воссоздает) эти четыре элемента в таблице TB_Reactions. При этом постоянными остаются только поля ReactId, Name и EvType. Остальные поля (RFlags, AlrId) администратор может менять по своему усмотрению.

 

Наименование поля

Тип данных

Содержание

ReactId

Integer

Идентификатор реакции, ключевое поле

Name

Varchar(128)

Наименование реакции

EvType

Integer

Тип события:
0 – рабочее событие (нормальное функционирование);
1 – предупреждающее событие (warning);
2 – аварийное событие (alarm).
3 – системное событие (изменение в конфигурации, регистрация пользователя и тп);

TxtColor

Integer

Цвет текста сообщения

Acust

Integer

Тип акустического сигнала:
0 – нет сигнала
1 – короткий сигнал (beep)
2 – мелодия1
3 – мелодия2

RFlags

integer

Битовый вектор:
0x0001 – «Событие необходимо распечатать на системном принтере»
0x0002 – «Событие необходимо записать в системный журнал»
0x0004 – «Необходимо потребовать квитирование события пользователем»
0x0008 – «Выводить сообщение о событии на экран»

AlrId

Integer

Ссылка на таблицу TB_Alarms

 

1.3.12. TB_Alarms – группы оповещения об аварийных событиях

Таблица TB_Alarms содержит связи между таблицей TB_Reactions и TB_Post.
Строка таблицы TB_Reactions содержит ссылку (AlrId) на TB_Alarms. В общем случае в TB_Alarms может быть несколько строк с данным AlrId. Активизируются те из них, для которых выполняются условия [TmFrom; TmTo[ и WeekDays для текущей даты.

Наименование поля

Тип данных

Содержание

AlrId

Integer

Идентификатор, НЕключевое поле; т.е. в таблице могут присутствовать строки с одинаковым AlrId

TmFrom

Integer

Дата начала действия

TmTo

Integer

Дата конца действия. Строка таблицы TB_Alarms активна при условии попадания текущей даты в диапазон [TmFrom; TmTo[

WeekDays

Varchar(16)

Строка из символов 0 и 1, индикатор рабочих дней недели, начиная с воскресенья. Так, строка «0111110» отмечает дни кроме Сб и Вс.
Строка таблицы TB_Alarms активна при условии если дата указывает на активный день недели.

PostId1

Integer

PostId1, PostId2, PostId3 – последовательность ссылок на таблицу TB_Post.
Отсутствие ссылки – пусто либо 0.

PostId2

Integer

PostId3

Integer

1.3.13. TB_Post – каналы оповещения об аварийных событиях

Наименование поля

Тип данных

Содержание

PostId

Integer

Идентификатор, ключевое поле

Media

Varchar(16)

FAX, PAGER, VOICE, MAIL, NETSEND, SPEAK

ModId

Integer

Ссылка на таблицу TB_Modems. Для передачи оповещения используется указываемый модем.

WorkZone

Varchar(16)

«07:00-22:00» etc

Link

Varchar(255)

Содержимое ключа LINK зависит от MEDIA:
FAX,VOICE – номер телефона;
SPEAK - voice name (MS TTS (Text-To-Speech) engine).
Например "Adult Female #1 Russian (L&H)"
PAGER - "provider:UCP:user" or "provider:TAP:user"
MAIL – info for mailserver connection
NETSEND - имя компьютера

TryRetry

Integer

При неудаче повторить еще раз (но не более чем Retry раз) через After минут.

TryAfter

Integer

1.3.14. TB_Sheduler – Диспетчер назначенных заданий

Таблица TB_Sheduler функционально соответствует Диспетчеру назначенных заданий Windows, но применительно к функции Ядра ElectroXml(). Входной electroxml-документ читается из поля DocInput, результат записывается в DocOutput.

Наименование поля

Тип данных

Содержание

DispId

Integer

Идентификатор, ключевое поле

ShName

Varchar(32)

Сокращенное имя задания

Name

Varchar(128)

Полное имя задания

IsActive

Integer

1 – «Задание активно»

StartTime

Integer

Время запуска задания; секунды с начала суток

StartMode

Integer

0 – Ежедневно
1 –

TryRetry

Integer

При неудаче повторить еще раз (но не более чем Retry раз) через After минут.

TryAfter

Integer

TryEvery

Integer

Повторять запуск задания через каждые TryEvery минут от StartTime, но позже StopTime.
StopTime - секунды с начала суток.
Например, StartTime=10:00 TryEvery=30 StopTime=19:30
Задание будет запускаться начиная с 10:00 каждые 30 минут. Последний раз будет запущено в 19:30

StopTime

Integer

ReactId0

Integer

Ссылка на реакцию (TB_Reactions) при ошибке выполнения задания

ReactId1

Integer

Ссылка на реакцию (TB_Reactions) при успешном выполнении задания

DocInput

Varchar(255)

 

DocOutput

BLOB

 

XmlAction

Integer

 

XmlOption

Varchar(255)

 

 

1.3.15. Trend, Current, Trend0 – таблицы БД Electro

Таблицы Trend, Current, Trend0 базы данных Electro имеют одинаковую структуру:

Наименование поля

Тип данных

Содержание

ObjId

Integer

Идентификатор (см. ElectroCNF.TB_Objects.ObjId)

DT

Integer

Метка времени – номер секунды с 01/01/1970 00:00:00 по Гринвичу.
Использование гринвичского времени позволяет устранить проблемы, связанные с летним\зимним временем и построением распределенных систем, охватывающих несколько часовых поясов.
Представление метки времени в виде целого числа уменьшает объем базы и ускоряет выборку данных. Преобразование DT ß à SYSTEMTIME (local) можно выполнить с помощью функций SystemTime2Second() и Second2SystemTime(), входящих в состав Electro.DLL

Val

Double precision

Значение

Flag

Varchar(8)

Дополнительные признаки

Ключевые поля – ObjId + DT (для таблиц Trend, Trend0) либо ObjId (для Current).
Таблица Trend является основной для хранения исторических данных.
Таблица Trend0 используется, если в системе активизирован модуль «ПРЕПРОЦЕССОР». В этом случае получаемые с устройств данные записываются в таблицу Trend0. Препроцессор вычитывает данные из Trend0, выполняет необходимые преобразования (вычисляемые параметры) и переносит данные в Trend (обработанные данные удаляются из Trend0). Таким образом, связка Trend0 à Trend обеспечивает синхронизацию работы препроцессора.
В случае отсутствия препроцессора получаемые с устройств данные записываются непосредственно в таблицу Trend.

Таблица Current хранит текущие значения, т.е. самую свежую (метка DT) информацию от устройств.