- refactored dt

This commit is contained in:
jens
2020-12-22 10:26:56 +01:00
parent b5a0e6a7ac
commit d777a955a4
7 changed files with 29 additions and 29 deletions
+13 -12
View File
@@ -9,7 +9,7 @@ from components.plant import Pot
from components.actor import HeaterFactory, StirrerFactory from components.actor import HeaterFactory, StirrerFactory
from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask, StirrerTask, TracerTask from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask, StirrerTask, TracerTask
DT_CTRL = 0.1 DT_TASK = 0.1
if __name__ == '__main__': if __name__ == '__main__':
config = json.load(open("config.json")) config = json.load(open("config.json"))
@@ -17,40 +17,41 @@ if __name__ == '__main__':
server = WsServerMultiUser(listener=dispatcher) server = WsServerMultiUser(listener=dispatcher)
taskmgr = TaskManager() taskmgr = TaskManager()
DT_CTRL = 1.0/config['Controller']['sim_warp_factor'] DT = config['Controller']['dt']
DT_TASK = 1.0 / config['Controller']['sim_warp_factor']
# Sensor # Sensor
sensor = TempSensorFactory.create(config['Controller']['sensor_name']) sensor = TempSensorFactory.create(config['Controller']['sensor_name'])
taskmgr.add(TempSensorTask(sensor, DT_CTRL, dispatcher.msgio_get("Sensor"))) taskmgr.add(TempSensorTask(sensor, DT_TASK, dispatcher.msgio_get("Sensor")))
# Plant # Plant
pot_params = config['Plant'] pot_params = config['Plant']
pot = Pot(pot_params, 20) pot = Pot(DT, pot_params, 20)
if "sim" in config['Controller']['sensor_name']: if "sim" in config['Controller']['sensor_name']:
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_TASK, dispatcher.msgio_get("Pot")))
# Heater # Heater
heater = HeaterFactory.create(config['Controller']['heater_name'], config['Heater']) heater = HeaterFactory.create(config['Controller']['heater_name'], DT, config['Heater'])
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_TASK, dispatcher.msgio_get("Heater"))
taskmgr.add(heater_task) taskmgr.add(heater_task)
# Temperature Controller # Temperature Controller
tc_params = config['TempCtrl'] tc_params = config['TempCtrl']
tc = TempController(tc_params) tc = TempController(DT, tc_params)
tc.set_on_changed("y", heater_task.actor) tc.set_on_changed("y", heater_task.actor)
tc_task = TcTask(tc, DT_CTRL, dispatcher.msgio_get("TempCtrl")) tc_task = TcTask(tc, DT_TASK, dispatcher.msgio_get("TempCtrl"))
taskmgr.add(tc_task) taskmgr.add(tc_task)
sensor.set_on_changed("temp", ChangedFloat(tc.set_theta_ist, prec=2).set) sensor.set_on_changed("temp", ChangedFloat(tc.set_theta_ist, prec=2).set)
# Stirrer # Stirrer
stirrer = StirrerFactory.create(config['Controller']['stirrer_name'], config['Stirrer']) stirrer = StirrerFactory.create(config['Controller']['stirrer_name'], DT, config['Stirrer'])
stirrer_task = StirrerTask(stirrer, DT_CTRL, dispatcher.msgio_get("Stirrer")) stirrer_task = StirrerTask(stirrer, DT_TASK, dispatcher.msgio_get("Stirrer"))
taskmgr.add(stirrer_task) taskmgr.add(stirrer_task)
# Tracer # Tracer
taskmgr.add(TracerTask(sensor, heater, tc, DT_CTRL, dispatcher.msgio_get("Tracer"))) taskmgr.add(TracerTask(sensor, heater, tc, DT_TASK, dispatcher.msgio_get("Tracer")))
# Message dispatcher # Message dispatcher
h_dispatcher = taskmgr.start() h_dispatcher = taskmgr.start()
+2 -2
View File
@@ -2,10 +2,10 @@
class HeaterFactory: class HeaterFactory:
@staticmethod @staticmethod
def create(name, params): def create(name, dt, params):
if "sim" in name: if "sim" in name:
from components.actor.heater_sim import HeaterSim from components.actor.heater_sim import HeaterSim
return HeaterSim() return HeaterSim()
elif "Hendi" in name: elif "Hendi" in name:
from components.actor.heater_hendi import HeaterHendi from components.actor.heater_hendi import HeaterHendi
return HeaterHendi(params) return HeaterHendi(dt, params)
+3 -3
View File
@@ -2,10 +2,10 @@
class StirrerFactory: class StirrerFactory:
@staticmethod @staticmethod
def create(name, params): def create(name, dt, params):
if "sim" in name: if "sim" in name:
from components.actor.stirrersim import StirrerSim from components.actor.stirrersim import StirrerSim
return StirrerSim(params) return StirrerSim(dt)
elif "1376" in name: elif "1376" in name:
from components.actor.stirrerpololu1376 import StirrerPololu1376 from components.actor.stirrerpololu1376 import StirrerPololu1376
return StirrerPololu1376(params) return StirrerPololu1376(dt, params)
+2 -2
View File
@@ -8,8 +8,8 @@ class StirrerPololu1376(AStirrer):
def name(self): def name(self):
return "Pololu1376" return "Pololu1376"
def __init__(self, params): def __init__(self, dt, params):
AStirrer.__init__(self, params['dt']) AStirrer.__init__(self, dt)
self.isMasterOn = 0 self.isMasterOn = 0
self.ser_speed = params['speed'] self.ser_speed = params['speed']
+2 -2
View File
@@ -3,8 +3,8 @@ import time
class StirrerSim(AStirrer): class StirrerSim(AStirrer):
def __init__(self, params): def __init__(self, dt):
AStirrer.__init__(self, params['dt']) AStirrer.__init__(self, dt)
def activate(self, enable): def activate(self, enable):
print("activate {}".format(enable)) print("activate {}".format(enable))
+5 -6
View File
@@ -13,9 +13,8 @@ class States(Enum):
class TempController(AttributeChange): class TempController(AttributeChange):
def __init__(self, params): def __init__(self, dt, params):
AttributeChange.__init__(self) AttributeChange.__init__(self)
dt = params['dt']
self.pid_hold = Pid(dt) self.pid_hold = Pid(dt)
self.pid_rate = Pid(dt) self.pid_rate = Pid(dt)
self.theta_ist_set = 20 self.theta_ist_set = 20
@@ -108,8 +107,9 @@ class TempController(AttributeChange):
if __name__ == '__main__': if __name__ == '__main__':
dt = 1.0
tc_params = { tc_params = {
"dt": 1.0,
"Kalman": { "Kalman": {
"var_P" : 1.0, "var_P" : 1.0,
"var_Q" : 0.0001, "var_Q" : 0.0001,
@@ -130,7 +130,6 @@ if __name__ == '__main__':
} }
pot_params = { pot_params = {
"dt" : 1.0,
"theta" : 20, "theta" : 20,
"C" : 4190, "C" : 4190,
"M" : 20, "M" : 20,
@@ -141,8 +140,8 @@ if __name__ == '__main__':
temp_ist = 0 temp_ist = 0
temp_soll = 20 temp_soll = 20
ctrl = TempController(tc_params) ctrl = TempController(dt, tc_params)
plant = Pot(pot_params) plant = Pot(dt, pot_params)
_temp_ist = np.empty(0) _temp_ist = np.empty(0)
_temp_soll = np.empty(0) _temp_soll = np.empty(0)
_y = np.empty(0) _y = np.empty(0)
+2 -2
View File
@@ -3,9 +3,9 @@ from components.plant.delay import Delay
class Pot(APlant): class Pot(APlant):
def __init__(self, params, theta_amb=20): def __init__(self, dt, params, theta_amb=20):
APlant.__init__(self) APlant.__init__(self)
self.dt = params['dt'] self.dt = dt
self.alpha = 1.0 self.alpha = 1.0
self.e = 0 self.e = 0