- 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 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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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"])
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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])
|
||||||
|
|||||||
@@ -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__':
|
||||||
|
|||||||
Reference in New Issue
Block a user