Ну вот и хотелось бы написать вариант без патентных прав.
Не вдаваясь в нюансы и в подробности, код Гистерезиса для примера
Код:
public class Hysteresis()
{
public bool EN; // входная переменная разрешающая работу программы
public double inCnl;
public double low;
public double high;
public bool mode = true; // По умолчанию нагрев = true, охлаждение = false
public bool Q; // Выход гистерезиса
public ushort cycle; // Задание цикла выполнения программы в мс
public bool terminated = false; // Переменная остановки цикла для остановки программы и(или) для закрытия потока
bool _mode;
public void Run()
{
// Копирование входных переменных во внутренние программы
bool res = false;
do
{
if (EN)
{
// Копирование входных переменных во внутренние в начале цикла программы
_mode = mode;
// Инициализация выходных переменных если требуется.
res = Q; // для возможности задания retain при перезапусках
// тело программы
if (_mode)
{
if (inCnl < low) res = true;
if (inCnl > high) res = false;
}
else
{
if (inCnl < low) res = false;
if (inCnl > high) res = true;
}
// тело программы
// Копирование выходных переменных из внутренних в конце цикла программы, для некоторых необязательно, будут обработаны программой
Q = res;
// Задание времени цикла
Thread.Sleep(cycle);
}
}
while (!terminated);
}
}
Суть, выполнять несколько экземпляров программ из Scada системы с возможностью управления модулями В/В без контроллеров.
Вот PID бы аналогично сделать, но доступный и каким-то образом прикрутить еще автонастройку. Типа запустил на Н-ное время, потом получил в каналах Scada соответствующие коэффициенты. Вбил их в основную программу и запустил на постоянку.