- temp controller: use series PID for T and dT. PID-T sets setpoint on PIT-dT
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user