Files
HendiControlFirmware/Control/brewpi/brewpi.py
T
jens 95afea668f - better logging of drivers
git-svn-id: http://moon:8086/svn/projects/HendiControl@363 fda53097-d464-4ada-af97-ba876c37ca34
2020-04-19 16:05:53 +00:00

118 lines
2.9 KiB
Python
Executable File

#!/usr/bin/python3
import logging
import argparse
import signal
import json
from controller import Controller, commands
from mass import Mass
from stirrer import Stirrer
from pololu1376 import Pololu1376
from plant import Plant
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__':
logging.getLogger().setLevel(logging.INFO)
FORMAT = '%(asctime)-15s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
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()
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.")