- tempcontroller: added heat rate control
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user