diff --git a/Control/brewpi/controller.py b/Control/brewpi/controller.py index 510dcab..242f779 100644 --- a/Control/brewpi/controller.py +++ b/Control/brewpi/controller.py @@ -21,6 +21,7 @@ class Controller(): self.dt = params['dt'] self.params = params self.pid = Pid() + self.timer_ist = 0 self.theta_ist = 0 self.heatrate_ist = 0 self.theta_v = np.empty(0) @@ -29,7 +30,7 @@ class Controller(): self.power_v = np.empty(0) self.error_v = np.empty(0) self.time = 0 - self.sim_warp_factor = 10 + self.sim_warp_factor = 100 self.report_interval = 1.0 self.report_last_time = 0 @@ -41,10 +42,13 @@ class Controller(): now = time.time() if (now - self.report_last_time) >= self.report_interval: - self.log("Temp IST = {:0.2f} °C".format(self.theta_ist)) - self.log("Heatrate IST = {:0.2f} °C/min.".format(self.heatrate_ist)) - self.log("Power = {:0.2f} W".format(self.plant.getPower())) - # self.log("theta_err = {:0.2f} °C".format(theta_err)) + self.log("Temp IST = {:0.1f} °C".format(self.theta_ist)) + self.log("Heatrate IST = {:0.1f} °C/min.".format(self.heatrate_ist)) + self.log("Power = {:0.0f} W".format(self.plant.getPower())) + if self.timer_ist > 0: + self.log("Rast remaining : {:0.2f} min.".format(self.timer_ist/60)) + + # self.log("theta_err = {:0.1f} °C".format(theta_err)) self.report_last_time = now def start(self, recipe): @@ -99,8 +103,8 @@ class Controller(): self.log("Target temperature {} °C".format(theta_soll)) # Timer - timer_ist = 0 - timer_soll = 60*rast['time']/self.dt + self.timer_ist = 0 + timer_soll = 60*rast['time'] # ------------------------------ # The loop @@ -140,7 +144,8 @@ class Controller(): pid_thresh_track = 0.5 if (theta_ist + 1.0) >= theta_soll: ovenStateNext = ovenStates.HOLD - timer_ist = 0 + self.log("Enter rast of {} min.".format(timer_soll)) + self.timer_ist = timer_soll if self.ovenState == ovenStates.HOLD: pid_err = theta_err_sm.get_y() @@ -148,8 +153,7 @@ class Controller(): pid_params_track = self.params['Hold']['Track']['Pid'] pid_thresh_acqu = 0.2 pid_thresh_track = 0.5 - timer_ist += self.dt - if timer_ist >= timer_soll: + if self.timer_ist == 0: ovenStateNext = ovenStates.NOP doLoop = False @@ -205,6 +209,11 @@ class Controller(): self.theta_ist = theta_ist self.heatrate_ist = heatrate_ist + if self.timer_ist > 0: + self.timer_ist -= self.dt + else: + self.timer_ist = 0 + self.report() time.sleep(time_to_sleep)