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 | Тип:
Значение Type=0 является отличительным признаком ветви логического дерева (структуры) объекта автоматизации. Для построения логического дерева используются поля ObjId, Type, Parent, Name [, ShortName]. Значения остальных полей таблицы TB_Objects игнорируются. |
Parent | Integer | [используется совместно с Type=0] Ссылка на хозяина (указывается его ObjId) в логическом дереве объекта. |
DevId | Integer | Ссылка на устройство (идентификатор DevId в таблице TB_Devices), в котором размещена данная изм.величина. Для логических ветвей и вычисляемых величин DevId=0 |
MemInd | Integer | Адрес изм.величины в устройстве (карте памяти устройства). Значение MemInd имеет смысл при DevId!=0 |
Name | Varchar(255) | Имя измерительной величины либо логической ветви. Произвольный текст, однако рекомендуется, чтобы имя содержало достаточно полную информацию. Например, можно предложить режим автогенерации имени на основе цепочки имен логических хозяев и содержания полей TarifId, Accu, Period, DimId. Например: |
ShortName | Varchar(64) | Сокращенное имя изм.величины. М.б. использовано некоторыми приложениями взамен Name. |
TarifId | Integer | Ссылка на таблицу тарифов (TB_Tarif). TarifId=0 для нетарифицируемых величин. (суточный график, график уровня напряжения и т.п.) |
Period | Integer | Период параметра:
8,9 - зарезервировано |
Calc | Integer | Определяет, существует ли данная величина физически (т.е. имеет адрес DevId+MemInd) либо является результатом вычисления: 0 – Физическая (первичная) величина 1 – Препроцессор. Вычисляемая величина, рассчитываема по некоторому, достаточно сложному, алгоритму. Необходимая для расчетов информация хранится в Formula и таблице TB_Depend. 2 – Агрегатирование (вычисляемая величина). В этом случае поле CalcId содержит ObjId базовой величины. Соответствующая компонента системы (препроцессор обработки данных) должна обеспечить вычисление и сохранение в БД Energo данной вычисляемой величины (с использованием значений полей TarifId, Period, Accu, Koeff, Formula). 3 – Группирование (вычисляемая величина). Аналогично Calc=1, однако суть вычислений заключается в алгебраических операциях над несколькими базовыми величинами. Например, вычисляемая величина может быть алгебраической суммой, необходимой для рассчета баланса. Необходимая информация содержится в Formula. 4 – Селектор (вычисляемая величина) образуется путем смешивания базовых величин. На некотором интервале времени селектор принимает значение одной базовой величины, далее – другой и т.д. Моменты времени «переключения» и идентификаторы базовых величин задаются в таблице TB_Depend.
|
CalcId | Integer | Идентификатор базовой величины для вычисляемой величины (Calc=2). В общем случае базовая величина м.б. вычисляемой. |
Koeff | Double precision | Дополнительный коэффициент (множитель). Используется для вычисляемых переменных Calc=1,2,3,4 |
DimId | Integer | Ссылка на таблицу размерностей TB_Dimension |
Formula | Varchar(255) | Формула для Calc=1,2,3. |
Accu | Integer | Тип накопления: В настоящее время не используется. |
Time1 | Integer | Время хранения в основной БД, сутки |
Time2 | Integer | Время хранения в БД 2-го уровня, сутки |
EnableReact | Integer | !=0 – «Активизировать контроль текущего значения параметра» |
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 | Номер устройства. |
Type | Integer | Тип устройства. Условное число, определяющее класс устройства. Type=0 – “неизвестное устройство”. Резервируются значения: |
SubType | Integer | Доопределение типа счетчика в классе Type. SubType=0 – “неизвестное устройство класса Type”. |
SerialNumb | Varchar(64) | Серийный (заводской) номер устройства либо его другая характеристика, позволяющая провести идентификацию устройства. |
Name | Varchar(128) | Имя устройства. Произвольный текст, однако, как и в случае с TB_Objects.Name, рекомендуется включить в имя достаточно полную информацию. |
ConnId | Integer | Ссылка на таблицу подключений (TB_Connections) |
ConnStr | Varchar(255) | Строка, используемая драйвером для настройки режима работы с устройством. Любая такая строка имеет унифицорованный формат |
IsActive | Integer | IsActive =0 – работа с устройством приостановлена. |
FirstDay | integer | День месяца – начало отчетного периода. |
|
|
|
|
|
|
|
|
|
Конфигурирование опроса устройства. Информация, необходимая для осуществления сеанса связи с данным устройством, содержится в следующих полях таблицы 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-драйвера протокола передачи данных. В настоящее время имеются: |
IniStr | Varchar(128) | «Статическая» строка настройки (синтаксис аналогичен TB_Devices.ConnStr) используемого средства связи (DLL-модуля). Данная строка настройки создает некоторую степень свободы (см. комментарий к таблице TB_Devices). В ней не рекомендуется помещать настройки, относящиеся к конкретному последовательному порту либо к конкретному устройству. |
Name | Varchar(128) | Наименование, произвольный текст |
ModId | Integer | Ссылка на таблицу TB_Modems. Для связи с данным устройством используется указываемый модем. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3.4. TB_Tarif – таблица тарифов
Наименование поля | Тип данных | Содержание |
TarifId | Integer | Ключевое поле, уникальный идентификатор тарифа. |
Name | Varchar(128) | Наименование тарифа |
Selector | char(48) | Селектор получасов, входящих в данный тариф. Строка фиксированной длины (48 получасов) из 0 и 1. Например, зона от часа до трех ночи описывается селектором |
|
|
|
|
|
|
|
|
|
|
|
|
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 | Права пользователя, битовый вектор:
|
RightsCS | Integer | Секретное контрольное число поля Rights. Используется для обнаружения несанкционированного редактирования поля. |
Exist | Integer | Exist =0 – учетная запись пользователя приостановлена. |
Groups | Varchar(255) | Перечень индексов в TB_Groups |
GroupsCS | Integer | Контрольная сумма Groups |
1.3.7. TB_Log – журнал событий
Таблица TB_log вообще-то не описывает конфигурацию объекта управления, поэтому она может быть вынесена в будущем из БД ElectroCNF.
Каждая строка таблицы содержит описание некоторго события, возникшего в процессе функционирования системы.
Наименование поля | Тип данных | Содержание |
UserId | Integer | Идентификатор пользователя, во время активности которого возникло данное событие. Значение UserId=0 говорит о том, что во время возникновения события не боло активного пользователя. |
Category | Integer | Категория события: Обычно это поле используется программой просмотра журнала событий. |
Tm | Integer | Метка (дата-время) события. Метка представляется в виде целого числа, номер секунды с 00:00:00 01/01/1970, по Гринвичскому времени |
Event | Varchar(128) | Описание события |
Prior | Integer | Приоритет события: |
|
|
|
1.3.8. TB_Reports – шаблоны (заготовки) отчетов
Наименование поля | Тип данных | Содержание |
RepId | Integer | Ключевое поле, уникальный идентификатор шаблона. При наполнении БД (создании новых изм.величин) использовать автоинкремент. Присваивать значения начиная с 1. Значение RepId=0 можно использовать для указания несуществующего шаблона. |
Name | Varchar(128) | Имя шаблона либо логической ветви. Произвольный текст, однако рекомендуется, чтобы имя содержало достаточно полную информацию. |
FileName | Varchar(64) | Имя файла шаблона |
Type | Integer | Тип:
Значение Type=0 является отличительным признаком ветви логического дерева (структуры отчетов). Для построения логического дерева используются поля RepId, Type, Parent, Name. Значения остальных полей таблицы TB_Reports игнорируются. |
Parent | Integer | Ссылка на хозяина (указывается его RepId) в логическом дереве объекта. |
|
|
|
Media | Varchar(16) | Носитель шаблона (“XLS” и т.п.) |
EditCmd | Varchar(255) | Командная строка для запуска редактора шаблона. |
RunCmd | Varchar(255) | Командная строка для запуска генератора отчета. |
TmCreate | Integer | Дата-время создания шаблона |
TmEdit | Integer | Дата-время последней редакции шаблона |
UserId | Integer | Идентификатор пользователя – разработчика шаблона |
Source | BLOB | Собственно текст (файл) шаблона. |
|
|
|
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 | Номер раздела словаря:
|
TextId | Integer | Идентификатор элемента словаря. |
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 | Метка времени – начало действия данной записи таблицы |
|
|
|
|
|
|
Поля 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 | Тип события: |
TxtColor | Integer | Цвет текста сообщения |
Acust | Integer | Тип акустического сигнала: |
RFlags | integer | Битовый вектор: |
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» отмечает дни кроме Сб и Вс. |
PostId1 | Integer | PostId1, PostId2, PostId3 – последовательность ссылок на таблицу TB_Post. |
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: |
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 – Ежедневно |
TryRetry | Integer | При неудаче повторить еще раз (но не более чем Retry раз) через After минут. |
TryAfter | Integer | |
TryEvery | Integer | Повторять запуск задания через каждые TryEvery минут от StartTime, но позже StopTime. |
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 по Гринвичу. |
Val | Double precision | Значение |
Flag | Varchar(8) | Дополнительные признаки |
Ключевые поля – ObjId + DT (для таблиц Trend, Trend0) либо ObjId (для Current).
Таблица Trend является основной для хранения исторических данных.
Таблица Trend0 используется, если в системе активизирован модуль «ПРЕПРОЦЕССОР». В этом случае получаемые с устройств данные записываются в таблицу Trend0. Препроцессор вычитывает данные из Trend0, выполняет необходимые преобразования (вычисляемые параметры) и переносит данные в Trend (обработанные данные удаляются из Trend0). Таким образом, связка Trend0 à Trend обеспечивает синхронизацию работы препроцессора.
В случае отсутствия препроцессора получаемые с устройств данные записываются непосредственно в таблицу Trend.
Таблица Current хранит текущие значения, т.е. самую свежую (метка DT) информацию от устройств.