- better logging of drivers
git-svn-id: http://moon:8086/svn/projects/HendiControl@363 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
import time
|
||||
import abc
|
||||
import logging
|
||||
|
||||
|
||||
class AStirrer(abc.ABC):
|
||||
@abc.abstractmethod
|
||||
def name(self):
|
||||
return ""
|
||||
|
||||
def __init__(self, dt):
|
||||
self.dt = dt
|
||||
self.speed = 0
|
||||
@@ -12,8 +16,8 @@ class AStirrer(abc.ABC):
|
||||
self.isOn = 1
|
||||
|
||||
def log(self, s):
|
||||
now = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())
|
||||
print("{}: {}".format(now, s))
|
||||
d = {'user': self.name()}
|
||||
logging.info ("{}".format(s), extra=d)
|
||||
|
||||
def process(self):
|
||||
isOn = self.isOn
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
import time
|
||||
import abc
|
||||
import logging
|
||||
|
||||
|
||||
class ATemperatureSensor(abc.ABC):
|
||||
def __init__(self, name):
|
||||
self.name
|
||||
def log(self, s):
|
||||
d = {'user': self.name()}
|
||||
logging.info ("{}".format(s), extra=d)
|
||||
|
||||
@abc.abstractmethod
|
||||
def name(self):
|
||||
return self.name
|
||||
return ""
|
||||
|
||||
@abc.abstractmethod
|
||||
def temperature(self):
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
#!/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 pololu1376 import Pololu1376
|
||||
from plant import Plant
|
||||
|
||||
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__':
|
||||
|
||||
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')
|
||||
@@ -93,7 +99,7 @@ if __name__ == '__main__':
|
||||
configJson = json.load(fp)
|
||||
|
||||
plant_class = globals()[configJson["Controller"]['plant_name']]
|
||||
plant = plant_class(configJson["WaterSim"])
|
||||
plant = plant_class()
|
||||
ruehrer_class = globals()[configJson["Controller"]['stirrer_name']]
|
||||
ruehrer = ruehrer_class(configJson["Stirrer"])
|
||||
|
||||
|
||||
@@ -4,8 +4,18 @@ import time
|
||||
import serial
|
||||
import sys
|
||||
import numpy as np
|
||||
import logging
|
||||
|
||||
|
||||
|
||||
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):
|
||||
self.ser = serial.Serial(port, baudrate)
|
||||
try:
|
||||
@@ -17,8 +27,8 @@ class HendiCtrl():
|
||||
self.ser.timeout = 1.000
|
||||
self.prompt = b':'
|
||||
self.caps = {
|
||||
"name" : self.getSoftwareIdentifier(),
|
||||
"ver" : self.getSoftwareVersion(),
|
||||
"sw_id" : self.getSoftwareIdentifier(),
|
||||
"sw_ver" : self.getSoftwareVersion(),
|
||||
"pwr_watts_min" : 500,
|
||||
"pwr_watts_max" : 3500,
|
||||
"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]
|
||||
self.poly_w2d = np.polyfit(powers, digits, 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):
|
||||
return np.polyval(self.poly_w2d, float(power_watts))
|
||||
@@ -103,9 +115,6 @@ class HendiCtrl():
|
||||
rsp = self.__read()
|
||||
if "OK" in rsp[0]:
|
||||
return rsp[1]
|
||||
# print("{}: Command : {}".format(self.name), req)
|
||||
# print("{}: Response: {}".format(self.name), rsp)
|
||||
# print("{}: Received error!".format(self.name))
|
||||
return None
|
||||
|
||||
def getCapabilties(self):
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import time
|
||||
import spidev
|
||||
from atemperatureSensor import ATemperatureSensor
|
||||
|
||||
|
||||
class Max31865(ATemperatureSensor):
|
||||
def __init__(self):
|
||||
super(Max31865, self).__init__('Max31865')
|
||||
def name(self):
|
||||
return "TemperatureSensor"
|
||||
|
||||
def __init__(self):
|
||||
# Open SPI bus
|
||||
self.spi = spidev.SpiDev()
|
||||
self.spi.open(0, 0)
|
||||
@@ -18,6 +18,7 @@ class Max31865(ATemperatureSensor):
|
||||
self.write_reg(0x00, 0xA3)
|
||||
time.sleep(0.100)
|
||||
self.digits = 0
|
||||
self.log("Create Max31865")
|
||||
|
||||
def read_reg(self, addr):
|
||||
reg = self.spi.xfer([addr, 0xFF])
|
||||
|
||||
@@ -5,6 +5,9 @@ import serial
|
||||
|
||||
|
||||
class Pololu1376(AStirrer):
|
||||
def name(self):
|
||||
return "Stirrer"
|
||||
|
||||
def __init__(self, params):
|
||||
super(Pololu1376, self).__init__(params["dt"])
|
||||
self.isMasterOn = 0
|
||||
@@ -20,7 +23,8 @@ class Pololu1376(AStirrer):
|
||||
self.ser.open()
|
||||
|
||||
self.ser_send('V')
|
||||
print(self.ser_recv())
|
||||
self.ser_recv()
|
||||
self.log("Create Pololu1376")
|
||||
|
||||
def ser_send(self, cmd):
|
||||
self.ser.write((cmd + '\r\n').encode())
|
||||
@@ -36,19 +40,19 @@ class Pololu1376(AStirrer):
|
||||
|
||||
def activate(self):
|
||||
if self.isMasterOn == 0:
|
||||
self.log("Stirrer: switched On")
|
||||
self.log("switched On")
|
||||
self.isMasterOn = 1
|
||||
self.ser_send("go")
|
||||
|
||||
def deactivate(self):
|
||||
if self.isMasterOn == 1:
|
||||
self.log("Stirrer: switched Off")
|
||||
self.log("switched Off")
|
||||
self.isMasterOn = 0
|
||||
self.ser_send("x")
|
||||
|
||||
def onSetSpeed(self, 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__':
|
||||
|
||||
Reference in New Issue
Block a user