- temp controller: use series PID for T and dT. PID-T sets setpoint on PIT-dT

This commit is contained in:
jens
2020-12-11 12:43:12 +01:00
parent c4e6aadaca
commit ada81935e3
2 changed files with 7 additions and 11 deletions
+1 -1
View File
@@ -196,7 +196,7 @@ class TcTask(ATask):
self.tc.set_on_changed('theta_ist', ChangedFloat(self.on_temp_ist_changed, prec=1).set) self.tc.set_on_changed('theta_ist', ChangedFloat(self.on_temp_ist_changed, prec=1).set)
self.tc.set_on_changed('heatrate_ist', ChangedFloat(self.on_rate_ist_changed, prec=1).set) self.tc.set_on_changed('heatrate_ist', ChangedFloat(self.on_rate_ist_changed, prec=1).set)
self.tc.set_on_changed('theta_soll_set', ChangedFloat(self.on_temp_soll_changed, prec=1).set) self.tc.set_on_changed('theta_soll_set', ChangedFloat(self.on_temp_soll_changed, prec=1).set)
self.tc.set_on_changed('heatrate_soll_set', ChangedFloat(self.on_rate_soll_changed, prec=1).set) self.tc.set_on_changed('heatrate_soll', ChangedFloat(self.on_rate_soll_changed, prec=1).set)
self.tc.set_theta_soll(20.0) self.tc.set_theta_soll(20.0)
self.tc.set_heatrate_soll(1.0) self.tc.set_heatrate_soll(1.0)
+6 -10
View File
@@ -23,6 +23,7 @@ class TempController(AttributeChange):
self.theta_soll_set = 0 self.theta_soll_set = 0
self.heatrate_ist_set = 0 self.heatrate_ist_set = 0
self.heatrate_soll_set = 1.0 self.heatrate_soll_set = 1.0
self.heatrate_soll = 1.0
self.theta_ist = 0 self.theta_ist = 0
self.heatrate_ist = 0 self.heatrate_ist = 0
self.params = params_pid self.params = params_pid
@@ -55,8 +56,9 @@ class TempController(AttributeChange):
self.theta_ist = self.theta_ist_set self.theta_ist = self.theta_ist_set
self.heatrate_ist = self.heatrate_ist_set self.heatrate_ist = self.heatrate_ist_set
self.heatrate_soll = self.heatrate_soll_set * self.pid_hold.get_y()
theta_err = self.theta_soll_set - self.theta_ist theta_err = self.theta_soll_set - self.theta_ist
heatrate_err = self.heatrate_soll_set - self.heatrate_ist heatrate_err = self.heatrate_soll - self.heatrate_ist
# Process state # Process state
state_next = self.state state_next = self.state
@@ -87,16 +89,10 @@ class TempController(AttributeChange):
state_next = States.HOLD state_next = States.HOLD
self.pid_hold.reset() self.pid_hold.reset()
if self.state != States.IDLE: self.pid_hold.process(theta_err)
self.pid_hold.process(theta_err) self.pid_rate.process(heatrate_err)
self.pid_rate.process(heatrate_err)
if self.state == States.HEAT: self.y = self.pid_rate.get_y()
self.y = self.pid_rate.get_y()
elif self.state == States.HOLD:
self.y = self.pid_hold.get_y()
else:
self.y = -1
if state_next != self.state: if state_next != self.state:
self.state = state_next self.state = state_next