====== arcsvr ======
Модуль архивации значений тегов и сообщений. Предназначен для замены старого архиватора (arcsvr.exe). Данный модуль требует включения в задачу.
Модуль используется только совместно с модулем [[doc:jroboplc:modules:database]].
tagsources**| '''' |//Deprecated! Определения модулей источников тегов полностью автоматизировано.// \\ Список модулей, предоставляющих теги устройств. Требуется в случае, если архивируемые теги не находятся непосредственно в системе, а импортируются посредством другого модуля, например, [[doc:jroboplc:modules:rpclient]] |
===== Теги модуля =====
^Имя тега ^Описание ^
|Connected |Состояние работы модуля. Нормальное значение ''on'', иначе архивация не выполняется из-за отсутствия подключения к базе данных или ошибки при инициализации (подробности смотреть в log-файлах) |
====== Архивирование тегов ======
В системе может быть более одного одновременно работающих модулей arcsvr. Один модуль может архивировать значения в одну и более таблиц. Два разных модуля не могут одновременно работать с одной и той же архивной таблицей.
=== Пример конфигурации ===
plugin.arcsvr:
enable: on
module.arcval:
database: dbtag
arcval.robo:
- projects/NRMEL.atg
- projects/NRMGR.atg
arcval.regex:
UVHL_2S:
period_align: on
period_ms: 2000
size: 604800
type: int16
mode: period
tags:
- UVHL.MCHB.*_Plata
- UVHL.MDTA.*_Value
- ~ .*Beep.*
UVHL_4S:
period_ms: 4000
size: 302400
type: int16
mode: period
tags:
- UVHL.(MCHB|MDTA).*\.Sost
- ~ .*Beep.*
UVHL_BLOK:
period_ms: 1000
force_s: 86400 # once a day
size: 10000
type: int16
mode: change
tags:
- UVHL.*_Blok
UVHL_CHNL:
period_ms: 1000
force_s: 0 # no forcing
size: 1000
type: int32
mode: change
tags:
- UVHL.*_(Channel|Chnl).*
ARCVAL_TEST:
period_ms: 1000
force_s: 10
size: 40
type: float
mode: change
tags:
- SCR.Device1_Pressure
- SCR.Device1_Temperature
===== Параметры архивации тегов =====
^ Параметр ^ Умолчание ^ Описание ^
|**arcval.robo**| '''' |Список atg-файлов из roboplant-проекта. В нескольких файлах может использоваться одно и то же имя архивной таблицы (например, ARC_2SEC и ARC_4SEC), при этом значения размера и периода архивирования будут взяты из последнего. Привязка выполнения записи ко времени, кратному period_ms, выполняется при указании period_ms>=60000. Формат atg-файла [[doc:jroboplc:modules:arcsvr_atg|здесь]]. |
|**arcval.regex**| '''' |Набор описаний архивных таблиц с использованием regex-выражений. Внутри данного параметра содержатся имена архивных таблиц. Внутри имени архивной таблицы, содержится описание архива. Имя таблицы не должно использоваться другими архивами. |
^ **Описание архивной таблицы для arcval.regex** ^^^
|**mode**| ''period'' |Режим архивирования: ''period'' и ''change'' |
|**type**| ''int16'' |Тип поля данных:
int16 - SMALLINT
int32 - INTEGER
int64 - BIGINT
float - FLOAT
double - DOUBLE PRECISION
|
|**size**| ''604800'' |Количество записей в архивной таблице |
|**period_ms**| ''1000'' |Период архивирования, мс. См.[[doc:jroboplc:modules:arcsvr#периодичность_архивирования|"Периодичность архивирования"]] |
|**force_s**| ''60'' |Период обязательной записи. Только для режима ''change''. |
|**period_align**| ''off'' |Привязка выполнения записи ко времени, кратному period_ms или force_s для архивов режима ''period'' или ''change'' соответственно |
|**tags**| '''' |Список регулярных выражения, задающих правила отбора тегов. Соответствие определяется в заданной списком последовательности. Символ ''~'' обозначает исключающее правило. |
===== Периодичность архивирования =====
Для robo-архивов, описанных в atg-файлах запись в архивную таблицу выполняется через фиксированное время, указанное в параметре ''Period'' в файле. Время задается в миллисекундах. Так как модуль arcsvr выполняется [[doc:jroboplc:modules:task|задачей]], то период архивирования должен быть кратным времеми цикла задачи. Тоже самое применимо и для regex-архивов в режиме ''period''.
Для regex-архивов в режиме ''change'' запись в архивную таблицу выполняется только по изменению хотя бы одного из тегов архива, но не чаще чем через фиксированное время, указанное в ''period_ms''. Если указанно время форсированной записи ''force_s'' отличное от нуля, то запись будет выполнена в любом случае, даже если ни один из тегов не изменился.
===== Удаление null-колонок =====
Поля архивных таблиц автоматически добавляются и удаляются в соответствии с заданным набором тегов (atg-файлами или regex-выражениями).
В случае с regex возможна ситуация, когда ранее архивируемый тег уже не существует, но его имя все еще соответствует regex-правилу. Такое, например, возможно, если данные поступают с удаленной машины, и связь по каким-либо причинам не установлена. В таком случае в поле данного тега будет писаться значение null, и как только связь восстановится, будет снова писаться актуальное значение. Поэтому подобные поля не удаляются автоматически из архивных таблиц.
В тоже время возможна ситуация, когда тег был действительно удален, и его поле с null-данными уже не нужно. Избавиться от null-полей поможет команда ''m:pack [arcname]''.
arcval:pack
В данном случае команда, посылаемая модулю с именем arcval, удаляет все null-поля у всех regex-архивов. Также можно указать имя архива для проведения операции только над одной архивной таблицей.
====== Архивирование сообщений ======
В системе может быть более одного одновременно работающих модулей arcsvr, архивирующих сообщения. Каждый модуль должен использовать свою базу данных.
=== Пример конфигурации ===
plugin.arcsvr:
module.arcmes:
database: dbmes
place: Крупоцех
arcmes.robo:
- projects/NRMEL.ams; Элеватор
- projects/NRMGR.ams; Гречезавод
arcmes.plain:
- id: 101
mestext: Авария весов
place: Размол
clb_inp: red
clf_inp: white
clb_out: $400080
clf_out: white
clb_ack: gray
clf_ack: black
no_visual: off
no_affirm: off
no_out: off
no_in: off
eventtype: 0
eventval: 2
tags:
- W004_2_1:State; 4.2.1 Весы в/с
- W004_2_2.State; 4.2.2 Весы 1/с
- W004_2_3.State; 4.2.3 Весы отруби
- id: 102
mestext: Весы в стопе
place: Размол
colors: blue;white
eventtype: 0
eventval: 0
tags:
- W004_2_1:State; 4.2.1 Весы в/с
- W004_2_2.State; 4.2.2 Весы 1/с
- W004_2_3.State; 4.2.3 Весы отруби
arcmes.regex:
- id: 103
mestext: Весы в стопе
colors: blue;white
eventtype: 0
eventval: 0
tagdescr: "Весы {1}"
tagregex: "(\\w*)\\..*"
tags:
- W.*\.State
- ~ WOTR.*
===== Параметры архивации сообщений =====
^ Параметр ^ Умолчание ^ Описание ^
|**version**| ''1'' |Версия алгоритма архивации сообщений: 1 - старый вариант, 2 - новый (см. ) |
|**arcmes.robo**| '''' |Список ams-файлов из roboplant-проекта. Имя файла указывается через точку с запятой с местом:- путь_и_имя_ams-файла[;место]
В нескольких файлах может использоваться сообщения с одинаковыми MesId, при этом остальные параметры сообщения будут взяты из последнего файла. Формат ams-файла [[doc:jroboplc:modules:arcsvr_ams|здесь]]. |
|**arcmes.plain**| '''' |Список описаний простых сообщений (plain). |
|**arcmes.regex**| '''' |Список описаний regex сообщений |
^ **Описание сообщений типа plain и regex** ^^^
|**id**| '''' |Сообщения из этого списка должны иметь уникальные id, не пересекающиеся ни с robo-, ни c plain-сообщениями. |
|**mestext**| '''' |Текст сообщения |
|**place**| '''' |Место (участок, цех, подразделение). Произвольный текст |
|**eventtype**| ''0'' |Операция для определения наступления события
0: x = val
1: x >= val
2: x <= val
3: (x & val) = val
4: (x & val) = 0
5: (x & val) > 0
6: ((x & val) > 0) && (x & val) != val
7: by change
Название цвета | Hex-значение | Цвет |
---|---|---|
Aqua | $FFFF00 | |
Black | $000000 | |
Blue | $FF0000 | |
Cream | $F0FBFF | |
DarkGrey | $808080 | |
Fuchsia | $FF00FF | |
Gray | $808080 | |
Green | $008000 | |
LimeGreen | $00FF00 | |
LightGray | $C0C0C0 | |
Maroon | $000080 | |
MediumGray | $A4A0A0 | |
MintGreen | $C0DCC0 | |
NavyBlue | $800000 | |
OliveGreen | $008080 | |
Purple | $800080 | |
Red | $0000FF | |
Silver | $C0C0C0 | |
SkyBlue | $F0CAA6 | |
Teal | $808000 | |
White | $FFFFFF | |
Yellow | $00FFFF |
CREATE TABLE MESSAGES (
IDM INTEGER NOT NULL,
DT TIMESTAMP,
DTEND TIMESTAMP,
DTACK TIMESTAMP,
IDMSG INTEGER,
IDTAG INTEGER,
IDUSER INTEGER,
IDPLACE INTEGER,
DATA VARCHAR(128),
ACT CHAR(1),
CLB INTEGER,
CLF INTEGER
)
При работе в режиме ''version: 1'' поля ''DTEND'' и ''DTACK'' не используются.
При работе в режиме ''version: 2'' поля дат имеют следующее назначение:
* ''DT'' - дата наступления события
* ''DTEND'' - дата ухода события (перестает быть актуальным). Если ''null'', то сообщение считается актуальным.
* ''DTACK'' - дата подтверждения. Если ''null'', то сообщение считается не подтвержденным.
При наступлении события в ''MESSAGES'' создается запись (сообщение), где ''DT'' содержит текущую дату, а ''DTEND'' и ''DTACK'' содержат null.
При уходе события в ''MESSAGES'' находится соответствующее актуальное сообщение с ''DTEND'' = null и прописывается текущая дата в ''DTEND''.
В ''DTACK'' значение прописывает scada-клиент.
Для удобства использования в scada-клиентах в базе данных имеются дополнительные метаобъекты:
* view MESMONITOR - выдает отсортированный список текущих сообщений (используется для мониторинга сообщений)
CREATE VIEW MESMONITOR(
IDM,
ORD,
DT,
DTEND,
DTACK,
IDPLACE,
PLACENAME,
IDUSER,
USERNAME,
MESTEXT,
TAGTEXT,
DATA,
FULLTEXT,
CLB,
CLF)
* view MESVIEW - выдает отсортированный список всех сообщений (используется для просмотра архива)
CREATE VIEW MESVIEW(
IDM,
DT,
DTEND,
DTACK,
IDPLACE,
PLACENAME,
IDUSER,
USERNAME,
MESTEXT,
TAGTEXT,
DATA,
FULLTEXT,
CLB,
CLF,
ACT)
* procedure SAVE_MESSAGE - сохраняет текстовое сообщение (используется для фиксации действий пользователя)
create procedure SAVE_MESSAGE (
MSGTEXT varchar(1024),
TAGTEXT varchar(1023),
DATATEXT varchar(128),
IDUSER integer,
IDPLACE integer,
CLB integer,
CLF integer)
returns (
IDM integer,
IDMSG integer,
IDTAG integer)