- tempcontroller: added heat rate control

This commit is contained in:
jens
2020-12-05 18:33:16 +01:00
parent b5cdb1a973
commit 55aa043efb
4 changed files with 107 additions and 63 deletions
+10 -21
View File
@@ -33,9 +33,6 @@ class TempSensorTask(ATask):
def on_temp_changed(self, value):
asyncio.create_task(self.send({'Temp': value}))
def on_temp_changed_kalman(self, value):
pass
async def recv(self, data):
print(data)
@@ -44,17 +41,10 @@ class TempSensorTask(ATask):
async def on_process(self):
print("{}: Started with interval {} s".format(self.msg_handler.get_key(), self.interval))
self.kalman.initial((self.sensor.temperature(), 0))
temp = ValueChanged(self.on_temp_changed, prec=1)
temp_kalman = ValueChanged(self.on_temp_changed_kalman, prec=1)
self.sensor.set_on_changed("temp", temp.set)
while True:
self.sensor.process()
Z = self.kalman.process_measurement((self.sensor.temperature(), 0), 0)
xp = self.kalman.process(Z)
theta_ist = xp[0, 0]
heatrate_ist = xp[1, 0] * 60
temp_kalman.set(theta_ist)
await asyncio.sleep(self.interval)
@@ -190,12 +180,11 @@ if __name__ == '__main__':
# Kalman Filter
kalman_params = {
"dt" : 1.0,
"var_P" : 0.1,
"var_Q" : 0.001,
"var_R" : 0.1
"dt" : 1.0,
"var_P" : 1,
"var_Q" : 0.0001,
"var_R" : 1
}
kalman = kalman.Kalman(kalman_params)
# Sensor
sensor = TempSensorSim()
@@ -226,23 +215,23 @@ if __name__ == '__main__':
"dt": 1.0,
"Hold": {
"Pid": {
"kp": 0.8,
"ki": 0.008,
"kp": 0.5,
"ki": 0.005,
"kd": 0.0,
"rho": 1.0
}
},
"Heat": {
"Pid": {
"kp": 0.002,
"ki": 0.0002,
"kp": 0.1,
"ki": 0.01,
"kd": 0.0,
"rho": 1.0
}
}
}
tc = temp_controller.TempController(tc_params)
tc.set_on_changed("y_hold", heater_task.actor)
tc = temp_controller.TempController(tc_params, kalman_params)
tc.set_on_changed("y", heater_task.actor)
tc_task = TcTask(tc, TC_DT, dispatcher.msgio_get("TempCtrl"))
taskmgr.add(tc_task)
sensor.set_on_changed("temp", ValueChanged(tc.set_theta_ist, prec=2).set)