Использование формул

Формулы применяются для расчёта значений и статусов входных каналов, а также для расчёта значений команд управления. Обработка формул выполняется программой Сервер.

Выполняемые формулы вводятся в базу конфигурации в таблицы Входные каналы и Каналы управления в столбец Формула. Чтобы расчёт по формуле для какого-либо канала выполнялся, необходимо установить для него галочку в столбце Исп. формулу. Таблица Формулы базы конфигурации содержит дополнительные функции и структуры данных, которые могут быть использованы в формулах для входных каналов и каналов управления.

Правила написания формул

Общие правила написания и использования формул:

  1. Формулы записываются согласно синтаксису математических выражений языка C#. Доступны различные классы .NET, например, Math, DateTime.
  2. База конфигурации позволяет добавлять новые константы, поля, свойства и методы, которые становятся доступны в формулах.
  3. Если хотя бы одна из формул содержит ошибку, работа Сервера невозможна. Информация об ошибках в формулах выводится в журнал приложения.

Правила вычисления формул входных каналов:

  1. Расчёт по формулам для каналов типа Телесигнал и Телеизмерение выполняется только при получении сервером новых данных по этим каналам. Используйте эти типы каналов, если формула не ссылается на данные других каналов.
  2. Расчёт по формулам для каналов типа Дорасчётный * и Кол-во переключений выполняется постоянно. Последовательность расчёта – от меньших номеров каналов к большим. Дорасчётные типы каналов используются, если значение и статус канала вычисляются на основе данных других каналов.
  3. Расчёт по формулам для каналов типа Минутный * и Часовой * выполняется периодически один раз в минуту или один раз в час соответственно. Используйте эти типы каналов для реализации различных счётчиков, например, потребляемой энергии или времени наработки.
  4. Статус канала после вычисления по формуле для каналов типа Телесигнал и Телеизмерение равен статусу переданных Серверу данных, если расчёт статуса не задан в формуле явно.
  5. Для каналов других типов устанавливается статус Параметр определён, если расчёт статуса не задан в формуле явно.
  6. Формула, заданная для входного канала в базе конфигурации и не содержащая символа ";", определяет расчёт значения канала.
  7. Если формула содержит символ «;», то она разбивается на две части: первая часть определяет расчёт значения канала, вторая часть – расчёт статуса канала.
  8. Если для канала заданы границы, то статус канала пересчитывается с учётом границ после вычисления формулы канала.
  9. Формула для расчёта значения канала должна возвращать вещественное число типа double, а формула для расчёта статуса - целое число типа int.

Правила вычисления формул каналов управления:

  1. Формула, заданная для канала управления в базе конфигурации, применяется для каналов управления с типом команды Стандартная или Бинарная.
  2. Формула для расчёта значения стандартной команды должна возвращать вещественное число типа double, а формула для расчёта данных бинарной команды - массив байт типа byte[].

Существующие формулы

Переменные, доступные в формулах:

Переменная Тип значения Описание
CnlVal, Cnl double Передаваемое Серверу значение входного канала до расчёта
CnlStat int Передаваемый Серверу статус входного канала до расчёта
CmdVal, Cmd double Передаваемое Серверу значение команды управления
CmdData byte[] Передаваемые Серверу данные команды управления
CnlNum int Номер канала, формула которого вычисляется
E double Число e
PI double Число π

Функции, доступные в формулах:

Функция Тип значения Описание
N(n) int Возвращает номер заданного канала для обновления номеров при клонировании
Val() double Текущее значение входного канала вычисляемой формулы
Val(n) double Текущее значение входного канала n
SetVal(n, val) double Установить текущее значение входного канала n
Stat() int Текущий статус входного канала вычисляемой формулы
Stat(n) int Текущий статус входного канала n
SetStat(n, stat) int Установить текущий статус входного канала n
SetData(n, val, stat) double Установить текущее значение и статус входного канала n
Abs(x) double Модуль
Sin(x) double Синус
Cos(x) double Косинус
Tan(x) double Тангенс
Exp(x) double Экспонента
Ln(x), Log(x) double Натуральный логарифм
Sqr(x) double Квадрат числа
Sqrt(x) double Квадратный корень

Дополнительные формулы, в том числе формулы для работы со средними значениеми, доступны на GitHub.

Отладка формул

При разработке собственных формул необходимо обеспечивать корректность синтаксиса формул и правильность их работы. Если службе Сервера при запуске не удалось скомпилировать формулы, информация об ошибке выводится в журнал работы Сервера, а компилируемый код формул доступен в файле CalcEngine.cs, который расположен по умолчанию в директории журналов Сервера C:\SCADA\ScadaServer\Log\

Для разработки сложных формул рекомендуется использовать Microsoft Visual Studio Community Edition, подключив в зависимости проекта сборку FormulaTester.dll. В качестве примера можно использовать проект формул указанный выше.