From c70e2db1627c0b4089ff0e34115ca2b64f816014 Mon Sep 17 00:00:00 2001 From: su530201 <olivier.kaufmann@umons.ac.be> Date: Wed, 26 Apr 2023 14:13:34 +0200 Subject: [PATCH] Fixes bug with _addresses and super() --- config_ohmpi_card_3_15.py | 4 ++-- .../abstract_hardware_components.py | 19 +++++++++++++++---- hardware_components/mux_2024_rev_0_0.py | 6 +++--- hardware_components/test_mux_2024.py | 7 +++++++ test_measure_with_ohmpi_card_3_15.py | 1 + 5 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 hardware_components/test_mux_2024.py diff --git a/config_ohmpi_card_3_15.py b/config_ohmpi_card_3_15.py index 9e787e98..fd79afde 100644 --- a/config_ohmpi_card_3_15.py +++ b/config_ohmpi_card_3_15.py @@ -30,9 +30,9 @@ HARDWARE_CONFIG = { 'sampling_rate': 10., # ms 'nb_samples': 20, # Max value 10 # was named integer before... }, - 'mux': {'model' : 'dummy_mux', # 'ohmpi_i2c_mux64_v1.01', + 'mux': {'model' : 'mux_2024_rev_0_0', # 'ohmpi_i2c_mux64_v1.01', 'max_elec': 64, - 'board_addresses': {'A': 0x73, 'B': 0x72, 'M': 0x71, 'N': 0x70}, # CHECK IF YOUR BOARDS HAVE THESE ADDRESSES + 'addresses': './hardware_components/mux_2024_22_23_4_roles_addressing_table.json', 'voltage_max': 100, 'current_max': 3 } diff --git a/hardware_components/abstract_hardware_components.py b/hardware_components/abstract_hardware_components.py index a1845bc4..10b817af 100644 --- a/hardware_components/abstract_hardware_components.py +++ b/hardware_components/abstract_hardware_components.py @@ -1,14 +1,14 @@ from abc import ABC, abstractmethod import numpy as np - +import json from OhmPi.logging_setup import create_stdout_logger import time class ControllerAbstract(ABC): def __init__(self, **kwargs): self.board_name = kwargs.pop('board_name', 'unknown Controller hardware') - self.bus = None + self.bus = None # TODO: allow for several buses self.exec_logger = kwargs.pop('exec_logger', None) if self.exec_logger is None: self.exec_logger = create_stdout_logger('exec_ctl') @@ -35,7 +35,7 @@ class ControllerAbstract(ABC): class MuxAbstract(ABC): def __init__(self, **kwargs): - self.board_name = kwargs.pop('board_name', 'unknown MUX hardware') # TODO: introduce MUX boards that take part to a MUX system (could be the same for RX boards that take part to an RX system (e.g. different channels) + self.board_name = kwargs.pop('board_name', 'unknown MUX hardware') # TODO: introduce MUX boards that are part of a MUX system (could be the same for RX boards that take part to an RX system (e.g. different channels) self.exec_logger = kwargs.pop('exec_logger', None) if self.exec_logger is None: self.exec_logger = create_stdout_logger('exec_mux') @@ -44,6 +44,17 @@ class MuxAbstract(ABC): self.soh_logger = create_stdout_logger('soh_mux') self.exec_logger.debug(f'{self.board_name} MUX initialization') self.controller = kwargs.pop('controller', None) + self.addresses = kwargs.pop('addresses', None) + + def _get_addresses(self, addresses_file): + with open(addresses_file, 'r') as f: + x = json.load(f) + + self.addresses = {} + for k in x.keys(): + y = k.strip('(').strip(')').split(', ') + x[k]['TCA'] + self.addresses.update({(int(y[0]), y[1]): x[k]}) @abstractmethod def reset(self): @@ -91,7 +102,7 @@ class MuxAbstract(ABC): self.exec_logger.warning(f'Missing argument for {self.board_name}.switch: elec_dict is None.') @abstractmethod - def switch_one(self, elec, role, state): + def switch_one(self, elec=None, role=None, state=None): pass def test(self, elec_dict, activation_time=1.): diff --git a/hardware_components/mux_2024_rev_0_0.py b/hardware_components/mux_2024_rev_0_0.py index 817410d0..313b7f1e 100644 --- a/hardware_components/mux_2024_rev_0_0.py +++ b/hardware_components/mux_2024_rev_0_0.py @@ -11,9 +11,9 @@ class Mux(MuxAbstract): def __init__(self, **kwargs): kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')}) super().__init__(**kwargs) + print(f'addresses: {self.addresses}') self.max_elec = MUX_CONFIG['max_elec'] - print(os.path.curdir) - if self._addresses is None and 'addresses' in MUX_CONFIG.keys(): + if self.addresses is None and 'addresses' in MUX_CONFIG.keys(): self._get_addresses(MUX_CONFIG['addresses']) def reset(self): @@ -27,7 +27,7 @@ class Mux(MuxAbstract): pin_enable.direction = Direction.OUTPUT pin_enable.value = state - d = self._addresses[elec, role] + d = self.addresses[elec, role] if d['TCA_address'] is None: tca = self.controller.bus else: diff --git a/hardware_components/test_mux_2024.py b/hardware_components/test_mux_2024.py new file mode 100644 index 00000000..86d3bee0 --- /dev/null +++ b/hardware_components/test_mux_2024.py @@ -0,0 +1,7 @@ +from OhmPi.hardware_components.mux_2024_rev_0_0 import Mux, MUX_CONFIG +import time + +mux = Mux() +mux.switch_one(elec=1, role='M', state='on') +time.sleep(2) +mux.switch_one(elec=1, role='M', state='off') diff --git a/test_measure_with_ohmpi_card_3_15.py b/test_measure_with_ohmpi_card_3_15.py index 3c863dac..cfb073ad 100644 --- a/test_measure_with_ohmpi_card_3_15.py +++ b/test_measure_with_ohmpi_card_3_15.py @@ -48,3 +48,4 @@ r = [np.abs((k.pulses[i]['polarity']*k.pulses[i]['vmn']-k.sp)/k.pulses[i]['iab'] for i in range(len(r)): print(f'Mean resistance with sp correction for pulse{i}: {np.mean(r[i]):.3f} Ohms, Dev. {100*np.std(r[i])/np.mean(r[i]):.1f} %') change_config('config_default.py', verbose=False) + -- GitLab