Формулы

В качестве источника данных любому объекту ОИК можно задать математическое выражение, также называемое дорасчетом. Формулы используются в конфигурации объектов (поле «Канал», когда устройство не выбрано), в «Условии управления», в таблицах и пользовательских таблицах.

Ссылки на объекты

Объект в формуле указывается одним из трех способов.

Алиас
Например, u35_s1. Алиас задается в свойствах объекта (смотрите Объекты данных). Чтобы на алиас можно было сослаться из формулы, он должен начинаться с буквы или знака _ и состоять из букв, цифр и знаков _. Алиас пишется точно так, как он задан, с учетом регистра.
Обозначение
Например, TIT.646 или TS.1379. Это идентификатор, который Сервер присваивает объекту при создании: латинское имя пространства (TIT — объекты ТИТ, TS — объекты ТС), точка и номер. Он показан в поле «Обозначение» группы «Атрибуты» окна «Свойства» объекта. Поле «Обозначение» можно отредактировать, но формула ссылается на идентификатор, а не на текст этого поля, поэтому сверяйтесь с исходным значением. Имя пространства пишется латиницей; регистр букв в нем не важен.
Канал устройства
Например, {IEC_DEV.1!115} — информационный объект с адресом 115 устройства МЭК-60870 с номером 1. В фигурных скобках записывается идентификатор устройства (IEC_DEV.1), знак ! и адрес канала в формате протокола. Так записывается источник объекта, когда в его свойствах выбраны «Устройство» и «Канал»; в формуле объекта такую ссылку можно использовать наравне с другими.

Фигурные скобки принимают только идентификатор, а не имя объекта: {Температура нагрева} и {u35_s1} ссылкой не являются. Запись вида ТИТ.1 (кириллицей) не является ни обозначением, ни ссылкой на канал — она будет найдена, только если такой алиас действительно задан.

ВНИМАНИЕ: в таблицах и пользовательских таблицах ссылка на канал устройства работает, только когда она — вся формула. В составе выражения (например, {IEC_DEV.1!115} * 2) Клиент в этой версии ее не находит. Ссылайтесь там на объект, получающий значение с этого канала.

Знак = в начале

  • В таблице знак = в начале формулы допускается и отбрасывается.
  • В пользовательской таблице знак = обязателен: без него содержимое ячейки считается текстом.
  • В поле «Канал» объекта и в «Условии управления» знак = не пишется: формула вида =TIT.1 считается ошибочной.

Операции

Операция Значение Приоритет
^ возведение в степень высший
*, / умножение, деление  
+, - сложение, вычитание  
=, <, >, <=, >= сравнение: 1, если верно, иначе 0 низший
-x смена знака применяется к ближайшему операнду
!x логическое НЕ применяется к ближайшему операнду

Операции одного приоритета выполняются слева направо. Допускаются скобки.

Знак «не равно» отсутствует: != и <> дают ошибку. Вместо a != b пишите !(a = b) или not(a = b).

Унарные - и ! относятся только к ближайшему операнду: !a = b означает (!a) = b, а -x^2 означает (-x)^2. Если нужно иное, ставьте скобки.

Логические значения: true и false (1 и 0). Любое ненулевое значение считается истиной.

Пример: TIT.1 + TIT.2 — сумма значений объектов ТИТ с обозначениями TIT.1 и TIT.2.

Функции

Имена функций, true и false можно писать в любом регистре: sin, Sin и SIN равнозначны.

Функция Описание
sin(x) синус
cos(x) косинус
tan(x) тангенс
asin(x) арксинус
acos(x) арккосинус
atan(x) арктангенс
atan2(y, x) арктангенс y/x
abs(x) модуль
not(x) логическое НЕ
sqrt(x) квадратный корень
sign(x) знак числа: -1, 0 или 1
min(x1, x2, ...) минимум
max(x1, x2, ...) максимум
and(x1, x2, ...) логическое И
or(x1, x2, ...) логическое ИЛИ
bitxor(x, y) исключающее ИЛИ: 1, если истинен ровно один из аргументов
if(x, a, b) a, если x истинно, иначе b

Углы тригонометрических функций задаются в радианах. ... означает произвольное число параметров.

Если значение хотя бы одного объекта в формуле отсутствует, значение формулы тоже отсутствует.

Примеры

  • TIT.1 + TIT.2 — сумма двух объектов ТИТ по обозначениям;
  • u35_s1 * 1.05 — значение объекта с алиасом u35_s1, увеличенное на 5 %;
  • {IEC_DEV.1!115} * 1000 — значение канала 115 устройства IEC_DEV.1, пересчитанное в другие единицы (в поле «Канал» объекта);
  • if(or(rek1_tok > 3, rek2_tok > 3), rek3_tok, 0) — алиасы rek1_tok, rek2_tok, rek3_tok;
  • and(!TS.1379, !TS.1380, !TS.1382) — истинно, когда все три ТС в состоянии 0;
  • !(TS.1 = TS.2) — истинно, когда состояния двух ТС различаются.

TIT.637, TIT.638, TIT.639 — обозначения объектов ТИТ, которые Сервер присвоил им при создании.

Ошибки

Если формула в таблице содержит ошибку, Клиент сообщает «Некорректное выражение.», и формула не сохраняется. Если формулу объекта не удается разобрать или одна из ссылок в ней не найдена, объект не получает значения, и у него выставляется признак качества [К] — не настроен или ошибка конфигурации (смотрите Признаки качества).