- load params from config.json
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
__pycache__
|
||||
.idea/
|
||||
config.json
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user