- added pause, continue, restart of receipe

- added signal handler for controlling the controller

git-svn-id: http://moon:8086/svn/projects/HendiControl@148 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
2019-03-27 21:51:22 +00:00
parent e74e5fd6f8
commit ce0cb93c14
2 changed files with 52 additions and 5 deletions
+19 -1
View File
@@ -1,6 +1,6 @@
#!/usr/bin/python3
import time
import signal
import json
from controller import Controller
from mass import Mass
@@ -38,6 +38,24 @@ def results_plot(self):
if __name__ == '__main__':
def handler(signum, frame):
print('Signal handler called with signal', signum)
if signum == signal.SIGABRT:
ablauf.stop()
if signum == signal.SIGINT:
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)
+33 -4
View File
@@ -36,6 +36,9 @@ class Controller():
self.thread = None
self.rast_abort = False
self.receipe_sema = threading.Semaphore(0)
self.is_pause = False
self.is_restart = False
self.receipe = None
def log(self, s):
now = time.time()
@@ -55,6 +58,8 @@ class Controller():
self.report_last_time = now
def start(self, recipe):
self.is_pause = False
self.receipe = recipe
print(json.dumps({recipe['Name'] : recipe}, indent=4, sort_keys=True))
self.thread = threading.Thread(target=self.receipe_run, args=(recipe,))
@@ -66,6 +71,22 @@ class Controller():
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
def cont(self):
if self.thread != None:
self.is_pause = False
def wait_finished(self):
self.receipe_sema.acquire()
@@ -83,8 +104,11 @@ class Controller():
for rast in recipe['Rasten']:
self.rast(rast)
if self.rast_abort:
break
self.receipe_sema.release()
if self.rast_abort and not self.is_restart:
self.receipe_sema.release()
def rast(self, rast):
@@ -109,8 +133,6 @@ class Controller():
theta_err_sm = Smoother(0.5)
heatrate_err_sm = Smoother(0.5)
while(doLoop):
if self.rast_abort:
break
time_start = time.time()
@@ -215,6 +237,13 @@ class Controller():
self.report()
time.sleep(time_to_sleep)
while(True):
time.sleep(time_to_sleep)
if self.is_pause == False:
break
if self.rast_abort:
break
if self.rast_abort:
break
self.stirrer.deactivate()