diff --git a/Control/brewpi/brewpi.py b/Control/brewpi/brewpi.py index b5d887d..c5827c9 100755 --- a/Control/brewpi/brewpi.py +++ b/Control/brewpi/brewpi.py @@ -58,14 +58,11 @@ if __name__ == '__main__': ablauf.pause() if signum == signal.SIGCONT: ablauf.cont() - if signum == signal.SIGHUP: - ablauf.restart() # Set the signal handler and a 5-second alarm signal.signal(signal.SIGABRT, handler) signal.signal(signal.SIGINT, handler) signal.signal(signal.SIGCONT, handler) - signal.signal(signal.SIGHUP, handler) fp = open("brewpi.json") configJson = json.load(fp) diff --git a/Control/brewpi/controller.py b/Control/brewpi/controller.py index 7e8092c..075e4f5 100644 --- a/Control/brewpi/controller.py +++ b/Control/brewpi/controller.py @@ -10,7 +10,6 @@ from timer import Timer, TimerManager, TimerListener ovenStates = Enum('ovenStates', 'NOP HEAT HOLD') -controllerStates = Enum('controllerStates', 'ACQU TRACK') class Controller(TimerListener): @@ -19,7 +18,6 @@ class Controller(TimerListener): print(json.dumps({'Controller': params}, indent=4, sort_keys=True)) self.sim_warp_factor = params['sim_warp_factor'] self.ovenState = ovenStates.NOP - self.controllerState = controllerStates.ACQU self.plant = plant self.stirrer = stirrer self.dt = params['dt'] @@ -42,10 +40,7 @@ class Controller(TimerListener): self.time = 0 self.report_interval = 1.0 self.thread = None - self.rast_abort = False self.receipe_sema = threading.Semaphore(0) - self.is_pause = False - self.is_restart = False self.receipe = None self.theta_sm = Smoother(1.0) self.heatrate_sm = Smoother(0.01) @@ -55,7 +50,6 @@ class Controller(TimerListener): self.kalman = Kalman(params['kalman']) self.sensor_dt = params['kalman']['dt'] self.timerMgr = TimerManager() - self.rastTimer = Timer("Rast", self) self.sensorTimer = Timer("Sensor", self) self.plantTimer = Timer("Plant", self) @@ -112,7 +106,6 @@ class Controller(TimerListener): def start(self, recipe): - self.is_pause = False self.receipe = recipe print(json.dumps({recipe['Name'] : recipe}, indent=4, sort_keys=True)) @@ -120,34 +113,24 @@ class Controller(TimerListener): self.plantTimer.start(1/self.sim_warp_factor) self.reportTimer.start(self.report_interval) self.rastTimer.start(self.dt/self.sim_warp_factor) + self.rast_running = False self.thread = threading.Thread(target=self.receipe_run, args=(recipe,)) self.thread.start() def stop(self): if self.thread != None: - self.rast_abort = True + self.receipe = None self.thread.join() self.thread = None - self.rast_abort = False - self.receipe = None - - def restart(self): - receipe = self.receipe - self.is_restart = True - self.stop() - self.start(receipe) - self.is_restart = False def pause(self): if self.thread != None: - self.is_pause = True - self.stirrer.deactivate() - self.plant.activate(False) + self.ovenState = ovenStates.HOLD def cont(self): if self.thread != None: - self.is_pause = False + self.ovenState = ovenStates.NOP def wait_finished(self): self.receipe_sema.acquire() @@ -172,7 +155,7 @@ class Controller(TimerListener): rasten.append(None) rast_count = 0 self.timer_ist = 0 - while(not self.rast_abort): + while(self.receipe is not None): self.timerMgr.process() if self.rastTimer.isElapsed(): rast = rasten[rast_count] @@ -183,12 +166,10 @@ class Controller(TimerListener): self.timer_ist = 0 else: break - self.rast_running = True waut = self.timerMgr.getMinTimeout() time.sleep(waut) - self.rast_running = False # Stirrer and plant self.stirrer.deactivate() self.plant.activate(False) @@ -209,7 +190,6 @@ class Controller(TimerListener): # ------------------------------ # The loop # ------------------------------ - controllerStateNext = self.controllerState ovenStateNext = self.ovenState # ----------------------------------------- @@ -231,10 +211,6 @@ class Controller(TimerListener): self.log("Set rast timer to {:0.1f} min.".format(timer_soll/60)) self.timer_ist = timer_soll - if self.ovenState == ovenStates.HOLD: - if self.timer_ist == 0: - ovenStateNext = ovenStates.NOP - if self.ovenState != ovenStates.NOP: self.pid_hold.process(self.dt, self.params['Hold']['Pid'], ctrl_theta_err) self.pid_rate.process(self.dt, self.params['Heat']['Pid'], ctrl_heatrate_err) @@ -261,6 +237,17 @@ class Controller(TimerListener): self.error_v = np.append(self.error_v, ctrl_theta_err) self.power_soll = power_soll + self.time += self.dt + + if self.timer_ist > 0: + self.timer_ist -= self.dt + else: + self.timer_ist = 0 + if self.ovenState == ovenStates.HOLD: + if self.timer_ist == 0: + if not rast["waitForUser"]: + ovenStateNext = ovenStates.NOP + # ----------------------------------------- if ovenStateNext != self.ovenState: self.log("{} -> {}".format(self.ovenState, ovenStateNext)) @@ -276,17 +263,7 @@ class Controller(TimerListener): self.stirrer.setSpeed(self.stirrSpeedRast) self.stirrer.setDutyCycle(self.stirrDutyRast) - if controllerStateNext != self.controllerState: - self.log("{} -> {}".format(self.controllerState, controllerStateNext)) - - self.ovenState = ovenStateNext - self.controllerState = controllerStateNext # ------------------------------ - self.time += self.dt - - if self.timer_ist > 0: - self.timer_ist -= self.dt - else: - self.timer_ist = 0 - + self.rast_running = True + self.ovenState = ovenStateNext return self.ovenState == ovenStates.NOP diff --git a/Control/brewpi/pid.py b/Control/brewpi/pid.py index 5df85d2..deea17a 100644 --- a/Control/brewpi/pid.py +++ b/Control/brewpi/pid.py @@ -10,7 +10,7 @@ class Pid(): self.xd = 0 # Auto windup - self.y_min = 0.0 + self.y_min = -1.0 self.y_max = 1.0 # Output