- refactored

- integrated stirrer
This commit is contained in:
jens
2020-12-17 16:28:50 +01:00
parent 311ff974cc
commit ddf8003f5c
14 changed files with 66 additions and 26 deletions
+8 -3
View File
@@ -6,8 +6,8 @@ from ws.server.ws_server_multi_user import WsServerMultiUser
from components.sensor import TempSensorFactory from components.sensor import TempSensorFactory
from components.pid import TempController from components.pid import TempController
from components.plant import Pot from components.plant import Pot
from components.actor import HeaterFactory from components.actor import HeaterFactory, StirrerFactory
from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask, StirrerTask
DT_CTRL = 0.1 DT_CTRL = 0.1
@@ -32,7 +32,7 @@ if __name__ == '__main__':
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(config['Controller']['heater_name']) heater = HeaterFactory.create(config['Controller']['heater_name'], 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_CTRL, dispatcher.msgio_get("Heater"))
taskmgr.add(heater_task) taskmgr.add(heater_task)
@@ -45,6 +45,11 @@ if __name__ == '__main__':
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 = StirrerFactory.create(config['Controller']['stirrer_name'], config['Stirrer'])
stirrer_task = StirrerTask(stirrer, DT_CTRL, dispatcher.msgio_get("Stirrer"))
taskmgr.add(stirrer_task)
# Message dispatcher # Message dispatcher
h_dispatcher = taskmgr.start() h_dispatcher = taskmgr.start()
h_server = server.listen("0.0.0.0", 8765) h_server = server.listen("0.0.0.0", 8765)
+1
View File
@@ -1 +1,2 @@
from components.actor.heaterFactory import HeaterFactory from components.actor.heaterFactory import HeaterFactory
from components.actor.stirrerFactory import StirrerFactory
+2 -2
View File
@@ -2,10 +2,10 @@
class HeaterFactory: class HeaterFactory:
@staticmethod @staticmethod
def create(name): def create(name, 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('/dev/ttyUSB0', 115200) return HeaterHendi(params)
+2 -2
View File
@@ -3,12 +3,12 @@ from hendiCtrl import HendiCtrl
class HeaterHendi(AHeater): class HeaterHendi(AHeater):
def __init__(self, port, baudrate): def __init__(self, params):
AHeater.__init__(self) AHeater.__init__(self)
self.power_set = self.get_power_min() self.power_set = self.get_power_min()
self.is_active = False self.is_active = False
self.power_eff = 0 self.power_eff = 0
self.hendi = HendiCtrl(port, baudrate) self.hendi = HendiCtrl(params['port'], params['baudrate'])
def get_power_min(self): def get_power_min(self):
caps = self.hendi.getCapabilties() caps = self.hendi.getCapabilties()
@@ -2,10 +2,10 @@
class StirrerFactory: class StirrerFactory:
@staticmethod @staticmethod
def create(name, dt): def create(name, params):
if "sim" in name: if "sim" in name:
from components.actor.stirrersim import StirrerSim from components.actor.stirrersim import StirrerSim
return StirrerSim(dt) return StirrerSim(params)
elif "1376" in name: elif "1376" in name:
from components.actor.stirrerpololu1376 import StirrerPololu1376 from components.actor.stirrerpololu1376 import StirrerPololu1376
return StirrerPololu1376(dt, '/dev/ttyUSB0', 115200) return StirrerPololu1376(params)
+1 -1
View File
@@ -8,7 +8,7 @@ class StirrerPololu1376(AStirrer):
return "Pololu1376" return "Pololu1376"
def __init__(self, dt, port, baudrate): def __init__(self, dt, port, baudrate):
super(StirrerPololu1376, self).__init__(dt) AStirrer.__init__(self, dt)
self.isMasterOn = 0 self.isMasterOn = 0
self.ser_speed = baudrate self.ser_speed = baudrate
+2 -5
View File
@@ -3,11 +3,8 @@ import time
class StirrerSim(AStirrer): class StirrerSim(AStirrer):
def name(self): def __init__(self, params):
return "FakeStirrer" AStirrer.__init__(self, params['dt'])
def __init__(self, dt):
super(StirrerSim, self).__init__(dt)
def __del__(self): def __del__(self):
self.activate(False) self.activate(False)
+3 -5
View File
@@ -1,12 +1,10 @@
import abc import abc
from utils.value import AttributeChange
class AStirrer: class AStirrer(AttributeChange):
@abc.abstractmethod
def name(self):
return ""
def __init__(self, dt): def __init__(self, dt):
AttributeChange.__init__(self)
self.dt = dt self.dt = dt
self.speed = 0 self.speed = 0
self.cycleTime = 1 self.cycleTime = 1
+1
View File
@@ -1,5 +1,6 @@
from tasks.task import * from tasks.task import *
from tasks.tempsensor import * from tasks.tempsensor import *
from tasks.heater import * from tasks.heater import *
from tasks.stirrer import *
from tasks.pot import * from tasks.pot import *
from tasks.tempctrl import * from tasks.tempctrl import *
+1 -1
View File
@@ -1,8 +1,8 @@
import asyncio import asyncio
from tasks import ATask from tasks import ATask
from components.plant import APlant
from ws.message import MsgIo from ws.message import MsgIo
from utils.value import ChangedInteger, ChangedFloat from utils.value import ChangedInteger, ChangedFloat
from components.plant import APlant
class PotTask(ATask): class PotTask(ATask):
+36
View File
@@ -0,0 +1,36 @@
import asyncio
from tasks import ATask
from ws.message import MsgIo
from components import AStirrer
class StirrerTask(ATask):
def __init__(self, stirrer_device: AStirrer, interval, msg_handler: MsgIo):
ATask.__init__(self, interval)
self.msg_handler = msg_handler
msg_handler.set_recv_handler(self.recv)
self.device = stirrer_device
def on_speed_changed(self, value):
asyncio.create_task(self.send({'Speed': value}))
def on_dutycycle_changed(self, value):
asyncio.create_task(self.send({'DutyCycle': value}))
def on_cycletime_changed(self, value):
asyncio.create_task(self.send({'CycleTime': value}))
async def recv(self, data):
print(data)
async def send(self, data):
await self.msg_handler.send(data)
async def on_process(self):
print("{}: Started with interval {} s".format(self.msg_handler.get_key(), self.interval))
self.device.set_on_changed("speed", self.on_speed_changed)
self.device.set_on_changed("dutyCycle", self.on_dutycycle_changed)
self.device.set_on_changed("cycleTime", self.on_cycletime_changed)
while True:
self.device.process()
await asyncio.sleep(self.interval)
+2 -2
View File
@@ -1,8 +1,8 @@
import asyncio import asyncio
from tasks import ATask from tasks import ATask
from components.pid import TempController
from utils.value import ChangedFloat
from ws.message import MsgIo from ws.message import MsgIo
from utils.value import ChangedFloat
from components.pid import TempController
class TcTask(ATask): class TcTask(ATask):
+2 -2
View File
@@ -1,8 +1,8 @@
import asyncio import asyncio
from tasks import ATask from tasks import ATask
from components import ATemperatureSensor
from utils.value import ChangedFloat
from ws.message import MsgIo from ws.message import MsgIo
from utils.value import ChangedFloat
from components import ATemperatureSensor
class TempSensorTask(ATask): class TempSensorTask(ATask):
+2
View File
@@ -1,3 +1,5 @@
class Value: class Value:
def __init__(self, initial=None): def __init__(self, initial=None):
self.value = initial self.value = initial