- better logging of drivers

git-svn-id: http://moon:8086/svn/projects/HendiControl@363 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
2020-04-19 16:05:53 +00:00
parent b51e2c222d
commit 95afea668f
6 changed files with 48 additions and 22 deletions
+7 -3
View File
@@ -1,8 +1,12 @@
import time
import abc import abc
import logging
class AStirrer(abc.ABC): class AStirrer(abc.ABC):
@abc.abstractmethod
def name(self):
return ""
def __init__(self, dt): def __init__(self, dt):
self.dt = dt self.dt = dt
self.speed = 0 self.speed = 0
@@ -12,8 +16,8 @@ class AStirrer(abc.ABC):
self.isOn = 1 self.isOn = 1
def log(self, s): def log(self, s):
now = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()) d = {'user': self.name()}
print("{}: {}".format(now, s)) logging.info ("{}".format(s), extra=d)
def process(self): def process(self):
isOn = self.isOn isOn = self.isOn
+6 -4
View File
@@ -1,13 +1,15 @@
import time
import abc import abc
import logging
class ATemperatureSensor(abc.ABC): class ATemperatureSensor(abc.ABC):
def __init__(self, name): def log(self, s):
self.name d = {'user': self.name()}
logging.info ("{}".format(s), extra=d)
@abc.abstractmethod
def name(self): def name(self):
return self.name return ""
@abc.abstractmethod @abc.abstractmethod
def temperature(self): def temperature(self):
+8 -2
View File
@@ -1,11 +1,13 @@
#!/usr/bin/python3 #!/usr/bin/python3
import logging
import argparse import argparse
import signal import signal
import json import json
from controller import Controller, commands from controller import Controller, commands
from mass import Mass from mass import Mass
from stirrer import Stirrer from stirrer import Stirrer
#from pololu1376 import Pololu1376 from pololu1376 import Pololu1376
from plant import Plant
from matplotlib.pyplot import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show, subplot from matplotlib.pyplot import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show, subplot
@@ -49,6 +51,10 @@ def results_plot(self):
if __name__ == '__main__': 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 = argparse.ArgumentParser(description='Brew some beer.')
parser.add_argument('--receipe', help='the name of the receipe') parser.add_argument('--receipe', help='the name of the receipe')
parser.add_argument('--config', help='the name of the configuration file') parser.add_argument('--config', help='the name of the configuration file')
@@ -93,7 +99,7 @@ if __name__ == '__main__':
configJson = json.load(fp) configJson = json.load(fp)
plant_class = globals()[configJson["Controller"]['plant_name']] plant_class = globals()[configJson["Controller"]['plant_name']]
plant = plant_class(configJson["WaterSim"]) plant = plant_class()
ruehrer_class = globals()[configJson["Controller"]['stirrer_name']] ruehrer_class = globals()[configJson["Controller"]['stirrer_name']]
ruehrer = ruehrer_class(configJson["Stirrer"]) ruehrer = ruehrer_class(configJson["Stirrer"])
+15 -6
View File
@@ -4,8 +4,18 @@ import time
import serial import serial
import sys import sys
import numpy as np import numpy as np
import logging
class HendiCtrl(): class HendiCtrl():
def name(self):
return "HendiCtrl"
def log(self, s):
d = {'user': self.name()}
logging.info ("{}".format(s), extra=d)
def __init__(self, port, baudrate): def __init__(self, port, baudrate):
self.ser = serial.Serial(port, baudrate) self.ser = serial.Serial(port, baudrate)
try: try:
@@ -17,8 +27,8 @@ class HendiCtrl():
self.ser.timeout = 1.000 self.ser.timeout = 1.000
self.prompt = b':' self.prompt = b':'
self.caps = { self.caps = {
"name" : self.getSoftwareIdentifier(), "sw_id" : self.getSoftwareIdentifier(),
"ver" : self.getSoftwareVersion(), "sw_ver" : self.getSoftwareVersion(),
"pwr_watts_min" : 500, "pwr_watts_min" : 500,
"pwr_watts_max" : 3500, "pwr_watts_max" : 3500,
"pwr_watts_step" : 100, "pwr_watts_step" : 100,
@@ -29,7 +39,9 @@ class HendiCtrl():
digits = [4092, 3840, 3700, 3440, 3300, 3060, 3000, 2930, 2860, 2780, 2640, 2510, 2430, 2360, 2190, 2130, 2030, 1980, 1880, 1730, 1630, 1560, 1480, 1400, 1240, 1150, 1150, 1080, 920, 740, 670] digits = [4092, 3840, 3700, 3440, 3300, 3060, 3000, 2930, 2860, 2780, 2640, 2510, 2430, 2360, 2190, 2130, 2030, 1980, 1880, 1730, 1630, 1560, 1480, 1400, 1240, 1150, 1150, 1080, 920, 740, 670]
self.poly_w2d = np.polyfit(powers, digits, 5) self.poly_w2d = np.polyfit(powers, digits, 5)
self.poly_d2w = np.polyfit(digits, powers, 5) self.poly_d2w = np.polyfit(digits, powers, 5)
self.name = self.getSoftwareIdentifier() self.sw_id = self.getSoftwareIdentifier()
self.sw_ver = self.getSoftwareVersion()
self.log("Create {}, Version {}".format(self.sw_id, self.sw_ver))
def toDigits(self, power_watts): def toDigits(self, power_watts):
return np.polyval(self.poly_w2d, float(power_watts)) return np.polyval(self.poly_w2d, float(power_watts))
@@ -103,9 +115,6 @@ class HendiCtrl():
rsp = self.__read() rsp = self.__read()
if "OK" in rsp[0]: if "OK" in rsp[0]:
return rsp[1] return rsp[1]
# print("{}: Command : {}".format(self.name), req)
# print("{}: Response: {}".format(self.name), rsp)
# print("{}: Received error!".format(self.name))
return None return None
def getCapabilties(self): def getCapabilties(self):
+4 -3
View File
@@ -1,14 +1,14 @@
#!/usr/bin/python3 #!/usr/bin/python3
import time import time
import spidev import spidev
from atemperatureSensor import ATemperatureSensor from atemperatureSensor import ATemperatureSensor
class Max31865(ATemperatureSensor): class Max31865(ATemperatureSensor):
def __init__(self): def name(self):
super(Max31865, self).__init__('Max31865') return "TemperatureSensor"
def __init__(self):
# Open SPI bus # Open SPI bus
self.spi = spidev.SpiDev() self.spi = spidev.SpiDev()
self.spi.open(0, 0) self.spi.open(0, 0)
@@ -18,6 +18,7 @@ class Max31865(ATemperatureSensor):
self.write_reg(0x00, 0xA3) self.write_reg(0x00, 0xA3)
time.sleep(0.100) time.sleep(0.100)
self.digits = 0 self.digits = 0
self.log("Create Max31865")
def read_reg(self, addr): def read_reg(self, addr):
reg = self.spi.xfer([addr, 0xFF]) reg = self.spi.xfer([addr, 0xFF])
+8 -4
View File
@@ -5,6 +5,9 @@ import serial
class Pololu1376(AStirrer): class Pololu1376(AStirrer):
def name(self):
return "Stirrer"
def __init__(self, params): def __init__(self, params):
super(Pololu1376, self).__init__(params["dt"]) super(Pololu1376, self).__init__(params["dt"])
self.isMasterOn = 0 self.isMasterOn = 0
@@ -20,7 +23,8 @@ class Pololu1376(AStirrer):
self.ser.open() self.ser.open()
self.ser_send('V') self.ser_send('V')
print(self.ser_recv()) self.ser_recv()
self.log("Create Pololu1376")
def ser_send(self, cmd): def ser_send(self, cmd):
self.ser.write((cmd + '\r\n').encode()) self.ser.write((cmd + '\r\n').encode())
@@ -36,19 +40,19 @@ class Pololu1376(AStirrer):
def activate(self): def activate(self):
if self.isMasterOn == 0: if self.isMasterOn == 0:
self.log("Stirrer: switched On") self.log("switched On")
self.isMasterOn = 1 self.isMasterOn = 1
self.ser_send("go") self.ser_send("go")
def deactivate(self): def deactivate(self):
if self.isMasterOn == 1: if self.isMasterOn == 1:
self.log("Stirrer: switched Off") self.log("switched Off")
self.isMasterOn = 0 self.isMasterOn = 0
self.ser_send("x") self.ser_send("x")
def onSetSpeed(self, speed): def onSetSpeed(self, speed):
self.ser_send("F" + str(speed) + "%") self.ser_send("F" + str(speed) + "%")
self.log("Stirrer: Set speed to {} %".format(speed)) self.log("Set speed to {} %".format(speed))
if __name__ == '__main__': if __name__ == '__main__':