- load params from config.json

This commit is contained in:
jens
2020-12-16 18:42:05 +01:00
parent 6dd0920010
commit 71cd87085f
4 changed files with 127 additions and 89 deletions
+1
View File
@@ -1,2 +1,3 @@
__pycache__
.idea/
config.json
+59 -68
View File
@@ -1,6 +1,6 @@
import asyncio
from time import sleep
import abc
import json
from ws.server.ws_server_multi_user import WsServerMultiUser
from components import ATemperatureSensor, AHeater, AStirrer
from components.sensor import TempSensorFactory
@@ -231,81 +231,72 @@ async def asleep(time):
await asyncio.sleep(time)
if __name__ == '__main__':
if 0:
taskmgr = PeriodicUpdaterThreaded()
taskmgr.start("localhost", 8765)
bg_thread = Thread(target=taskmgr.loop.run_forever)
bg_thread.setDaemon(True)
bg_thread.start()
else:
dispatcher = MessageDispatcher()
server = WsServerMultiUser(listener=dispatcher)
taskmgr = TaskManager()
config = json.load(open("config.json"))
dispatcher = MessageDispatcher()
server = WsServerMultiUser(listener=dispatcher)
taskmgr = TaskManager()
# Sensor
sensor = TempSensorFactory.create("sim")
taskmgr.add(TempSensorTask(sensor, DT_CTRL, dispatcher.msgio_get("Sensor")))
DT_CTRL = 1.0/config['Controller']['sim_warp_factor']
# Plant
pot_params = {
"dt" : DT_PARAMS,
"theta" : 20,
"C" : 4190,
"M" : 20,
"L" : 0.05,
"Td" : 12,
"kn" : 0.2
}
# Sensor
sensor = TempSensorFactory.create(config['Controller']['sensor_name'])
taskmgr.add(TempSensorTask(sensor, DT_CTRL, dispatcher.msgio_get("Sensor")))
# Plant
pot_params = {
"theta" : 20,
"C" : 4190,
"M" : 20,
"L" : 0.05,
"Td" : 12,
"kn" : 0.2
}
pot_params = config['Plant']
if "sim" in config['Controller']['plant_name']:
pot = Pot(pot_params, 20)
pot.set_on_changed("temp", ChangedFloat(sensor.set_fake_temp, prec=3).set)
taskmgr.add(PotTask(pot, DT_CTRL, dispatcher.msgio_get("Pot")))
# Heater
heater = HeaterFactory.create("sim")
heater.set_on_changed("power_eff", ChangedFloat(pot.set_power, prec=0).set)
heater_task = HeaterTask(heater, DT_CTRL, dispatcher.msgio_get("Heater"))
taskmgr.add(heater_task)
# Heater
heater = HeaterFactory.create(config['Controller']['heater_name'])
heater.set_on_changed("power_eff", ChangedFloat(pot.set_power, prec=0).set)
heater_task = HeaterTask(heater, DT_CTRL, dispatcher.msgio_get("Heater"))
taskmgr.add(heater_task)
# Temperature Controller
tc_params = {
"Hold": {
"dt": DT_PARAMS,
"kp": 1.0,
"ki": 0.0,
"kd": 0.0,
"kt": 0.0
},
"Heat": {
"dt": DT_PARAMS,
"kp": 0.1,
"ki": 0.01,
"kd": 0.0,
"kt": 1.0
}
# Temperature Controller
tc_params = {
"dt": 1.0,
"Kalman": {
"dt" : 1.0,
"var_P" : 1.0,
"var_Q" : 0.0001,
"var_R" : 1.0
},
"Hold": {
"kp": 1.0,
"ki": 0.0,
"kd": 0.0,
"kt": 0.0
},
"Heat": {
"kp": 0.1,
"ki": 0.01,
"kd": 0.0,
"kt": 1.0
}
}
# Kalman Filter
kalman_params = {
"dt" : DT_PARAMS,
"var_P" : 1,
"var_Q" : 0.0001,
"var_R" : 1
}
tc = TempController(tc_params, kalman_params)
tc.set_on_changed("y", heater_task.actor)
tc_task = TcTask(tc, DT_CTRL, dispatcher.msgio_get("TempCtrl"))
taskmgr.add(tc_task)
sensor.set_on_changed("temp", ChangedFloat(tc.set_theta_ist, prec=2).set)
# Message dispatcher
h_dispatcher = taskmgr.start()
h_server = server.listen("0.0.0.0", 8765)
asyncio.gather(h_dispatcher, h_server)
server.run_forever()
while True:
print("Hallo")
sleep(1)
tc_params = config['TempCtrl']
tc = TempController(tc_params)
tc.set_on_changed("y", heater_task.actor)
tc_task = TcTask(tc, DT_CTRL, dispatcher.msgio_get("TempCtrl"))
taskmgr.add(tc_task)
sensor.set_on_changed("temp", ChangedFloat(tc.set_theta_ist, prec=2).set)
# Message dispatcher
h_dispatcher = taskmgr.start()
h_server = server.listen("0.0.0.0", 8765)
asyncio.gather(h_dispatcher, h_server)
server.run_forever()
+21 -21
View File
@@ -13,11 +13,11 @@ class States(Enum):
class TempController(AttributeChange):
def __init__(self, params_pid, params_kalman):
def __init__(self, params):
AttributeChange.__init__(self)
self.pid_hold = Pid(params_pid['Hold'])
self.pid_rate = Pid(params_pid['Heat'])
dt = params['dt']
self.pid_hold = Pid(params['Hold'])
self.pid_rate = Pid(params['Heat'])
self.theta_ist_set = 20
self.theta_soll_set = 0
self.heatrate_ist_set = 0
@@ -25,8 +25,8 @@ class TempController(AttributeChange):
self.heatrate_soll = 1.0
self.theta_ist = 0
self.heatrate_ist = 0
self.params = params_pid
self.kalman = Kalman(params_kalman)
self.params = params
self.kalman = Kalman(params['Kalman'])
self.y = -1
self.state = States.IDLE
self.use_kalman = True
@@ -102,7 +102,14 @@ class TempController(AttributeChange):
if __name__ == '__main__':
params = {
tc_params = {
"dt": 1.0,
"Kalman": {
"dt": 1.0,
"var_P" : 1.0,
"var_Q" : 0.0001,
"var_R" : 1.0
},
"Hold": {
"dt": 1.0,
"kp": 1.0,
@@ -121,24 +128,17 @@ if __name__ == '__main__':
pot_params = {
"dt" : 1.0,
"theta" : 20,
"C" : 4190,
"M" : 20,
"L" : 0.05,
"Td" : 12,
"kn" : 0.2
"theta" : 20,
"C" : 4190,
"M" : 20,
"L" : 0.05,
"Td" : 12,
"kn" : 0.2
}
# Kalman Filter
kalman_params = {
"dt" : 1.0,
"var_P" : 1,
"var_Q" : 0.0001,
"var_R" : 1
}
temp_ist = 0
temp_soll = 20
ctrl = TempController(params, kalman_params)
ctrl = TempController(tc_params)
plant = Pot(pot_params)
_temp_ist = np.empty(0)
_temp_soll = np.empty(0)
+46
View File
@@ -0,0 +1,46 @@
{
"Controller" : {
"sim_warp_factor": 10.0,
"stirrer_name": "sim",
"heater_name": "sim",
"sensor_name": "sim",
"plant_name": "sim"
},
"TempCtrl": {
"dt": 1.0,
"Kalman": {
"dt": 1.0,
"var_P" : 1.0,
"var_Q" : 0.0001,
"var_R" : 1.0
},
"Hold": {
"dt": 1.0,
"kp": 1.0,
"ki": 0.0,
"kd": 0.0,
"kt": 0.0
},
"Heat": {
"dt": 1.0,
"kp": 0.1,
"ki": 0.01,
"kd": 0.0,
"kt": 1.0
}
},
"Plant": {
"dt": 1.0,
"theta": 15,
"C": 4190,
"M": 20,
"L": 0.1,
"Td": 60,
"kn": 0.2
},
"Stirrer": {
"dt": 1.0,
"port": "/dev/ttyACM0",
"speed": "115200"
}
}