- 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:
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import time
|
import signal
|
||||||
import json
|
import json
|
||||||
from controller import Controller
|
from controller import Controller
|
||||||
from mass import Mass
|
from mass import Mass
|
||||||
@@ -38,6 +38,24 @@ def results_plot(self):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
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")
|
fp = open("brewpi.json")
|
||||||
configJson = json.load(fp)
|
configJson = json.load(fp)
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ class Controller():
|
|||||||
self.thread = None
|
self.thread = None
|
||||||
self.rast_abort = False
|
self.rast_abort = False
|
||||||
self.receipe_sema = threading.Semaphore(0)
|
self.receipe_sema = threading.Semaphore(0)
|
||||||
|
self.is_pause = False
|
||||||
|
self.is_restart = False
|
||||||
|
self.receipe = None
|
||||||
|
|
||||||
def log(self, s):
|
def log(self, s):
|
||||||
now = time.time()
|
now = time.time()
|
||||||
@@ -55,6 +58,8 @@ class Controller():
|
|||||||
self.report_last_time = now
|
self.report_last_time = now
|
||||||
|
|
||||||
def start(self, recipe):
|
def start(self, recipe):
|
||||||
|
self.is_pause = False
|
||||||
|
self.receipe = recipe
|
||||||
print(json.dumps({recipe['Name'] : recipe}, indent=4, sort_keys=True))
|
print(json.dumps({recipe['Name'] : recipe}, indent=4, sort_keys=True))
|
||||||
|
|
||||||
self.thread = threading.Thread(target=self.receipe_run, args=(recipe,))
|
self.thread = threading.Thread(target=self.receipe_run, args=(recipe,))
|
||||||
@@ -66,6 +71,22 @@ class Controller():
|
|||||||
self.thread.join()
|
self.thread.join()
|
||||||
self.thread = None
|
self.thread = None
|
||||||
self.rast_abort = False
|
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):
|
def wait_finished(self):
|
||||||
self.receipe_sema.acquire()
|
self.receipe_sema.acquire()
|
||||||
@@ -83,8 +104,11 @@ class Controller():
|
|||||||
|
|
||||||
for rast in recipe['Rasten']:
|
for rast in recipe['Rasten']:
|
||||||
self.rast(rast)
|
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):
|
def rast(self, rast):
|
||||||
|
|
||||||
@@ -109,8 +133,6 @@ class Controller():
|
|||||||
theta_err_sm = Smoother(0.5)
|
theta_err_sm = Smoother(0.5)
|
||||||
heatrate_err_sm = Smoother(0.5)
|
heatrate_err_sm = Smoother(0.5)
|
||||||
while(doLoop):
|
while(doLoop):
|
||||||
if self.rast_abort:
|
|
||||||
break
|
|
||||||
|
|
||||||
time_start = time.time()
|
time_start = time.time()
|
||||||
|
|
||||||
@@ -215,6 +237,13 @@ class Controller():
|
|||||||
|
|
||||||
self.report()
|
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()
|
self.stirrer.deactivate()
|
||||||
|
|||||||
Reference in New Issue
Block a user