- load params from config.json
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
__pycache__
|
__pycache__
|
||||||
.idea/
|
.idea/
|
||||||
|
config.json
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from time import sleep
|
|
||||||
import abc
|
import abc
|
||||||
|
import json
|
||||||
from ws.server.ws_server_multi_user import WsServerMultiUser
|
from ws.server.ws_server_multi_user import WsServerMultiUser
|
||||||
from components import ATemperatureSensor, AHeater, AStirrer
|
from components import ATemperatureSensor, AHeater, AStirrer
|
||||||
from components.sensor import TempSensorFactory
|
from components.sensor import TempSensorFactory
|
||||||
@@ -231,81 +231,72 @@ async def asleep(time):
|
|||||||
await asyncio.sleep(time)
|
await asyncio.sleep(time)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if 0:
|
config = json.load(open("config.json"))
|
||||||
taskmgr = PeriodicUpdaterThreaded()
|
dispatcher = MessageDispatcher()
|
||||||
taskmgr.start("localhost", 8765)
|
server = WsServerMultiUser(listener=dispatcher)
|
||||||
bg_thread = Thread(target=taskmgr.loop.run_forever)
|
taskmgr = TaskManager()
|
||||||
bg_thread.setDaemon(True)
|
|
||||||
bg_thread.start()
|
|
||||||
else:
|
|
||||||
dispatcher = MessageDispatcher()
|
|
||||||
server = WsServerMultiUser(listener=dispatcher)
|
|
||||||
taskmgr = TaskManager()
|
|
||||||
|
|
||||||
# Sensor
|
DT_CTRL = 1.0/config['Controller']['sim_warp_factor']
|
||||||
sensor = TempSensorFactory.create("sim")
|
|
||||||
taskmgr.add(TempSensorTask(sensor, DT_CTRL, dispatcher.msgio_get("Sensor")))
|
|
||||||
|
|
||||||
# Plant
|
# Sensor
|
||||||
pot_params = {
|
sensor = TempSensorFactory.create(config['Controller']['sensor_name'])
|
||||||
"dt" : DT_PARAMS,
|
taskmgr.add(TempSensorTask(sensor, DT_CTRL, dispatcher.msgio_get("Sensor")))
|
||||||
"theta" : 20,
|
|
||||||
"C" : 4190,
|
# Plant
|
||||||
"M" : 20,
|
pot_params = {
|
||||||
"L" : 0.05,
|
"theta" : 20,
|
||||||
"Td" : 12,
|
"C" : 4190,
|
||||||
"kn" : 0.2
|
"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 = Pot(pot_params, 20)
|
||||||
pot.set_on_changed("temp", ChangedFloat(sensor.set_fake_temp, prec=3).set)
|
pot.set_on_changed("temp", ChangedFloat(sensor.set_fake_temp, prec=3).set)
|
||||||
taskmgr.add(PotTask(pot, DT_CTRL, dispatcher.msgio_get("Pot")))
|
taskmgr.add(PotTask(pot, DT_CTRL, dispatcher.msgio_get("Pot")))
|
||||||
|
|
||||||
# Heater
|
# Heater
|
||||||
heater = HeaterFactory.create("sim")
|
heater = HeaterFactory.create(config['Controller']['heater_name'])
|
||||||
heater.set_on_changed("power_eff", ChangedFloat(pot.set_power, prec=0).set)
|
heater.set_on_changed("power_eff", ChangedFloat(pot.set_power, prec=0).set)
|
||||||
heater_task = HeaterTask(heater, DT_CTRL, dispatcher.msgio_get("Heater"))
|
heater_task = HeaterTask(heater, DT_CTRL, dispatcher.msgio_get("Heater"))
|
||||||
taskmgr.add(heater_task)
|
taskmgr.add(heater_task)
|
||||||
|
|
||||||
# Temperature Controller
|
# Temperature Controller
|
||||||
tc_params = {
|
tc_params = {
|
||||||
"Hold": {
|
"dt": 1.0,
|
||||||
"dt": DT_PARAMS,
|
"Kalman": {
|
||||||
"kp": 1.0,
|
"dt" : 1.0,
|
||||||
"ki": 0.0,
|
"var_P" : 1.0,
|
||||||
"kd": 0.0,
|
"var_Q" : 0.0001,
|
||||||
"kt": 0.0
|
"var_R" : 1.0
|
||||||
},
|
},
|
||||||
"Heat": {
|
"Hold": {
|
||||||
"dt": DT_PARAMS,
|
"kp": 1.0,
|
||||||
"kp": 0.1,
|
"ki": 0.0,
|
||||||
"ki": 0.01,
|
"kd": 0.0,
|
||||||
"kd": 0.0,
|
"kt": 0.0
|
||||||
"kt": 1.0
|
},
|
||||||
}
|
"Heat": {
|
||||||
|
"kp": 0.1,
|
||||||
|
"ki": 0.01,
|
||||||
|
"kd": 0.0,
|
||||||
|
"kt": 1.0
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Kalman Filter
|
tc_params = config['TempCtrl']
|
||||||
kalman_params = {
|
tc = TempController(tc_params)
|
||||||
"dt" : DT_PARAMS,
|
tc.set_on_changed("y", heater_task.actor)
|
||||||
"var_P" : 1,
|
tc_task = TcTask(tc, DT_CTRL, dispatcher.msgio_get("TempCtrl"))
|
||||||
"var_Q" : 0.0001,
|
taskmgr.add(tc_task)
|
||||||
"var_R" : 1
|
sensor.set_on_changed("temp", ChangedFloat(tc.set_theta_ist, prec=2).set)
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
|
# 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):
|
class TempController(AttributeChange):
|
||||||
def __init__(self, params_pid, params_kalman):
|
def __init__(self, params):
|
||||||
AttributeChange.__init__(self)
|
AttributeChange.__init__(self)
|
||||||
|
dt = params['dt']
|
||||||
self.pid_hold = Pid(params_pid['Hold'])
|
self.pid_hold = Pid(params['Hold'])
|
||||||
self.pid_rate = Pid(params_pid['Heat'])
|
self.pid_rate = Pid(params['Heat'])
|
||||||
self.theta_ist_set = 20
|
self.theta_ist_set = 20
|
||||||
self.theta_soll_set = 0
|
self.theta_soll_set = 0
|
||||||
self.heatrate_ist_set = 0
|
self.heatrate_ist_set = 0
|
||||||
@@ -25,8 +25,8 @@ class TempController(AttributeChange):
|
|||||||
self.heatrate_soll = 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
|
||||||
self.kalman = Kalman(params_kalman)
|
self.kalman = Kalman(params['Kalman'])
|
||||||
self.y = -1
|
self.y = -1
|
||||||
self.state = States.IDLE
|
self.state = States.IDLE
|
||||||
self.use_kalman = True
|
self.use_kalman = True
|
||||||
@@ -102,7 +102,14 @@ class TempController(AttributeChange):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
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": {
|
"Hold": {
|
||||||
"dt": 1.0,
|
"dt": 1.0,
|
||||||
"kp": 1.0,
|
"kp": 1.0,
|
||||||
@@ -121,24 +128,17 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
pot_params = {
|
pot_params = {
|
||||||
"dt" : 1.0,
|
"dt" : 1.0,
|
||||||
"theta" : 20,
|
"theta" : 20,
|
||||||
"C" : 4190,
|
"C" : 4190,
|
||||||
"M" : 20,
|
"M" : 20,
|
||||||
"L" : 0.05,
|
"L" : 0.05,
|
||||||
"Td" : 12,
|
"Td" : 12,
|
||||||
"kn" : 0.2
|
"kn" : 0.2
|
||||||
}
|
}
|
||||||
|
|
||||||
# Kalman Filter
|
|
||||||
kalman_params = {
|
|
||||||
"dt" : 1.0,
|
|
||||||
"var_P" : 1,
|
|
||||||
"var_Q" : 0.0001,
|
|
||||||
"var_R" : 1
|
|
||||||
}
|
|
||||||
temp_ist = 0
|
temp_ist = 0
|
||||||
temp_soll = 20
|
temp_soll = 20
|
||||||
ctrl = TempController(params, kalman_params)
|
ctrl = TempController(tc_params)
|
||||||
plant = Pot(pot_params)
|
plant = Pot(pot_params)
|
||||||
_temp_ist = np.empty(0)
|
_temp_ist = np.empty(0)
|
||||||
_temp_soll = 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