Files
HendiControlFirmware/Control/brewpi/brewpi.py
T
jens d3bdc4a550 [BrewPi]
- added command line arguments for receipe and config file
- added receipe "sud_0010"

git-svn-id: http://moon:8086/svn/projects/HendiControl@282 fda53097-d464-4ada-af97-ba876c37ca34
2019-05-03 18:22:28 +00:00

112 lines
2.7 KiB
Python
Executable File

#!/usr/bin/python3
import argparse
import signal
import json
from controller import Controller, commands
from mass import Mass
from stirrer import Stirrer
#from pololu1376 import Pololu1376
from matplotlib.pyplot import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show, subplot
def results_plot(self):
fp = open("results.dat", 'w')
for n in range(0, len(self.time_v)):
d = self.time_v[n]
v1 = self.theta_v[n]
v2 = self.heatrate_v[n]
v3 = self.power_v[n]
v4 = self.error_v[n]
fp.write("{:6.3f} {:6.3f} {:6.3f} {:6.3f} {:6.3f}\n".format(d, v1, v2, v3, v4,))
fp.close()
figure(1)
subplot(4, 1, 1)
plot(self.time_v, self.theta_v, 'r-', linewidth=1)
title('Temperature')
grid(True)
ylabel('°C')
subplot(4, 1, 2)
plot(self.time_v, self.power_heat_v, self.time_v, self.power_hold_v, self.time_v, self.power_v, 'r-', linewidth=1)
title('Power')
grid(True)
ylabel('W')
subplot(4, 1, 3)
plot(self.time_v, self.error_v, 'b-', linewidth=1)
title('Error')
grid(True)
ylabel('°C')
subplot(4, 1, 4)
plot(self.time_v, self.heatrate_v, 'r-', linewidth=1)
title('Heatrate')
grid(True)
ylabel('°C/min')
xlabel('t/min')
show()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Brew some beer.')
parser.add_argument('--receipe', help='the name of the receipe')
parser.add_argument('--config', help='the name of the configuration file')
args = parser.parse_args()
if args.receipe is None:
raise Exception("Invalid receipe")
config = "brewpi.json"
if args.config is not None:
config = args.config
stirr_isOn = False
def handler(signum, frame):
global stirr_isOn
print('Signal handler called with signal', signum)
if signum == signal.SIGINT:
ablauf.command(commands.ABORT)
if signum == signal.SIGSTOP:
ablauf.command(commands.PAUSE)
if signum == signal.SIGUSR1:
ablauf.command(commands.RUN)
if signum == signal.SIGHUP:
if stirr_isOn:
ablauf.command(commands.STIRR_OFF)
stirr_isOn = False
else:
ablauf.command(commands.STIRR_ON)
stirr_isOn = True
# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGABRT, handler)
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGUSR1, handler)
signal.signal(signal.SIGHUP, handler)
fp = open(config)
configJson = json.load(fp)
plant_class = globals()[configJson["Controller"]['plant_name']]
plant = plant_class(configJson["WaterSim"])
ruehrer_class = globals()[configJson["Controller"]['stirrer_name']]
ruehrer = ruehrer_class(configJson["Stirrer"])
ablauf = Controller(configJson["Controller"], plant, ruehrer)
fp = open(args.receipe)
recipeJson = json.load(fp)
ablauf.setRecipe(recipeJson)
ablauf.wait_finished()
results_plot(ablauf)
print ("End of program.")