From f6394e9e7a2f127dc135f1db30680195a88f468b Mon Sep 17 00:00:00 2001 From: jens Date: Sat, 9 Oct 2021 10:52:35 +0200 Subject: [PATCH] - refactored --- components/pid/temp_controller.py | 22 +++++++++++++--------- components/pid/temp_controller_smith.py | 8 +++++--- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index b88c0b4..0f699f0 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -100,21 +100,22 @@ class TempController(APid): # Process state state_next = self.state if self.state == States.IDLE: - self.pid_rate.reset() - if diff > THRESH_IDLE_HEAT: + if diff >= THRESH_IDLE_HEAT: state_next = States.HEAT - elif diff > -THRESH_IDLE_HOLD: + self.pid_rate.reset() + elif diff >= -THRESH_IDLE_HOLD: state_next = States.HOLD + self.pid_rate.reset() elif self.state == States.HOLD: - self.pid_rate.reset() - if diff > THRESH_HOLD_HEAT: + if diff >= THRESH_HOLD_HEAT: state_next = States.HEAT - elif diff < -THRESH_HOLD_IDLE: + self.pid_rate.reset() + elif diff <= -THRESH_HOLD_IDLE: state_next = States.IDLE elif self.state == States.HEAT: - if diff < -THRESH_HEAT_IDLE: + if diff <= -THRESH_HEAT_IDLE: state_next = States.IDLE - elif diff < THRESH_HEAT_HOLD: + elif diff <= THRESH_HEAT_HOLD: state_next = States.HOLD self.pid_hold.reset() @@ -126,7 +127,10 @@ class TempController(APid): self.pid_hold.process(theta_err, -self.theta_ist) self.pid_rate.process(heatrate_err, -self.heatrate_ist) - self.y = self.pid_rate.get_y() + if self.state == States.IDLE: + self.y = 0 + else: + self.y = self.pid_rate.get_y() def get_power(self): return self.y diff --git a/components/pid/temp_controller_smith.py b/components/pid/temp_controller_smith.py index 2531b85..533bfe9 100644 --- a/components/pid/temp_controller_smith.py +++ b/components/pid/temp_controller_smith.py @@ -144,12 +144,14 @@ class TempController(APid): self.pid_hold.process(theta_err, -self.theta_ist) self.pid_rate.process(heatrate_err, -self.heatrate_ist) - self.y = self.pid_rate.get_y() + if self.state == States.IDLE: + self.y = 0 + else: + self.y = self.pid_rate.get_y() + self.model.set_power(max(0, 250 + 3500 * self.y)) - self.model.set_power(max(0, 250 + 3500 * self.y)) self.model.process() - def get_power(self): return self.y