From eab4e116a5ca37646352f4b1019ab197a40ebd0d Mon Sep 17 00:00:00 2001 From: su530201 <olivier.kaufmann@umons.ac.be> Date: Sun, 9 Apr 2023 19:39:51 +0200 Subject: [PATCH] Adds dummy_mux and dummy_controller; fixes bugs --- config.py | 19 ++++++++++++-- hardware/__init__.py | 2 +- hardware/abstract_hardware.py | 19 +++++++++----- hardware/dummy_controller.py | 11 ++++++++ hardware/dummy_mux.py | 10 ++++++++ hardware/dummy_tx.py | 2 +- hardware/raspberry_pi_3.py | 2 +- logging_setup.py | 2 +- measure.py | 48 ++++++++++++++++++++--------------- test_dummy.py | 14 ++++++++++ 10 files changed, 96 insertions(+), 33 deletions(-) create mode 100644 hardware/dummy_controller.py create mode 100644 hardware/dummy_mux.py create mode 100644 test_dummy.py diff --git a/config.py b/config.py index ff738cad..8fdbb029 100644 --- a/config.py +++ b/config.py @@ -26,7 +26,7 @@ OHMPI_CONFIG = { # 'mcp_board_address': 0x20 } # TODO: add a dictionary with INA models and associated gain values -HARDWARE_CONFIG = { +"""HARDWARE_CONFIG = { 'controller': {'model' : 'raspberry_pi_3' }, 'tx' : {'model' : 'mb_2024_rev_0_0', @@ -44,8 +44,23 @@ HARDWARE_CONFIG = { 'coef_p2': 2.50, # slope for current conversion for ADS.P2, measurement in V/V 'nb_samples': 20 # Max value 10 # was named integer before... } -} +}""" +HARDWARE_CONFIG = { + 'controller': {'model' : 'dummy_controller' + }, + 'tx' : {'model' : 'dummy_tx', + 'Imax': 4800 / 50 / 2, # Maximum current + 'R_shunt': 2 # Shunt resistance in Ohms + }, + 'rx' : {'model': 'dummy_rx', + }, + 'mux': {'model' : 'dummy_mux', + 'max_elec': 64, + 'voltage_max' : 100, + 'current_max' : 3 + } +} # SET THE LOGGING LEVELS, MQTT BROKERS AND MQTT OPTIONS ACCORDING TO YOUR NEEDS # Execution logging configuration EXEC_LOGGING_CONFIG = { diff --git a/hardware/__init__.py b/hardware/__init__.py index a9b07120..471af3cc 100644 --- a/hardware/__init__.py +++ b/hardware/__init__.py @@ -1 +1 @@ -from OhmPi.hardware.abstract_hardware import TxAbstract, RxAbstract, MuxAbstract, ControllerAbstract \ No newline at end of file +from .abstract_hardware import TxAbstract, RxAbstract, MuxAbstract, ControllerAbstract \ No newline at end of file diff --git a/hardware/abstract_hardware.py b/hardware/abstract_hardware.py index 9316f7d7..02d504e7 100644 --- a/hardware/abstract_hardware.py +++ b/hardware/abstract_hardware.py @@ -1,20 +1,25 @@ from abc import ABC, abstractmethod -from OhmPi.logging_setup import create_default_logger +from OhmPi.logging_setup import create_stdout_logger class ControllerAbstract(ABC): def __init__(self, **kwargs): self.bus = None class MuxAbstract(ABC): - pass + def __init__(self, **kwargs): + pass class TxAbstract(ABC): def __init__(self, **kwargs): self.board_name = kwargs.pop('board_name', 'unknown TX hardware') polarity = kwargs.pop('polarity', 1) inj_time = kwargs.pop('inj_time', 1.) - self.exec_logger = kwargs.pop('exec_logger', create_default_logger('exec_tx')) - self.soh_logger = kwargs.pop('soh_logger', create_default_logger('soh_tx')) + self.exec_logger = kwargs.pop('exec_logger', None) + if self.exec_logger is None: + self.exec_logger = create_stdout_logger('exec_tx') + self.soh_logger = kwargs.pop('soh_logger', None) + if self.soh_logger is None: + self.soh_logger = create_stdout_logger('soh_tx') self._polarity = None self._inj_time = None self._dps_state = 'off' @@ -118,8 +123,10 @@ class TxAbstract(ABC): class RxAbstract(ABC): def __init__(self, **kwargs): - self.exec_logger = kwargs.pop('exec_logger', create_default_logger('exec')) - self.soh_logger = kwargs.pop('soh_logger', create_default_logger('soh')) + self.exec_logger = kwargs.pop('exec_logger', None) + if self.exec_logger is None: + self.exec_logger = create_stdout_logger('exec_tx') + self.soh_logger = kwargs.pop('soh_logger', None) self.board_name = kwargs.pop('board_name', 'unknown RX hardware') self.exec_logger.debug(f'{self.board_name} RX initialization') self._adc_gain = 1. diff --git a/hardware/dummy_controller.py b/hardware/dummy_controller.py new file mode 100644 index 00000000..7de5aefd --- /dev/null +++ b/hardware/dummy_controller.py @@ -0,0 +1,11 @@ +from OhmPi.config import HARDWARE_CONFIG +import os +from OhmPi.hardware import ControllerAbstract +CONTROLLER_CONFIG = HARDWARE_CONFIG['controller'] + + +class Controller(ControllerAbstract): + def __init__(self, **kwargs): + kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')}) + super().__init__(**kwargs) + self.bus = None \ No newline at end of file diff --git a/hardware/dummy_mux.py b/hardware/dummy_mux.py new file mode 100644 index 00000000..34e3f04f --- /dev/null +++ b/hardware/dummy_mux.py @@ -0,0 +1,10 @@ +from OhmPi.config import HARDWARE_CONFIG +import os +from OhmPi.hardware import MuxAbstract +MUX_CONFIG = HARDWARE_CONFIG['mux'] + +class Mux(MuxAbstract): + def __init__(self, **kwargs): + kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')}) + super().__init__(**kwargs) + self.max_elec = MUX_CONFIG['max_elec'] \ No newline at end of file diff --git a/hardware/dummy_tx.py b/hardware/dummy_tx.py index c2f14d06..91a2d141 100644 --- a/hardware/dummy_tx.py +++ b/hardware/dummy_tx.py @@ -77,7 +77,7 @@ class Tx(TxAbstract): self.exec_logger.warning(f'Voltage should be given as a positive number. ' f'Set polarity to -1 to reverse voltage...') value = np.abs(value) - + self._voltage=value @property def tx_bat(self): diff --git a/hardware/raspberry_pi_3.py b/hardware/raspberry_pi_3.py index 0f1d7370..ac8fe568 100644 --- a/hardware/raspberry_pi_3.py +++ b/hardware/raspberry_pi_3.py @@ -1,4 +1,4 @@ -from hardware import ControllerAbstract +from OhmPi.hardware import ControllerAbstract import board # noqa import busio # noqa diff --git a/logging_setup.py b/logging_setup.py index dc93066f..49da1174 100644 --- a/logging_setup.py +++ b/logging_setup.py @@ -8,7 +8,7 @@ from OhmPi.compressed_sized_timed_rotating_handler import CompressedSizedTimedRo import sys from termcolor import colored -def create_default_logger(name): +def create_stdout_logger(name): logger = logging.getLogger(f'{name}_logger') log_format = f'%(asctime)-15s | {name} | %(levelname)s: %(message)s' formatter = logging.Formatter(log_format) diff --git a/measure.py b/measure.py index 50c218f8..7e3c766a 100644 --- a/measure.py +++ b/measure.py @@ -1,11 +1,11 @@ import importlib import numpy as np -from OhmPi.logging_setup import create_default_logger -from OhmPi.config import OHMPI_CONFIG -controller_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["controller"]["model"]}') -tx_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["tx"]["model"]}') -rx_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["rx"]["model"]}') -mux_module = importlib.import_module(f'OhmPi.{OHMPI_CONFIG["hardware"]["mux"]["model"]}') +from OhmPi.logging_setup import create_stdout_logger +from OhmPi.config import HARDWARE_CONFIG +controller_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["controller"]["model"]}') +tx_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["tx"]["model"]}') +rx_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["rx"]["model"]}') +mux_module = importlib.import_module(f'OhmPi.hardware.{HARDWARE_CONFIG["mux"]["model"]}') TX_CONFIG = tx_module.TX_CONFIG RX_CONFIG = rx_module.RX_CONFIG MUX_CONFIG = mux_module.MUX_CONFIG @@ -16,22 +16,28 @@ voltage_min = RX_CONFIG['voltage_min'] class OhmPiHardware: def __init__(self, **kwargs): - self.exec_logger = kwargs.pop('exec_logger', create_default_logger('exec')) - self.data_logger = kwargs.pop('exec_logger', create_default_logger('data')) - self.soh_logger = kwargs.pop('soh_logger', create_default_logger('soh')) + self.exec_logger = kwargs.pop('exec_logger', None) + if self.exec_logger is None: + self.exec_logger = create_stdout_logger('exec') + self.data_logger = kwargs.pop('exec_logger', None) + if self.data_logger is None: + self.data_logger = create_stdout_logger('data') + self.soh_logger = kwargs.pop('soh_logger', None) + if self.soh_logger is None: + self.soh_logger = create_stdout_logger('soh') self.controller = kwargs.pop('controller', - controller_module.Controller({'exec_logger' : self.exec_logger, - 'data_logger': self.data_logger, - 'soh_logger': self.soh_logger})) - self.rx = kwargs.pop('tx', tx_module.Rx({'exec_logger' : self.exec_logger, - 'data_logger': self.data_logger, - 'soh_logger': self.soh_logger})) - self.tx = kwargs.pop('rx', tx_module.Tx({'exec_logger' : self.exec_logger, - 'data_logger': self.data_logger, - 'soh_logger': self.soh_logger})) - self.mux = kwargs.pop('mux', mux_module.Mux({'exec_logger' : self.exec_logger, - 'data_logger': self.data_logger, - 'soh_logger': self.soh_logger})) + controller_module.Controller(exec_logger=self.exec_logger, + data_logger=self.data_logger, + soh_logger= self.soh_logger)) + self.rx = kwargs.pop('rx', rx_module.Rx(exec_logger=self.exec_logger, + data_logger=self.data_logger, + soh_logger=self.soh_logger)) + self.tx = kwargs.pop('tx', tx_module.Tx(exec_logger=self.exec_logger, + data_logger=self.data_logger, + soh_logger=self.soh_logger)) + self.mux = kwargs.pop('mux', mux_module.Mux(exec_logger=self.exec_logger, + data_logger=self.data_logger, + soh_logger=self.soh_logger)) def _vab_pulse(self, vab, length, polarity=None): """ Gets VMN and IAB from a single voltage pulse """ diff --git a/test_dummy.py b/test_dummy.py new file mode 100644 index 00000000..98b8e8d8 --- /dev/null +++ b/test_dummy.py @@ -0,0 +1,14 @@ +import sys +sys.path.extend(['/home/su530201/PycharmProjects/ohmpi_reversaal/OhmPi']) +from OhmPi.hardware.dummy_tx import Tx +from OhmPi.hardware.dummy_rx import Rx +from OhmPi.logging_setup import create_stdout_logger + +exec_logger = create_stdout_logger(name='exec') +soh_logger = create_stdout_logger(name='soh') + +print('\nCreating TX...') +tx = Tx(exec_logger= exec_logger, soh_logger= soh_logger) +print('\nCreating RX...') +rx = Rx(exec_logger= exec_logger, soh_logger= soh_logger) + -- GitLab