![]() |
|
Underfloor Water heating - Night lowering - Printable Version +- LogicMachine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8) +--- Thread: Underfloor Water heating - Night lowering (/showthread.php?tid=1580) |
Underfloor Water heating - Night lowering - Bobby - 09.09.2018 Hi! I am using PID script for UFH. And i want to have 2 adjustable setpoint temperatures for day/nighttime. is this possible? Another alternative is to use the current setpoint temperature, but lower it by ie 4 degrees in night time. My current script: -- init pid algorithm if not p1 then p1 = PID:init({ current = '1/5/41', setpoint = '1/5/21', output = '1/5/1' }) end RE: Underfloor Water heating - Night lowering - Erwin van der Zwart - 09.09.2018 Hi, You need to create a event based script that has 2 setpoints as input and a output that is given a value by the day/night logic to set one of the 2 inputs to the output. The output can then be used for the PID. BR, Erwin RE: Underfloor Water heating - Night lowering - admin - 11.09.2018 You can modify PID library compute function like this. Then you need to specify night_mode (boolean, true = night mode) and setpoint_night (float16 or similar) addresses in PID init. After that restart your script via enable/disable so new library and parameters are loaded. Code: function PID:compute()
local params, current, setpoint, deltasc, deltain, output
params = self.params
-- get input values
current = grp.getvalue(params.current)
setpoint = grp.getvalue(params.setpoint)
if params.night_mode and grp.getvalue(params.night_mode) then
setpoint = grp.getvalue(params.setpoint_night)
end
-- delta between setpoint and current
deltasc = setpoint - current
-- calculate new iterm
self.iterm = self.iterm + params.ki * self.deltatime * deltasc
self:clampiterm()
-- delta between current and previous value
deltain = current - self.previous
-- calculate output value
self.output = params.kp * deltasc + self.iterm
self.output = self.output - params.kd / self.deltatime * deltain
-- write to output
self:setoutput()
-- save previous value
self.previous = current
return self.output
end |