Формулы применяются для расчёта значений и статусов входных каналов, а также для расчёта значений команд управления. Обработка формул выполняется программой Сервер.
Выполняемые формулы вводятся в базу конфигурации в таблицы Входные каналы и Каналы управления в столбец Формула. Чтобы расчёт по формуле для какого-либо канала выполнялся, необходимо установить для него галочку в столбце Исп. формулу. Таблица Формулы базы конфигурации содержит дополнительные функции и структуры данных, которые могут быть использованы в формулах для входных каналов и каналов управления.
Общие правила написания и использования формул:
Правила вычисления формул входных каналов:
Правила вычисления формул каналов управления:
Переменные, доступные в формулах:
| Переменная | Тип значения | Описание |
|---|---|---|
| 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. В качестве примера можно использовать проект формул указанный выше.