Насколько я понял, вам нужно реализовать несколько регуляторов с разными параметрами и одинаковыми коэффициентами.
Для добавления новых полей, если речь идет об имитации, необходимо добавить их в виртуальное устройство:
// Создаем виртуальное устройство
defineVirtualDevice("PIDTest", {
title: "PID",
cells: {
// Топик температуры 1
enabled1: {
type: "range",
value: 20,
max: 40,
min: 10
},
// Топик температуры 2
enabled2: {
type: "range",
value: 20,
max: 40,
min: 10
},
// Уставка 1
setPoint1: {
type: "range",
value: 20,
min: 15,
max: 40
},
// Уставка 2
setPoint2: {
type: "range",
value: 20,
min: 15,
max: 40
},
// Вывод ПИД-а 1
log1: {
type: "text",
value: ''
},
// Вывод ПИД-а 2
log2: {
type: "text",
value: ''
},
// Коэф. пропорциональной составляющей
kp1: {
type: "range",
value: 1,
min: 1,
max: 100,
},
// Коэф интегральной составляющей
ki1: {
type: "range",
value: 0,
min: 0,
max: 100,
}
},
});
Далее реализовать функции вычисления для первого ПИД-а:
//цикл работы первого ПИД-а
var myControl1 = function() {
// Актуализация (получение) параметров из панели
var temperature = dev["PIDTest/enabled1"];
var temperatureSetpoint = dev["PIDTest/setPoint1"];
var Kp = dev["PIDTest/kp1"],
Ki = dev["PIDTest/ki1"],
// Запись полученных/обновленных параметров в ПИД
ctr.setInput(temperature);
ctr.setPoint(temperatureSetpoint);
ctr.setTunings(Kp, Ki, Kd);
// Работа ПИД-а
ctr.compute();
// Получение результата
var output = String(ctr.getOutput());
log("Output : " + output);
dev["PIDTest/log1"] = output;
};
setInterval(myControl1, timeframe);
и второго:
//цикл работы второго ПИД-а
var myControl2 = function() {
// Актуализация (получение) параметров из панели
var temperature = dev["PIDTest/enabled2"];
var temperatureSetpoint = dev["PIDTest/setPoint2"];
var Kp = dev["PIDTest/kp1"],
Ki = dev["PIDTest/ki1"],
// Запись полученных/обновленных параметров в ПИД
ctr.setInput(temperature);
ctr.setPoint(temperatureSetpoint);
ctr.setTunings(Kp, Ki, Kd);
// Работа ПИД-а
ctr.compute();
// Получение результата
var output = String(ctr.getOutput());
log("Output : " + output);
dev["PIDTest/log2"] = output;
};
setInterval(myControl2, timeframe);
Контроллера под рукой нет (код не проверял).