- added stirrer and hendi
- refactored
This commit is contained in:
@@ -2,13 +2,13 @@ import asyncio
|
||||
from time import sleep
|
||||
import abc
|
||||
from ws.server.ws_server_multi_user import WsServerMultiUser
|
||||
from components import ATemperatureSensor
|
||||
from components import ATemperatureSensor, AHeater, AStirrer
|
||||
from components.sensor import TempSensorFactory
|
||||
from components.pid import TempController
|
||||
from components.plant import Pot, APlant
|
||||
from components.actor.heater import Heater, AHeater
|
||||
from components.actor import HeaterFactory
|
||||
from ws.message import MsgIo, MessageDispatcher
|
||||
from utils.value import Value, ChangedFloat, ChangedInteger
|
||||
from utils.value import ChangedFloat, ChangedInteger
|
||||
|
||||
DT_CTRL = 0.1
|
||||
DT_PARAMS = 1.0
|
||||
@@ -261,7 +261,7 @@ if __name__ == '__main__':
|
||||
taskmgr.add(PotTask(pot, DT_CTRL, dispatcher.msgio_get("Pot")))
|
||||
|
||||
# Heater
|
||||
heater = Heater()
|
||||
heater = HeaterFactory.create("sim")
|
||||
heater.set_on_changed("power_eff", ChangedFloat(pot.setPower, prec=0).set)
|
||||
heater_task = HeaterTask(heater, DT_CTRL, dispatcher.msgio_get("Heater"))
|
||||
taskmgr.add(heater_task)
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
from components.atemperatureSensor import *
|
||||
from components.astirrer import *
|
||||
from components.aheater import *
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
class StirrerFactory:
|
||||
@staticmethod
|
||||
def create(name, dt):
|
||||
if "sim" in name:
|
||||
from components.actor.stirrer_sim import Stirrer_sim
|
||||
return Stirrer_sim(dt)
|
||||
elif "1376" in name:
|
||||
from components.actor.stirrer_pololu1376 import Stirrer_pololu1376
|
||||
return Stirrer_pololu1376(dt, '/dev/ttyUSB0', 115200)
|
||||
@@ -0,0 +1 @@
|
||||
from components.actor.heaterFactory import HeaterFactory
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
class HeaterFactory:
|
||||
@staticmethod
|
||||
def create(name):
|
||||
if "sim" in name:
|
||||
from components.actor.heater_sim import HeaterSim
|
||||
return HeaterSim()
|
||||
elif "Hendi" in name:
|
||||
from components.actor.heater_hendi import HeaterHendi
|
||||
return HeaterHendi('/dev/ttyUSB0', 115200)
|
||||
@@ -0,0 +1,41 @@
|
||||
from components.aheater import AHeater
|
||||
from hendiCtrl import HendiCtrl
|
||||
|
||||
|
||||
class HeaterHendi(AHeater):
|
||||
def __init__(self, port, baudrate):
|
||||
AHeater.__init__(self)
|
||||
self.power_set = self.get_power_min()
|
||||
self.is_active = False
|
||||
self.power_eff = 0
|
||||
self.hendi = HendiCtrl(port, baudrate)
|
||||
|
||||
def get_power_min(self):
|
||||
caps = self.hendi.getCapabilties()
|
||||
return caps['pwr_watts_min']
|
||||
|
||||
def get_power_max(self):
|
||||
caps = self.hendi.getCapabilties()
|
||||
return caps['pwr_watts_max']
|
||||
|
||||
def activate(self, enable):
|
||||
self.is_active = enable
|
||||
if enable:
|
||||
self.hendi.setSwitch(1)
|
||||
else:
|
||||
self.hendi.setSwitch(0)
|
||||
|
||||
def is_activated(self):
|
||||
s = self.hendi.getSwitch()
|
||||
return '1' in s
|
||||
|
||||
def process(self):
|
||||
power_eff = self.power_set if self.is_active else 0
|
||||
self.hendi.setPowerWatts(power_eff)
|
||||
|
||||
def setPower(self, power):
|
||||
self.power_set = max(self.get_power_min(), min(self.get_power_max(), power))
|
||||
|
||||
def getPower(self):
|
||||
result = self.hendi.getPowerWatts()
|
||||
return result
|
||||
@@ -1,7 +1,7 @@
|
||||
from components.aheater import AHeater
|
||||
|
||||
|
||||
class Heater(AHeater):
|
||||
class HeaterSim(AHeater):
|
||||
def __init__(self):
|
||||
AHeater.__init__(self)
|
||||
self.power_set = self.get_power_min()
|
||||
@@ -28,5 +28,3 @@ class Heater(AHeater):
|
||||
|
||||
def getPower(self):
|
||||
return self.power_eff
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import abc
|
||||
import logging
|
||||
|
||||
|
||||
class AStirrer:
|
||||
@@ -14,10 +13,7 @@ class AStirrer:
|
||||
self.dutyCycle = 1
|
||||
self.cycleCounter = 0
|
||||
self.isOn = 1
|
||||
|
||||
def log(self, s):
|
||||
d = {'user': "Stirrer" + "::" + self.name()}
|
||||
logging.info ("{}".format(s), extra=d)
|
||||
self.is_active = False
|
||||
|
||||
def process(self):
|
||||
isOn = self.isOn
|
||||
@@ -54,9 +50,13 @@ class AStirrer:
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def activate(self):
|
||||
def on_activate(self, enable):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def deactivate(self):
|
||||
pass
|
||||
def activate(self, enable):
|
||||
self.is_active = enable
|
||||
self.on_activate(enable)
|
||||
|
||||
def is_activated(self):
|
||||
return self.is_active
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import abc
|
||||
import logging
|
||||
from utils.value import AttributeChange
|
||||
|
||||
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
from components.sensor import tempSensorSim
|
||||
from components.sensor.tempsensor_factory import *
|
||||
|
||||
Reference in New Issue
Block a user