5.16 Змінні в діях сценаріїв

Під час спрацювання сценарію програма замінює змінні: замість тексту між знаками % підставляє відповідне значення. Наприклад, замість %Time% у тексті з’явиться поточний час.

Значення змінних фіксуються саме під час спрацювання сценарію, до виконання його дій. Беруться останні відомі серверу дані на цей момент; нове вимірювання не виконується.

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

5.16.1 Синтаксис підстановок

Змінну записують між знаками %: наприклад, %Time%. Необов’язкові параметри подають у дужках через кому. Рядки беруть у подвійні лапки, числа й True/False — без лапок.

Час: %Time%.

Час: 10:45.

У цьому прикладі годинник показує 10:45.

%% у звичайному тексті означає один буквальний знак %. Підставлений результат повторно як шаблон не обчислюється.

Вологість 100%%

Вологість 100%

У рядкових параметрах \n задає перенесення рядка, \t — табуляцію. Поза підстановкою ці послідовності залишаються звичайним текстом.

Приклади багаторядкових повідомлень наведено в параметрах списку. Непарний знак % у кінці залишається текстом; для буквального відсотка використовуйте %%.

5.16.2 Дата й час

У прикладах: 5 грудня 2026 року, 10:45:30. Час береться з годинника сервера під час розкриття тексту, тому може відрізнятися від часу вимірювання чи подальшого надсилання.

%Time%

Поточний час. Без параметра використовується формат hh:nn — години й хвилини. Власний формат задається рядком у дужках.

%Time%

10:45

Позначення

Значення

Для прикладу

dd

День місяця

05

mm

Місяць

12

yyyy / yy

Рік: чотири / дві цифри

2026 / 26

hh

Години

10

nn

Хвилини

45

ss

Секунди

30

%Time("dd.mm.yyyy hh:nn:ss")%

05.12.2026 10:45:30

%Time("yyyy_mm_dd__hh_nn")%

2026_12_05__10_45

Порожній формат %Time("")% використовує коротку дату й короткий час Windows. Для формату dd.mm.yyyy та hh:nn:

%Time("")%

05.12.2026 10:45

%DTime%

День, місяць і час без року. Формат завжди dd/mm hh:nn.

%DTime%

05/12 10:45

%DateTime%

Поточна дата й час у регіональному форматі Windows. Нижче — результат за форматів dd.mm.yyyy та hh:nn:ss.

%DateTime%

05.12.2026 10:45:30

5.16.3 Стан датчиків

Для наступних прикладів у системі є три модулі, у кожному — датчики температури T і вологості H. Для них задано аварійні межі. Назви датчиків — «Температура» і «Вологість».

Значення та стани датчиків у прикладі.

Мал. 5.16-1 Значення та стани датчиків у прикладі.

Назва модуля

Датчик

Показання та стан

Склад

1.1.T

20,0 °C (аварія).

1.1.H

48,8% (норма).

Морозильник

1.2.T

-5,2 °C (норма).

1.2.H

40,6% (норма).

Техвідділ

1.3.T

Помилка модуля.

1.3.H

Пристрої сценарію за подією.

Мал. 5.16-2 Пристрої сценарію за подією.

Опитування запущене. У сценарії за подією вибрано модулі 1.1 («Склад») і 1.2 («Морозильник»). Поточна подія — AlarmOn датчика 1.1.T. Від «Морозильника» в цьому запуску подій немає.

%Sensors.Count%

Загальна кількість окремих датчиків у системі, включно з вимкненими. Не обмежується пристроями сценарію.

%Sensors.Count%

6

%Sensors.State%

Стислий стан пристроїв, вибраних у сценарії за подією. Для сценарію за розкладом охоплюється вся система. У прикладі вибрано модулі 1.1 і 1.2: один з аварією, другий у нормі.

%Sensors.State%

alarm 1, ok 1

%Sensors.StateAll%

Стан усієї системи незалежно від пристроїв сценарію. Підраховуються модулі, а не окремі показання. У межах модуля помилка має пріоритет перед аварією, аварія — перед нормою.

%Sensors.StateAll%

err 1, alarm 1, ok 1

Позначення

Зміст

ОПИТ ВИКЛ.

Опитування зупинене.

off all

Немає ввімкнених модулів.

err all

Усі ввімкнені модулі мають помилку.

ok all

Немає зафіксованих помилок та аварій.

err 1, alarm 1, ok 1

Один модуль із помилкою, один з аварією, один у нормі.

%Triggers%

Подія, за якою спрацював сценарій. Містить шлях датчика та назву події. У запуску за розкладом і звичайному F2 результат порожній.

%Triggers%

1.1.T->AlarmOn

5.16.4 Списки показань

Змінні відрізняються тим, як відбираються датчики. На даних прикладу:

Змінна

Що потрапляє в результат

%Sensors.List%

Датчики, вибрані в сценарії за подією, незалежно від того, які з них спричинили запуск. У прикладі — 1.1.H, 1.1.T, 1.2.H і 1.2.T.

%Sensors.ListAll%

Усі датчики системи незалежно від вибору й типу сценарію. У прикладі — усі шість датчиків трьох модулів.

%Sensors.ListAlarm%

Лише датчики, які перебувають в аварії. У прикладі — 1.1.T.

%Sensors.ListEvent%

Лише датчики, події яких спричинили запуск сценарію. У прикладі — 1.1.T.

Усі чотири змінні мають п’ять спільних необов’язкових параметрів. Пропущені кінцеві параметри беруть значення за замовчуванням.

Параметр

За замовчуванням

Призначення

NameProp

"FullCode"

Назва модуля. Можна задати FullName, Name або Code. Parent.Name та Parent.Code тут також означають сам модуль.

ValueProp

"Value"

Значення кожного відібраного датчика. Наприклад, Value(1, False, 0) — один знак після коми, без одиниці й позначки аварії.

NameAndValueSeparator

" = "

Роздільник назви модуля та його показань.

DeviceSeparator

"; "

Роздільник модулів; "\n" дає новий рядок.

SensorSeparator

" "

Роздільник кількох показань одного модуля. Імена окремих датчиків автоматично не додаються.

Вимкнені модулі й датчики пропускаються. Аналогове показання входить у список, якщо використовується хоча б верхня/нижня межа або нормальне значення.

При зупиненому опитуванні весь список дорівнює «?». Модуль без отриманого показання дає «?», з помилкою — «err».

Помилка адаптера виводиться один раз із його назвою та кількістю ввімкнених підлеглих пристроїв.

%Sensors.List%

Значення датчиків з пристроїв сценарію за подією; за розкладом — з усієї системи. Вибір модуля охоплює всі його придатні датчики. У початковому прикладі вибрано модулі 1.1 і 1.2, тому в результаті є їхні температура й вологість, хоча запуск спричинила лише подія 1.1.T.

%Sensors.List%

Склад = 48,8% !20,0 °C; Морозильник = 40,6% -5,2 °C

Назва модуля задається явно першим параметром; решта параметрів залишаються без змін. У цьому прикладі FullName і штатний FullCode дають однакові підписи, бо модулі мають власні назви:

%Sensors.List("FullName")%

Склад = 48,8% !20,0 °C; Морозильник = 40,6% -5,2 °C

Компактний варіант: код модуля (адреса), один знак після коми, без одиниць і позначки аварії:

%Sensors.List("Code", "Value(1, False, 0)", ": ")%

1: 48,8 20,0; 2: 40,6 -5,2

Кома між показаннями одного модуля; одиниці збережено, позначку аварії прибрано:

%Sensors.List("FullName", "Value(1, True, 0)", " = ", "; ", ", ")%

Склад = 48,8%, 20,0 °C; Морозильник = 40,6%, -5,2 °C

Розгорнута позначка аварії з порівнянням температури та верхньої межі:

%Sensors.List("FullName", "Value(1, True, 2)")%

Склад = 48,8% !(20,0 °C > 15,0 °C); Морозильник = 40,6% -5,2 °C

Кожен модуль у новому рядку; його показання розділено комами:

%Sensors.List("FullName", "Value(1, True, 0)", " = ", "\n", ", ")%

Склад = 48,8%, 20,0 °C

Морозильник = 40,6%, -5,2 °C

Окремий варіант вибору: лише для цього прикладу замість модулів 1.1 і 1.2 вибрано датчики 1.1.T та 1.2.T. Значення вологості в результат не входять:

%Sensors.List%

Склад = !20,0 °C; Морозильник = -5,2 °C

%Sensors.ListAll%

Значення датчиків усієї системи. У нашому прикладі — з усіх трьох модулів, зокрема «Техвідділу», який не вибрано в сценарії.

%Sensors.ListAll%

Склад = 48,8% !20,0 °C; Морозильник = 40,6% -5,2 °C; Техвідділ = err

%Sensors.ListAlarm%

Значення лише тих датчиків усієї системи, які перебувають в аварії, незалежно від вибору й типу сценарію. У прикладі це лише температура «Складу» — 1.1.T.

%Sensors.ListAlarm%

Склад = !20,0 °C

%Sensors.ListEvent%

Значення лише тих датчиків, події яких спричинили поточний запуск сценарію. У початковому прикладі подія AlarmOn надійшла лише від 1.1.T: виводиться температура «Складу», без його вологості та без датчиків «Морозильника».

%Sensors.ListEvent%

Склад = !20,0 °C

Якщо один запуск об’єднав події кількох датчиків, %Sensors.ListEvent% виведе їх усі. Наприклад, поточний запуск спричинили події датчиків 1.1.T та 1.2.T:

%Sensors.ListEvent%

Склад = !20,0 °C; Морозильник = -5,2 °C

Для запуску за розкладом поточної події немає: %Sensors.ListEvent% повертає порожній рядок, а %Sensors.List% і %Sensors.ListAll% охоплюють усю систему.

5.16.5 Змінні окремого датчика

Пряме звернення починається з Sensors["шлях"], наприклад Sensors["1.1.T"]. Воно не обмежується пристроями, охопленими %Sensors.State% чи %Sensors.List%. Нижче використано датчик «Температура» модуля «Склад» із попереднього прикладу.

%Sensors["1.1.T"].Name%

Власна назва датчика. Якщо назву не задано, результат порожній.

%Sensors["1.1.T"].Name%

Температура

%Sensors["1.1.T"].Code%

Код датчика — назва каналу в модулі, наприклад T або H.

%Sensors["1.1.T"].Code%

T

%Sensors["1.1.T"].Path%

Повний шлях від адаптера до датчика, розділений крапками.

%Sensors["1.1.T"].Path%

1.1.T

%Sensors["1.1.T"].PathId%

Інший запис того самого повного шляху.

%Sensors["1.1.T"].PathId%

1.1.T

%Sensors["1.1.T"].Parent.Code%

Звернення до батьківського модуля. Після Parent указують потрібну властивість; наприклад, Code повертає код модуля — його адресу.

%Sensors["1.1.T"].Parent.Code%

1

%Sensors["1.1.T"].Parent.Name%

Власна назва модуля. Без заданої назви результат порожній.

%Sensors["1.1.T"].Parent.Name%

Склад

%Sensors["1.1.T"].Parent.Code%

Код модуля, до якого належить датчик, — його адреса.

%Sensors["1.1.T"].Parent.Code%

1

%Sensors["1.1.T"].FullName%

Підпис модуля й датчика через « / ». Склад підпису та приклади з групами й порожніми назвами — «Назва датчика».

%Sensors["1.1.T"].FullName%

Склад / Температура

%Sensors["1.1.T"].FullCode%

Повний шлях датчика, дефіс і такий самий зрозумілий підпис, як у FullName.

%Sensors["1.1.T"].FullCode%

1.1.T - Склад / Температура

Після зміни адреси прямо записані шляхи в шаблонах потрібно оновити. Value, High і Low описано далі.

5.16.6 Показання та аварійні межі

Для прикладів датчик 1.1.T має показання 20,0 °C, верхню межу 15,0 °C та нижню 5,0 °C. Аварія активна, нормальне значення не використовується.

%Sensors["1.1.T"].Value%

Показання датчика з одиницею вимірювання й позначенням аварії. Без параметрів використовується Value(-1, True, 1).

%Sensors["1.1.T"].Value%

!20,0 °C

Параметр

За замовчуванням

Призначення

FracCount

-1

-1 — формат самого датчика. 0 — округлення до цілого; додатне число — кількість знаків після десяткового роздільника.

AddUnits

True

True — додає одиницю вимірювання. False — без одиниці.

ShowAlarm

1

0 — без аварійної позначки.

1 — для аналогового аварійного показання додає «!» перед значенням.

2 — показує порівняння з межею. Якщо використовується нормальне значення, порівнює з ним.

Ціле число без одиниці й аварійної позначки:

%Sensors["1.1.T"].Value(0, False, 0)%

20

Два знаки після коми, без одиниці й аварійної позначки:

%Sensors["1.1.T"].Value(2, False, 0)%

20,00

Один знак після коми, з одиницею, але без аварійної позначки:

%Sensors["1.1.T"].Value(1, True, 0)%

20,0 °C

Один знак після коми та коротка аварійна позначка:

%Sensors["1.1.T"].Value(1, True, 1)%

!20,0 °C

Один знак після коми та порівняння з верхньою межею:

%Sensors["1.1.T"].Value(1, True, 2)%

!(20,0 °C > 15,0 °C)

Результат замість числа

Ситуація

?

Опитування зупинене або ще немає показання. Зупинка опитування має пріоритет перед off та err.

off

Датчик або батьківський вузол вимкнений.

err

Помилка датчика або модуля чи адаптера.

%Sensors["1.1.T"].High%

Задана верхня межа аналогового датчика, навіть коли її контроль вимкнений. Типові параметри — High(-1, True); FracCount і AddUnits мають той самий зміст, що й у Value. Параметра ShowAlarm немає.

%Sensors["1.1.T"].High%

15,0 °C

%Sensors["1.1.T"].High(1, False)%

15,0

%Sensors["1.1.T"].Low%

Задана нижня межа аналогового датчика, навіть коли її контроль вимкнений. Типові параметри — Low(-1, True); третього параметра немає.

%Sensors["1.1.T"].Low%

5,0 °C

%Sensors["1.1.T"].Low(0, False)%

5

Це задані межі, а не поточне показання чи причина аварії. Їх використання визначають налаштування аварійних меж.