Repo auto make wiki page - ☆Wiki Sandbox - НТЦ 'Комплексные Системы'

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, ...):

  1. Value int key - числовое значение.
  2. ShortName string - краткое строковое представление.
  3. СompatibleMask int null - битовая маска значений, которые можно комбинировать с этим значением. 0 - нельзя комбинировать. По умолчанию -1.
  4. DisplayName string null - отображаемое представление. По умолчанию равен ShortName.

Флаги мета-типа-перечисления должны содержать биты: Table, Enum, Singleton, Stationary, TimelessValues.

Имя таблицы: META_VALUES_E_TypeShortName, где TypeShortName - короткое имя мета-типа.
Для доступа к таблице типа-перечисления не применяется RLS (row-level-security) и не создается специального представления.

Тип для хранения нестандартных записей в архиве

Тип для описания структуры хранения в архивной БД записей для параметров со структурированным типом данных (D8ParamType.Record).

Тип является частным случаем табличного типа.

Значением такого параметра является пара из описания мета-типа, содержащего перечень свойств, и массива значений всех полей структуры.
Состав полей структуры точно соответствует перечню свойств мета-типа. В этот перечень могут входит или не входит специальные свойства:
  1. ParamLocalId int - LocalId параметра.
  2. Timestamp datetime2(3) - метка времени записи.
  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.

Учетные записи

В системе определены учетные записи нескольких типов:
  1. пользователь;
  2. группа;
  3. роль.

Учетные записи разных типов отличаются по назначению и возможностям и хранятся в таблице учетных записей 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" 
  />

Ссылки

[1]   Базы данных для стандартного инстанса

[2]   Строки соединения в обобщенном формате