- added abstarct PID APid
- added PidFactory - use variable args for factory
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from components.atemperatureSensor import *
|
||||
from components.astirrer import *
|
||||
from components.aheater import *
|
||||
from components.apid import *
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
|
||||
class HeaterFactory:
|
||||
@staticmethod
|
||||
def create(name, dt, params):
|
||||
def create(name, *args, **kwargs):
|
||||
if "sim" in name:
|
||||
from components.actor.heater_sim import HeaterSim
|
||||
return HeaterSim()
|
||||
print (*args)
|
||||
print (**kwargs)
|
||||
return HeaterSim(*args, **kwargs)
|
||||
elif "Hendi" in name:
|
||||
from components.actor.heater_hendi import HeaterHendi
|
||||
return HeaterHendi(params)
|
||||
return HeaterHendi(*args, **kwargs)
|
||||
|
||||
@@ -2,7 +2,7 @@ from components.aheater import AHeater
|
||||
|
||||
|
||||
class HeaterSim(AHeater):
|
||||
def __init__(self):
|
||||
def __init__(self, params):
|
||||
AHeater.__init__(self)
|
||||
self.power_set = 0
|
||||
self.power_eff = 0
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
import abc
|
||||
from utils.value import AttributeChange
|
||||
|
||||
|
||||
class APid(AttributeChange):
|
||||
def __init__(self):
|
||||
AttributeChange.__init__(self)
|
||||
|
||||
@abc.abstractmethod
|
||||
def set_theta_soll(self, value):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def set_heatrate_soll(self, value):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_theta_ist(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_heatrate_ist(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_theta_soll_set(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_theta_soll(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_heatrate_soll_set(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_heatrate_soll(self):
|
||||
return None
|
||||
|
||||
@abc.abstractmethod
|
||||
def process(self):
|
||||
pass
|
||||
@@ -1,3 +1,3 @@
|
||||
from components.pid.pid import *
|
||||
from components.pid.kalman import *
|
||||
from components.pid.temp_controller_smith import *
|
||||
from components.pid.pid_factory import PidFactory
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
class PidFactory:
|
||||
@staticmethod
|
||||
def create(name, *args, **kwargs):
|
||||
if "Normal" in name:
|
||||
from components.pid.temp_controller import TempController
|
||||
return TempController(*args, **kwargs)
|
||||
elif "Smith" in name:
|
||||
from components.pid.temp_controller_smith import TempController
|
||||
return TempController(*args, **kwargs)
|
||||
@@ -1,8 +1,8 @@
|
||||
from components.plant.pot import Pot
|
||||
from matplotlib.pyplot import plot, figure, subplot, grid, show, legend
|
||||
from components.pid import Pid, Kalman
|
||||
from components import APid
|
||||
import numpy as np
|
||||
from utils.value import AttributeChange
|
||||
from enum import Enum
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ class States(Enum):
|
||||
HOLD = 2
|
||||
|
||||
|
||||
class TempController(AttributeChange):
|
||||
class TempController(APid):
|
||||
def __init__(self, dt, params):
|
||||
AttributeChange.__init__(self)
|
||||
APid.__init__(self)
|
||||
self.pid_hold = Pid(dt)
|
||||
self.pid_rate = Pid(dt)
|
||||
self.theta_ist_set = 20
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from components.plant.pot import Pot, Delay
|
||||
from matplotlib.pyplot import plot, figure, subplot, grid, show, legend
|
||||
from components.pid import Pid, Kalman
|
||||
from components import APid
|
||||
import numpy as np
|
||||
from utils.value import AttributeChange
|
||||
from enum import Enum
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ class States(Enum):
|
||||
HOLD = 2
|
||||
|
||||
|
||||
class TempController(AttributeChange):
|
||||
class TempController(APid):
|
||||
def __init__(self, dt, params):
|
||||
AttributeChange.__init__(self)
|
||||
APid.__init__(self)
|
||||
self.pid_hold = Pid(dt)
|
||||
self.pid_rate = Pid(dt)
|
||||
self.theta_ist_set = 20
|
||||
@@ -41,15 +41,33 @@ class TempController(AttributeChange):
|
||||
def set_theta_ist(self, value):
|
||||
self.theta_ist_set = value
|
||||
|
||||
def get_theta_ist(self):
|
||||
return self.theta_ist
|
||||
|
||||
def set_heatrate_ist(self, value):
|
||||
self.heatrate_ist_set = value
|
||||
|
||||
def get_heatrate_ist(self):
|
||||
return self.heatrate_ist
|
||||
|
||||
def set_theta_soll(self, value):
|
||||
self.theta_soll_set = value
|
||||
|
||||
def get_theta_soll(self):
|
||||
return self.theta_soll
|
||||
|
||||
def get_theta_soll_set(self):
|
||||
return self.theta_soll_set
|
||||
|
||||
def set_heatrate_soll(self, value):
|
||||
self.heatrate_soll_set = value
|
||||
|
||||
def get_heatrate_soll(self):
|
||||
return self.heatrate_soll
|
||||
|
||||
def get_heatrate_soll_set(self):
|
||||
return self.heatrate_soll_set
|
||||
|
||||
def process(self):
|
||||
# Process Kalman of Model
|
||||
Z_model = self.kalman_model.process_measurement((self.model.get_temperature_intermediate(), 0), 0.0)
|
||||
|
||||
@@ -6,8 +6,9 @@ class TempSensorSim(ATemperatureSensor):
|
||||
def name(self):
|
||||
return "FakeTemp"
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, temp_offset=0):
|
||||
ATemperatureSensor.__init__(self)
|
||||
self.temp_offset = temp_offset
|
||||
self.temp = 22.37
|
||||
self.temp_set = self.temp
|
||||
self.k_noise = 0.01
|
||||
@@ -16,8 +17,7 @@ class TempSensorSim(ATemperatureSensor):
|
||||
self.temp_set = temp
|
||||
|
||||
def temperature(self):
|
||||
return self.temp_set + self.k_noise * np.random.normal(0, 1) / np.sqrt(12.0)
|
||||
return self.temp_offset + self.temp
|
||||
|
||||
def process(self):
|
||||
temp = self.temperature()
|
||||
self.temp = temp
|
||||
self.temp = self.temp_set + self.k_noise * np.random.normal(0, 1) / np.sqrt(12.0)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import time
|
||||
from components import ATemperatureSensor
|
||||
import spidev
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
class TempSensorFactory:
|
||||
@staticmethod
|
||||
def create(name):
|
||||
def create(name, *args, **kwargs):
|
||||
if "sim" in name:
|
||||
from components.sensor.tempSensorSim import TempSensorSim
|
||||
return TempSensorSim()
|
||||
return TempSensorSim(*args, **kwargs)
|
||||
elif "31865" in name:
|
||||
from components.sensor.tempSensor_max31865 import TempSensor_max31865
|
||||
return TempSensor_max31865(temp_offset=0)
|
||||
return TempSensor_max31865(*args, **kwargs)
|
||||
|
||||
Reference in New Issue
Block a user