Files
HendiControlFirmware/Control/brewpi/plant.py
T
jens 16b77f0a17 - refactored
git-svn-id: http://moon:8086/svn/projects/HendiControl@380 fda53097-d464-4ada-af97-ba876c37ca34
2020-04-20 15:50:25 +00:00

66 lines
1.5 KiB
Python

import numpy as np
import json
from aplant import APlant
from math import sqrt
from hendiCtrl import HendiCtrl
from tempSensor_max31865 import TempSensor_max31865 as TempSensor
class Plant(APlant):
def __init__(self, params):
self.heater = HendiCtrl('/dev/ttyUSB0', 115200)
self.tempsensor = TempSensor()
self.P = 0
self.isOn = False
self.cycleTime = 30
self.dutyCycle = 1
self.cycleCounter = 0
def activate(self, enable=True):
if enable:
if not self.heater.isRemoteEnable():
try:
self.heater.remoteEnable(enable)
except:
raise Exception("Error: Could not activate heater!")
self.heater.setSwitch(enable)
print ("Plant activated")
else:
if self.heater.isRemoteEnable():
self.heater.setSwitch(enable)
self.heater.remoteEnable(enable)
print ("Plant deactivated")
def process(self, dt=1):
if not self.heater.isRemoteEnable():
return
isOn = self.isOn
self.cycleCounter += dt
if self.cycleCounter >= self.cycleTime:
self.cycleCounter -= self.cycleTime
isOn = 0
if self.cycleCounter >= (self.cycleTime * (1-self.dutyCycle)):
if not isOn:
isOn = 1
if self.isOn != isOn:
if isOn:
self.heater.setSwitch(True)
else:
self.heater.setSwitch(False)
self.isOn = isOn
def setPower(self, power_w):
self.P = power_w
self.heater.setPowerWatts(max(500, power_w))
self.dutyCycle = min(1, power_w / 500)
def getPower(self):
return self.heater.getPowerWatts()
def getTemperature(self):
return self.tempsensor.temperature()