- refactored
This commit is contained in:
@@ -93,10 +93,10 @@ class HeaterTask(ATask):
|
||||
|
||||
while True:
|
||||
if self.power_soll < self.heater.get_power_min():
|
||||
self.heater.setPower(self.heater.get_power_min())
|
||||
self.heater.set_power(self.heater.get_power_min())
|
||||
self.heater.activate(False)
|
||||
else:
|
||||
self.heater.setPower(self.power_soll)
|
||||
self.heater.set_power(self.power_soll)
|
||||
self.heater.activate(True)
|
||||
|
||||
on_count = pulse_period_count
|
||||
@@ -262,7 +262,7 @@ if __name__ == '__main__':
|
||||
|
||||
# Heater
|
||||
heater = HeaterFactory.create("sim")
|
||||
heater.set_on_changed("power_eff", ChangedFloat(pot.setPower, 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"))
|
||||
taskmgr.add(heater_task)
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ class StirrerFactory:
|
||||
@staticmethod
|
||||
def create(name, dt):
|
||||
if "sim" in name:
|
||||
from components.actor.stirrer_sim import Stirrer_sim
|
||||
return Stirrer_sim(dt)
|
||||
from components.actor.stirrersim import StirrerSim
|
||||
return StirrerSim(dt)
|
||||
elif "1376" in name:
|
||||
from components.actor.stirrer_pololu1376 import Stirrer_pololu1376
|
||||
return Stirrer_pololu1376(dt, '/dev/ttyUSB0', 115200)
|
||||
from components.actor.stirrerpololu1376 import StirrerPololu1376
|
||||
return StirrerPololu1376(dt, '/dev/ttyUSB0', 115200)
|
||||
|
||||
@@ -33,9 +33,9 @@ class HeaterHendi(AHeater):
|
||||
power_eff = self.power_set if self.is_active else 0
|
||||
self.hendi.setPowerWatts(power_eff)
|
||||
|
||||
def setPower(self, power):
|
||||
def set_power(self, power):
|
||||
self.power_set = max(self.get_power_min(), min(self.get_power_max(), power))
|
||||
|
||||
def getPower(self):
|
||||
def get_power(self):
|
||||
result = self.hendi.getPowerWatts()
|
||||
return result
|
||||
|
||||
@@ -23,8 +23,8 @@ class HeaterSim(AHeater):
|
||||
def process(self):
|
||||
self.power_eff = self.power_set if self.is_active else 0
|
||||
|
||||
def setPower(self, power):
|
||||
def set_power(self, power):
|
||||
self.power_set = max(self.get_power_min(), min(self.get_power_max(), power))
|
||||
|
||||
def getPower(self):
|
||||
def get_power(self):
|
||||
return self.power_eff
|
||||
|
||||
@@ -3,12 +3,12 @@ import time
|
||||
import serial
|
||||
|
||||
|
||||
class Stirrer_pololu1376(AStirrer):
|
||||
class StirrerPololu1376(AStirrer):
|
||||
def name(self):
|
||||
return "Pololu1376"
|
||||
|
||||
def __init__(self, dt, port, baudrate):
|
||||
super(Stirrer_pololu1376, self).__init__(dt)
|
||||
super(StirrerPololu1376, self).__init__(dt)
|
||||
self.isMasterOn = 0
|
||||
|
||||
self.ser_speed = baudrate
|
||||
@@ -17,7 +17,7 @@ class Stirrer_pololu1376(AStirrer):
|
||||
self.ser.set_output_flow_control(False)
|
||||
try:
|
||||
self.ser.open()
|
||||
except:
|
||||
except serial.SerialException:
|
||||
self.ser.close()
|
||||
self.ser.open()
|
||||
|
||||
@@ -28,10 +28,10 @@ class Stirrer_pololu1376(AStirrer):
|
||||
self.ser.write((cmd + '\r\n').encode())
|
||||
|
||||
def ser_recv(self):
|
||||
s = self.ser.readline().decode("utf-8").replace("\n", '').replace("\r", '')
|
||||
return s
|
||||
data = self.ser.readline().decode("utf-8").replace("\n", '').replace("\r", '')
|
||||
return data
|
||||
|
||||
def getSpeed(self):
|
||||
def get_speed(self):
|
||||
if self.isOn and self.is_activated():
|
||||
return self.speed
|
||||
return 0
|
||||
@@ -40,33 +40,33 @@ class Stirrer_pololu1376(AStirrer):
|
||||
self.ser_send("go")
|
||||
print("on_activate {}".format(enable))
|
||||
|
||||
def onSetSpeed(self, speed):
|
||||
def on_set_speed(self, speed):
|
||||
self.ser_send("F" + str(speed) + "%")
|
||||
print("Set speed to {} %".format(speed))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
s = Stirrer_pololu1376(dt=1.0, port="/dev/ttyACM0", baudrate=115200)
|
||||
s = StirrerPololu1376(dt=1.0, port="/dev/ttyACM0", baudrate=115200)
|
||||
s.activate(True)
|
||||
|
||||
print ("Set some speeds")
|
||||
s.setSpeed(50)
|
||||
print("Set some speeds")
|
||||
s.set_speed(50)
|
||||
time.sleep(2)
|
||||
s.setSpeed(20)
|
||||
s.set_speed(20)
|
||||
time.sleep(2)
|
||||
s.setSpeed(50)
|
||||
s.set_speed(50)
|
||||
time.sleep(2)
|
||||
|
||||
print ("Pulsed operation, duty cycle = 50%")
|
||||
s.setDutyCycle(0.5)
|
||||
s.setCycleTime(10)
|
||||
print("Pulsed operation, duty cycle = 50%")
|
||||
s.set_duty_cycle(0.5)
|
||||
s.set_cycle_time(10)
|
||||
for i in range(1, 30):
|
||||
s.process()
|
||||
time.sleep(1)
|
||||
|
||||
print ("Pulsed operation, duty cycle = 20%")
|
||||
s.setDutyCycle(0.2)
|
||||
s.setCycleTime(10)
|
||||
print("Pulsed operation, duty cycle = 20%")
|
||||
s.set_duty_cycle(0.2)
|
||||
s.set_cycle_time(10)
|
||||
for i in range(1, 30):
|
||||
s.process()
|
||||
time.sleep(1)
|
||||
@@ -2,12 +2,12 @@ from components import AStirrer
|
||||
import time
|
||||
|
||||
|
||||
class Stirrer_sim(AStirrer):
|
||||
class StirrerSim(AStirrer):
|
||||
def name(self):
|
||||
return "FakeStirrer"
|
||||
|
||||
def __init__(self, dt):
|
||||
super(Stirrer_sim, self).__init__(dt)
|
||||
super(StirrerSim, self).__init__(dt)
|
||||
|
||||
def __del__(self):
|
||||
self.activate(False)
|
||||
@@ -15,37 +15,37 @@ class Stirrer_sim(AStirrer):
|
||||
def on_activate(self, enable):
|
||||
print("on_activate {}".format(enable))
|
||||
|
||||
def getSpeed(self):
|
||||
def get_speed(self):
|
||||
if self.isOn and self.is_activated():
|
||||
return self.speed
|
||||
return 0
|
||||
|
||||
def onSetSpeed(self, speed):
|
||||
def on_set_speed(self, speed):
|
||||
print("Set speed to {} %".format(speed))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
s = Stirrer_sim(1.0)
|
||||
s = StirrerSim(1.0)
|
||||
s.activate(True)
|
||||
|
||||
print ("Set some speeds")
|
||||
s.setSpeed(50)
|
||||
print("Set some speeds")
|
||||
s.set_speed(50)
|
||||
time.sleep(2)
|
||||
s.setSpeed(100)
|
||||
s.set_speed(100)
|
||||
time.sleep(2)
|
||||
s.setSpeed(50)
|
||||
s.set_speed(50)
|
||||
time.sleep(2)
|
||||
|
||||
print ("Pulsed operation, duty cycle = 50%")
|
||||
s.setDutyCycle(0.5)
|
||||
s.setCycleTime(10)
|
||||
print("Pulsed operation, duty cycle = 50%")
|
||||
s.set_duty_cycle(0.5)
|
||||
s.set_cycle_time(10)
|
||||
for i in range(1, 30):
|
||||
s.process()
|
||||
time.sleep(1)
|
||||
|
||||
print ("Pulsed operation, duty cycle = 20%")
|
||||
s.setDutyCycle(0.2)
|
||||
s.setCycleTime(10)
|
||||
print("Pulsed operation, duty cycle = 20%")
|
||||
s.set_duty_cycle(0.2)
|
||||
s.set_cycle_time(10)
|
||||
for i in range(1, 30):
|
||||
s.process()
|
||||
time.sleep(1)
|
||||
@@ -27,9 +27,9 @@ class AHeater(AttributeChange):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def setPower(self, power):
|
||||
def set_power(self, power):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def getPower(self):
|
||||
def get_power(self):
|
||||
return None
|
||||
|
||||
@@ -15,13 +15,13 @@ class APlant(AttributeChange):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def setPower(self, power):
|
||||
def set_power(self, power):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def getPower(self):
|
||||
def get_power(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def getTemperature(self):
|
||||
def get_temperature(self):
|
||||
return None
|
||||
|
||||
@@ -34,21 +34,25 @@ class AStirrer:
|
||||
|
||||
self.isOn = isOn
|
||||
|
||||
def setSpeed(self, speed):
|
||||
def set_speed(self, speed):
|
||||
self.speed = speed
|
||||
if self.isOn or self.dutyCycle == 1:
|
||||
self.onSetSpeed(speed)
|
||||
self.on_set_speed(speed)
|
||||
|
||||
def setCycleTime(self, time):
|
||||
def set_cycle_time(self, time):
|
||||
self.cycleTime = time
|
||||
|
||||
def setDutyCycle(self, dutyCycle):
|
||||
def set_duty_cycle(self, dutyCycle):
|
||||
self.dutyCycle = dutyCycle
|
||||
|
||||
@abc.abstractmethod
|
||||
def getSpeed(self):
|
||||
def get_speed(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def on_set_speed(self, speed):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def on_activate(self, enable):
|
||||
pass
|
||||
|
||||
@@ -167,13 +167,13 @@ if __name__ == '__main__':
|
||||
hold_counter -= 1
|
||||
ctrl.process()
|
||||
plant.process()
|
||||
temp_ist = plant.getTemperature() + 0.0*np.random.randn()
|
||||
temp_ist = plant.get_temperature() + 0.0 * np.random.randn()
|
||||
ctrl.set_theta_ist(temp_ist)
|
||||
|
||||
y = 3500*ctrl.get_power()
|
||||
power = max(0, 250+y)
|
||||
plant.setPower(power)
|
||||
fb = plant.getPower()
|
||||
plant.set_power(power)
|
||||
fb = plant.get_power()
|
||||
if abs(temp_ist - temp_soll) < 0.1:
|
||||
hold = True
|
||||
|
||||
|
||||
@@ -35,11 +35,11 @@ class Pot(APlant):
|
||||
leak = 1/self.M * self.L * (self.theta_amb - self.temp)/self.theta_amb
|
||||
self.temp += (self.power_actual / (self.M * self.C) + leak) * self.dt
|
||||
|
||||
def setPower(self, power):
|
||||
def set_power(self, power):
|
||||
self.power_set = power
|
||||
|
||||
def getPower(self):
|
||||
def get_power(self):
|
||||
return round(self.power_actual, 1)
|
||||
|
||||
def getTemperature(self):
|
||||
def get_temperature(self):
|
||||
return self.temp
|
||||
|
||||
Reference in New Issue
Block a user