- added abstarct PID APid

- added PidFactory
- use variable args for factory
This commit is contained in:
jens
2021-10-02 11:10:43 +02:00
parent 7111bfd5e2
commit bf019733b2
15 changed files with 117 additions and 26 deletions
+1
View File
@@ -1,3 +1,4 @@
from components.atemperatureSensor import *
from components.astirrer import *
from components.aheater import *
from components.apid import *
+5 -3
View File
@@ -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)
+1 -1
View File
@@ -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
+43
View File
@@ -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 -1
View File
@@ -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
+11
View File
@@ -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)
+3 -3
View File
@@ -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
+21 -3
View File
@@ -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)
+4 -4
View File
@@ -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 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/python3
#!/usr/bin/env python3
import time
from components import ATemperatureSensor
import spidev
+3 -3
View File
@@ -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)