From 63e4115db8e053c135e369140a09857b5741cce5 Mon Sep 17 00:00:00 2001 From: jens Date: Fri, 27 Nov 2020 12:04:45 +0100 Subject: [PATCH] - improved temp controller test --- components/pid/temp_controller.py | 49 ++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index 5e30389..32d6971 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -45,9 +45,9 @@ if __name__ == '__main__': "dt": 1.0, "Hold": { "Pid": { - "kp": 0.4, - "ki": 0.00004, - "kd": 0.0, + "kp": 0.5, + "ki": 0.0, + "kd": 0.5, "rho": 1.0 } }, @@ -64,21 +64,42 @@ if __name__ == '__main__': temp_ist = 0 temp_soll = 20 ctrl = TempController(params) - ctrl.set_theta_ist(temp_ist) - ctrl.set_theta_soll(temp_soll) - t = range(0, 100) _temp_ist = np.empty(0) _temp_soll = np.empty(0) - for i in t: - _temp_ist = np.append(_temp_ist, temp_ist) - _temp_soll = np.append(_temp_soll, temp_soll) - ctrl.process() - y = ctrl.get_power_hold() - temp_ist += round(y, 2) - ctrl.set_theta_ist(temp_ist) + _t = np.empty(0) + a = 0.5 + fb = 0 + rho = 0.001 + temps = [{'Temp': 20, 'Duration': 100}, {'Temp': 40, 'Duration': 100}, {'Temp': 30, 'Duration': 100}] + + t = 0 + for temp in temps: + temp_soll = temp['Temp'] + hold_counter = temp['Duration'] + hold = False + ctrl.set_theta_soll(temp_soll) + + while True: + if hold: + if hold_counter == 0: + break + hold_counter -= 1 + ctrl.process() + y = ctrl.get_power_hold() + fb = (1-a)*fb + a*round(y, 2) + temp_ist += fb + ctrl.set_theta_ist(temp_ist) + if abs(temp_ist - temp_soll) < 0.1: + hold = True + + temp_ist -= rho + _temp_ist = np.append(_temp_ist, temp_ist) + _temp_soll = np.append(_temp_soll, temp_soll) + _t = np.append(_t, t) + t += 1 figure(1) - plot(t, _temp_ist - _temp_soll, 'bx', linewidth=1) + plot(_t, _temp_ist, _t, _temp_soll, 'r-', linewidth=1) grid(True) show()