Csit.Delta.Client3.D8RegularInstance
Стандартные инстансы системы Дельта¶
Наиболее распространенный тип подсистем Дельта. Поддерживается абсолютным большинством сервисов.
НСИ стнадартного инстанса¶
НСИ хранится в СУБД SQL Server, PostgreSQL или другой. Описание формата БД см. в статье [ Базы данных для стандартного инстанса ].
Имя БД НСИ должно совпадать с названием инстанса:
<ParamDbName> ::= <InstName>НСИ содержит описание для следующих объектов:
- параметры (аналоговые, дискретные, векторные и табличные);
- группы параметров;
- приборы.
- идентификатор;
- несколько наименований;
- интервал и шаг значения;
- период обработки состояния;
- скрипт для расчета значения (опционально) и период его выполнения;
- таймаут устаревания значения;
- флаги обработки.
- единицы измерения;
- диапазон шкалы;
- формат отображения;
- точность отображения;
- пределы достоверности;
- предупредительные и аварийные уставки вверх и вниз;
- апертура записи в архив.
- набор возможных значений в виде пар число-текст.
- подтип параметра;
- максимальная длина значения в байтах.
- наименование мета-типа с описанием структуры данных.
Для редактирования, импорта, экспорта НСИ используется утилита D8 ConfigMng
(или D8 Config
).
Кроме стандратных узлов (параметры, группы и пр.) НСИ может быть расширено пользовательскими объектами.
Для редактирования узлов НСИ используется утилита D8 MetaDbEditor
.
Текущие данные¶
Для каждого параметра, кроме табличных, определено его текущее состояние:- значение
Для представления значения используется:- для аналоговых параметров - вещественное число (4 байта);
- для дискретных - целое число со знаком (4 байта);
- для векторных - массив байт с заданным ограничением максимальной длины.
- статус
Флаги состояния (4 байта).
- расширенный статус
Дополнительное поле состояния (4 байта).
- метка времени
Структура даты/времени с точностью до миллисекунд (8 байт).
- качество
Оценка качества вычисляется по флагам статуса.
Для табличных параметров текущие данные не реализованы, для них определен только архив.
Сервис DataServer
поддерживает текущее состояние стандартных инстансов и позволяет клиентским сервисам устанавливать TCP-соединения по протоколу D8LL
, который используется для получения текущих данных, изменения текущих данных и квитирования тревог.
При запуске DataServer
загружает последнее известное состояние текущих данных из таблицы архивной БД mmtbase
. По ходу работы служба (в зависимости от настроек) может периодически сохранять текущие данные в таблицу mmtbase
. Перед остановкой службы текущие данные также будут сохранены в mmtbase
.
DataServer
реализована стандартная обработка текущего состояния параметров, а именно:
- служба исполняет скрипты расчета для вычисляемых параметров;
- контролирует уставки и пределы достоверности параметров, выставляя соответствующие флаги статуса, включая признаки наличия активной тревоги и квитирования тревоги;
- контролирует метки времени, выставляя при необходимости флаг устаревания значения;
- отслеживает изменения значения параметров, выставляя при необходимости флаг записи в архив.
Для репликации текущих данных между инстансами используется сервис D8 DataPipe
.
Архив стандартного инстанса¶
Архив хранится в БД SQL Server. Описание формата БД см. в статье [ Базы данных для стандартного инстанса ].
Имя архивной БД должно состоять из названия инстанса и постфикса "_DATA":
<ArchDbName> ::= <InstName> "_DATA"
Архивная БД как правило размещается на том же SQL Server, что и БД НСИ, но это не является обязательным условием.
Формат структуры одного значения в архиве аналогичен структуре текущего значения, за исключением того, что для представления значения аналоговых параметров всегда используется вещественное число длиной 8 байт (SQL float
).
Объем архивной БД в реальных условиях можно оценить для аналоговых и дискретных параметров. Одно значение будет занимать в среднем 35 байт.
Сервис DbServer
используется для архивирования текущих данных. DbServer
подключается к сервису текущих данных DataServer
по TCP-протоколу D8LL
, запрашивает подписку на изменение текущих данных и записывает в архивную БД все значения в статусе которых установлен флаг vsSave
.
Кроме того многие сервисы записывают данные напрямую в архивную БД, минуя DataServer
. Таким образом как правило выполняется синхронизация архива параметров с источником данных (например, с архивом прибора учета данных или со сторонней БД SQL).
Дополнительно сервис DbServer
может быть настроен так, что параллельно с записью значения в архив, значение также будет записано в таблицу mmtbase
, где сохраняется последнее известное текущее состояние.
Для импорта и экспорта данных можно использовать утилиту D8 ArchiveBackup
.
Для автоматической репликации архивов между инстансами используется сервис D8 ArchiveSync
.
Параметры стандартного инстанса¶
Список параметров хранится в БД НСИ в таблице PARAMS
.
Внутри инстанса идентификатором параметра служит целое число LocalID
(4 байта), уникальное для каждого параметра инстанса. Идентификатор параметра должен быть больше нуля.
Глобальный строковый идентификатор параметра имеет вид:
SID ::= <InstName> "." <LocalID>
Например,
TEC_ASKUE.123
Кроме того, для параметра любого типа, могут быть заданы следующие свойства:- имя параметра (
PARAMS.NAME
)
Произвольное текстовое наименование.
- дополнительные имена (
PARAMS.ADDITIONALNAME
,PARAMS.SHORTNAME
,PARAMS.AKS
)
Дополнительные имена параметров. Назначение определяется разработчиком системы.
- интервал значения (
PARAMS.INTERVAL
)
Интервал времени, на котором определяется одно значение. Например, для часовых архивов - это 1 час. Для мгновенных данных не указывается (0 мс).
- шаг значения (
PARAMS.STEP
)
Шаг по времени, с которым следуют во времени значения параметра. Если шаг не известен или он непостоянный, то свойство не указывается (0 мс).
- период обработки (
PARAMS.SCANRATE
)
Это период, с которым необходимо выполнять обработку текущих данных, а именно выполнять проверку на устаревание значения, выполнять проверку необходимости выполнения скрипта, выполнять проверку необходимости сохранения значения в архив по времени.
- таймаут устаревания (
PARAMS.STALETIMEOUT
)
Если метка времени параметра отстанет от текущего времени на указанную величину, будет выставлен флаг устаревания.
- период или расписание сохранения в архив (
PARAMS.SAVETIME
)
Если установлено, то определяет расписание или периодичность, с которой текущее состояние нужно сохранять в архив.
- задержка аварийной сигнализации (
PARAMS.ALARMDELAY
)
Если установлено, то определяет таймаут, который необходимо выдержать от момента перехода значения параметра в аварийное состояние до включения аварийной сигнализации. При этом, если за время таймаута значение вернулось к нормальному состоянию, то аварийная сигнализация не срабатывает.
- период или расписание вызова скрипта (
PARAMS.CALCTIME
)
Если установлено, то определяет расписание или периодичность выполнения скрипта расчета текущего состояния. Кроме того скрипт будет выполняться при каждой записи значения в параметр.
- скрипт расчета значения (
PARAMS.SCRIPT_TEXT
иPARAMS.SCRIPT_ENGINE_ID
)
Скрипт, который будет выполняться каждый раз при изменении текущего состояния параметра и, если задано, по установленному расписанию.
- флаги параметров (
PARAMS.FLAGS
)
Стандартный набор настроек обработки параметра.
Аналоговые параметры¶
Аналоговые параметры (тип PARAMS.PARAMTYPE = 0
) используются для представления величин, значение, которых представляет собой действительное число.
В БД НСИ аналоговые параметры хранятся в таблице APARAMS
.
В отличии от параметров других типов, у аналоговых параметров может быть задана:
- аналоговая шкала (
PARAMS.SCALEID
), в которой указываются
- единицы измерения (
SCALES.UNIT
)
- типичные границы шкалы значений (
SCALES.MINVALUE
иSCALES.MAXVALUE
)
Границы шкалы используются для отображения графиков параметра. По умолчанию на графике шкала значений масштабируется с использованием указанных границ. Если границы шкалы нулевые, то при выводе графика по умолчанию использует автоподбор шкалы под данные.
- требуемая точность (
SCALES.PRECISION
)
Количество знаков после запятой, которое используется для форматирования значения параметра по умолчанию.
- единицы измерения (
- пределы достоверности (
APARAMS.LIMITLO
иAPARAMS.LIMITHI
)
Это границы значения параметра, за пределами которых значение считается недостоверным.
- предупредительные уставки (
APARAMS.ALARMUP1
иAPARAMS.ALARMDOWN1
)
Если значение пересекает уставку срабатывает предупредительная сигнализация.
- аварийные уставки (
APARAMS.ALARMUP2
иAPARAMS.ALARMDOWN2
)
Если значение пересекает уставку срабатывает аварийная сигнализация.
- апертура сохранения в архив (
APARAMS.DELTASAVE
)
Если значение параметра изменяется на эту величину, то состояние будет сохранено в архив.
Последнее известное текущее значение сохраняется в архивной БД в таблице mmtbase
.
Архивные значения сохраняются в архивной БД в посуточных таблицах вида Addmmyyyy
.
Дискретные параметры¶
Дискретные параметры (тип PARAMS.PARAMTYPE = 1
) используются для представления величин, значение, которых выражено целым числом.
В БД НСИ дискретные параметры хранятся в таблице DPARAMS
.
Для дискретных параметров задается дискретная шкала (PARAMS.SCALEID
), в которой указывается список возможных значений параметра (DSCALES.VALUE
) и соответствующие им названия состояний (DSCALES.TEXT
).
Последнее известное текущее значение сохраняется в архивной БД в таблице mmtbase
.
Архивные значения сохраняются в архивной БД в посуточных таблицах вида Dddmmyyyy
.
Векторные параметры¶
Векторные параметры (типPARAMS.PARAMTYPE = 2
) применяются для представления величины, значение которого нельзя выразить простым числом. Значения векторных параметров хранятся в виде байтового массива ограниченной длины (VPARAMS.MAXSIZE
). Формат этого значения определяется подтипом параметра (VPARAM.SUBTYPE
). Возможные поддтипы:
VectorRealization (1)
VectorSpectrum (2)
VectorTrajectory (3)
Если подтип не задан (0), то формат значения определяет заголовком значения (это первые байты значения), а само значения может представлять собой строку, число или массив.
В БД НСИ векторные параметры хранятся в таблице VPARAMS
.
Последнее известное текущее значение сохраняется в архивной БД в таблице mmtbase
.
Архивные значения сохраняются в архивной БД в посуточных таблицах вида Vddmmyyyy
.
Табличные параметры¶
Значение табличного параметра (тип PARAMS.PARAMTYPE = 3
) представляет собой запись, структура (набор полей) которой определена мета-типом. Такие параметры применяются для сохранения журналов событий и других данных типа таблиц.
Перечень параметров содержится в таблице PARAMS
, для них не выделено отдельной таблицы в БД НСИ.
Для табличных параметров указывается мета-тип (PARAMS.METATYPE
), который определяет структуру значения, т.е. набор колонок для таблицы, в которой сохраняются значения. Эта таблица хранится в архивной БД и имеет имя вида R_TypeShortName
, где TypeShortName
- краткое имя мета-типа.
Текущего значения у табличных параметров нет.
Скрипты параметров¶
Результатом и задачей скрипта является расчет текущего состояния по имеющимся входным данным.
Для выполнения скриптов используется скрипт-машина, реализованная в DataServer
, и использующая технологию Windows Script Host
. Поддерживаются языки VBScript
и JScript
.
Системные мета-типы¶
Табличный тип¶
Отличается тем, что значения свойств сохраняются не в таблице META_VALUES
, а в отдельной таблице в БД НСИ.
Имя таблицы: META_VALUES_T_TypeShortName
, где TypeShortName
- короткое имя мета-типа.
Каждая запись таблицы - это набор значений свойств узла.
Набор столбцов таблицы META_VALUES_T_TypeShortName
и скрипт создания таблицы определяется описанием свойств мета-типа.
Флаги табличного мета-типа должны содержать бит: Table
. Если во флагах мета-типа не установлен бит Singleton
, то первым столбцом этой таблице должен быть первичный ключ, содержащий NodeId
узла, к которому относится запись таблицы.
Для доступа к таблице META_VALUES_T_TypeShortName
через RLS используется представление META_RLS_VALUES_T_TypeShortName
, которое содержит только записи, относящиеся к мета-узлам, к которым есть доступ. Если установлен флаг Singleton
, то представление таблицы (VIEW) проверяет наличие доступа к мета-типу, а не к мета-узлам.
Тип-перечисление¶
Тип-перечисление является частным случаем табличного типа и имеет специальный фиксированный набор свойств (столбцов). Столбцы в порядке от первого (PropertyId = 1, 2, ...
):
Value int key
- числовое значение.ShortName string
- краткое строковое представление.СompatibleMask int null
- битовая маска значений, которые можно комбинировать с этим значением. 0 - нельзя комбинировать. По умолчанию -1.DisplayName string null
- отображаемое представление. По умолчанию равенShortName
.
Флаги мета-типа-перечисления должны содержать биты: Table, Enum, Singleton, Stationary, TimelessValues
.
Имя таблицы: META_VALUES_E_TypeShortName
, где TypeShortName
- короткое имя мета-типа.
Для доступа к таблице типа-перечисления не применяется RLS (row-level-security) и не создается специального представления.
Тип для хранения нестандартных записей в архиве¶
Тип для описания структуры хранения в архивной БД записей для параметров со структурированным типом данных (D8ParamType.Record
).
Тип является частным случаем табличного типа.
Значением такого параметра является пара из описания мета-типа, содержащего перечень свойств, и массива значений всех полей структуры.Состав полей структуры точно соответствует перечню свойств мета-типа. В этот перечень могут входит или не входит специальные свойства:
ParamLocalId int
-LocalId
параметра.Timestamp datetime2(3)
- метка времени записи.State int
- статус записи (D8ParamValueState
).
У этих свойств фиксированное краткое имя свойства и такое же имя столбца в таблице базы данных, используемой для хранения записей параметра.
Все три специальных столбца могут быть nullable
, могут входить или не входить в первичный ключ и/или индекс.
Все три специальных столбца должны иметь роль из перечисления D8MetaPropertyRoles
, совпадающую с краткими именами свойств.
Идентификаторы свойств PropertyId
должны начинаться с 1 и следовать без пропусков.
Имена столбцов (они же краткие названия свойств) должны совпадать с именами перечисления D8MetaPropertyRoles
, если им назначена определенная роль.
Использовать имена свойства, совпадающие с именами перечисления D8MetaPropertyRoles
, без присвоения сооответствующей роли свойству запрещено.
Флаги мета-типа для значений параметров должны содержать биты: Table, ParamRecord, Singleton, Stationary
.
Может быть установлен флаг TimelessValues
(тогда T = null
).
Таблица сохраняется в архивной БД и имеет имя вида: R_TypeShortName
, где TypeShortName
- краткое имя мета-типа.
В таблице параметров PARAMS
для всех табличных параметров (с типом Record
) в поле PARAMS.METATYPE
содержится идентификатор мета-типа, который описывает формат хранения архивных записей параметров в таблицах R_TypeShortName
.
Контроль доступа¶
Категории доступа¶
Базовым объектом для разделения доступа является категория.
Категория представляет собой определенное право доступа. Одна категория может включать в себя несколько других категорий.
Категория может быть сопоставлена с одной или несколькими учетными записями SQL/Windows/AD.
В D8 Monitor
можно использовать фильтрацию по наличию у подключенного пользователя необходимых категорий, чтобы выбрать конфигурацию мониторинга, скрыть или показать элементы на слайдах.
Базовые категории описаны в таблице базовых категорий META_CATEGORYBITS
. Каждая запись представляет собой некоторое право, которое можно предоставить имени входа. В каждой записи содержится:
- Наименование категории
Название. Должно состоять из латинских букв, цифр и знаков подчеркивания. Должно начинаться с буквы.
- Флаг
Уникальный ненулевой набор битов. Включение в этот набор битов, которые составляют флаг другой категории, означает включение одной категории в другую.
- Позиция
Приоритет категории. 0 - наименьший приоритет. При определении категории подключенного пользователя, категории будут проверяться начиная с категории с наивысшим приоритетом.
- Идентификатор группы
Опциональный идентификаторPid
группы пользователей. Если он указан, то все пользователи, обладающие этой категорией, входят в группу с таким идентификатором.
В список базовых категорий может быть добавлена специальная категория:Category = public, Flag = 0, Pid = 0
Если такая запись существует, то любой пользователь будет иметь категорию public
.
Сопоставление базовых категорий с учетными записями SQL/Windows/AD описано в таблице категорий META_CATEGORIES
.
Учетные записи¶
В системе определены учетные записи нескольких типов:- пользователь;
- группа;
- роль.
Учетные записи разных типов отличаются по назначению и возможностям и хранятся в таблице учетных записей META_PRINCIPALS
.
В момент авторизации пользователя или в момент получения списка объектов, к которым пользователь имеет доступ, из таблицы META_PRINCIPALS
выбирается запись с PrincipalName
равным имени входа, от лица которого пользователь вошел в систему, и определяется набор категорий, которыми обладает пользователь. Если такая запись не будет найдена, то запись будет сгенерирована на основе текущего контекста безопасности системы (SQL-логин или windows-логин). В любом случае набор доступных категорий определяется через проверку на членство в учетных записях, описанных в таблице категорий.
Дополнительно к этому, у учетной записи пользователя в таблице META_PRINCIPALS
может быть указана подразумеваемая категория - это список категорий, которые есть у пользователя всегда, и они не подлежат проверки через членство в учетных записях, описанных в таблице категорий.
Пользователи¶
Учетная запись пользователя (с типом PrincipalType = 1
) используется для сохранения информации о пользователе и привязки пользователя Дельты к имени входа системы. Для пользователя определены:
- Наименование
Это имя пользователя системы Дельта. Если учетная запись соответствует системной учетной записи, то это должно быть название имени входа (логин SQL/Windows/AD).
- Логин
Имя входа, для которого был создан этот пользователь.
- Пароль
Хэш пароля имени входа, для которого был создан этот пользователь.
- Свойства
Произвольный набор пар ключ/значение, смысл которых зависит от конкретного приложения.
- Подразумеваемая категория
Набор категорий. Каждая категория должны быть заключена в квадратные скобки (напр,[User][Admin]
).
Это категории, которые есть у пользователя системы Дельта. В момент авторизации к этим категориям будут добавлены категории, соответствующие системных ролям, членом которых является имя входа, соответствующее пользователю системы Дельта. В итоге будет образован финальный набор категорий - эффективная категория.
Свойства логин и пароль пользователя системы Дельта могут быть использованы для восстановления имени входа SQL по данным мета-БД.
Для учетной записи пользователя системы Дельта характерно следующее:
- Используется для хранения профилей пользователей.
- Задает соответствие системное имя входа - учетная запись системы Дельта.
- Имеет подразумеваемую категорию.
- Можно назначать разрешения на мета-объекты.
- Можно добавлять в группу пользователей системы Дельта.
Роли¶
Учетная запись роли (с типом PrincipalType = 3
) используется для сопоставления системной роли (группа Windows, группа AD, роль БД) и категории системы Дельта (или нескольких категорий).
- Роль используется для организации доступа для системных ролей.
- Задает соответствие системная роль - категория системы Дельта.
- Нельзя назначать разрешения на мета-объекты.
- Нельзя добавлять в группу пользователей системы Дельта (вообще-то можно, но редактор не позволяет).
Для того, чтобы сопоставить системную роль sysrole
и две категории системы Дельта [cat1][cat2]
нужно:
- в таблице учетных записей добавить запись
ParincipalName = sysrole, PrincipalType = 3, Category = [cat1][cat2]
- в таблице категорий добавить две записи
CategoryName = cat1, DbRole = sysrole, SrvRole = NULL
CategoryName = cat2, DbRole = sysrole, SrvRole = NULL
Группы¶
Учтеная запись группы (с типом PrincipalType = 2
) используется для объединения пользователей для того, чтобы можно было назначать разрешения не конкретным пользователям, а всей группе.
Для группы характерно:
- Используется для группировки пользователей.
- Опционально, задает соответствие категория системы Дельта - учетная запись системы Дельта.
- Можно назначать разрешения на мета-объекты.
- Нельзя добавлять в другую групп.
Группы можно использовать, чтобы задать разрешения на мета-объекты не конкретным пользователям, входящим группу, а определенной категории. Для этого нужно сопоставить базовую категорию с учетной записью группы. Например, чтобы создать учетную запись группы, в которую будут входить все, у котого есть категория cat
, нужно:
- в таблице учетных записей добавить запись
Pid = 123, ParincipalName = catGroup, PrincipalType = 2, Category = NULL
- в таблице базовых категорий изменить запись
cat
CategoryName = cat, DbRole = ..., SrvRole = ..., Pid = 123
Членство пользователей в группах задается в таблице членства META_MEMBERSHIP
.
Кроме того, любой пользователь всегда входит в группу public
с pid = 0
, если в таблице базовых категорий содержится запись Category = public, Flag = 0, Pid = 0
.
Разрешения¶
Для учетных записей системы Дельта можно назначать различные разрешения на мета-объекты (это мета-типы, узлы, свойства и параметры).
Эти разрешения задаются в таблице META_ACCESS
.
Подключение к стандартному инстансу¶
Для подключение используется класс типа ComplexSystems.Delta8.Client3.D8RegularInstance
. Этот тип используется в конфигурациях списков инстансов по умолчанию.
Свойства, используемые для настройки инстанса:
Name
Имя инстанса. Единственное обязательное свойство.
ClientllConstr
Обобщенная строка подключения к серверу текущих значений (Dataserver
). Тип провайдера по умолчанию -DataserverClientll
.
PreserveClientllConstr
true
, если нужно использовать параметры авторизации, указанные в строке подключенияClientllConstr
, а не заданные при входе в хочт-приложение.
Не рекомендуется использовать это свойство. Лучше использовать атрибутPreserveAuth
в строке подключения.
ParamDbConstr
Обобщенная cтрока подключения к БД НСИ. Тип провайдера по умолчанию -MSSql
.
PreserveParamDbConstr
true
, если нужно использовать параметры авторизации, указанные в строке подключенияParamDbConstr
, а не заданные при входе в хочт-приложение.
Не рекомендуется использовать это свойство. Лучше использовать атрибутPreserveAuth
в строке подключения.
ParamDbOptions
Настройки работы с БД НСИ. Комбинация флагов. Возможные значения:LoadOneByOne
Загружать НСИ параметров по одному, по мере необходимости. Иначе - загружать всю БД целиком.LoadNewParams
Пытаться загружать новые параметры, после загрузки основного списка параметров.
ArchiveDbProtocol
Протокол для доступа к архивным значениям:Default
- значение по умолчанию - будут использованы SQL-запросы.Http
- запросы архивных значений будут упакованы в HTTP-запросы и отправлены HTTP-серверу.
ArchiveDbConstr
Обобщенная cтрока подключения к БД архивных значений. Тип провайдера по умолчанию -MSSql
.
PreserveArchiveDbConstr
true
, если нужно использовать параметры авторизации, указанные в строке подключенияArchiveDbConstr
, а не заданные при входе в хочт-приложение.
Не рекомендуется использовать это свойство. Лучше использовать атрибутPreserveAuth
в строке подключения.
SecondaryArchiveDbConstr
Строка подключения к резервной архивной БД.
Если указана, то инстанс будет пытаться найти архивные данные в резервной БД, если они отсутствуют в основной БД или основная БД не доступна.
SecondaryArchiveDbProtocol
Протокол для доступа к архивным значениям в резервной БД. Варианты значения аналогичныArchiveDbProtocol
.
Все строки подключения используют обобщенный формат [2].
Пример:
<Instance Name="EXPLINST" ParamDbConstr="Data Source=13.1.141.103; Initial Catalog=EXPLINST" ArchiveDbConstr="Data Source=10.1.141.103; Initial Catalog=EXPLINST_DATA; PreserveAuth=true; Integrated Security=SSPI" ClientllConstr="ServerAddr=10.1.141.103; ServerPort=5006; User ID=archusr; Password=mypass" PreserveClientllConstr="true" />