From b83ec71346ec32d768f4dc34cc210dd9a826f76f Mon Sep 17 00:00:00 2001 From: jens Date: Sat, 9 Oct 2021 10:07:45 +0200 Subject: [PATCH] - refactored --- components/pid/temp_controller.py | 3 +-- components/pid/temp_controller_smith.py | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index 0eaf410..b88c0b4 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -117,7 +117,6 @@ class TempController(APid): elif diff < THRESH_HEAT_HOLD: state_next = States.HOLD self.pid_hold.reset() - self.pid_rate.reset() if state_next != self.state: self.state = state_next @@ -143,7 +142,7 @@ if __name__ == '__main__': "var_R" : 1.0 }, "Hold": { - "kp": 0.5, + "kp": 0.2, "ki": 0.0, "kd": 0.0, "kt": 0.0 diff --git a/components/pid/temp_controller_smith.py b/components/pid/temp_controller_smith.py index 5488c12..2531b85 100644 --- a/components/pid/temp_controller_smith.py +++ b/components/pid/temp_controller_smith.py @@ -117,24 +117,24 @@ 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() - self.pid_rate.reset() if state_next != self.state: self.state = state_next @@ -145,9 +145,11 @@ class TempController(APid): self.pid_rate.process(heatrate_err, -self.heatrate_ist) self.y = self.pid_rate.get_y() + self.model.set_power(max(0, 250 + 3500 * self.y)) self.model.process() + def get_power(self): return self.y @@ -170,7 +172,7 @@ if __name__ == '__main__': "var_R" : 1.0 }, "Hold": { - "kp": 0.50, + "kp": 0.2, "ki": 0.0, "kd": 0.0, "kt": 0.0