Source code for fluidlab.instruments.pressure_transducer.furness_fco318

"""furness_fco318
=================

.. autoclass:: FurnessFCO318
   :members:
   :private-members:


"""

__all__ = ["FurnessFCO318"]

from fluidlab.instruments.drivers import Driver
from fluidlab.interfaces import PhysicalInterfaceType
from fluidlab.instruments.features import Value
from time import sleep
import numpy as np


class FurnessException(Exception):
    pass


class FurnessValue(Value):
    def __init__(self, name, doc="", command_character="L"):
        super().__init__(
            name,
            doc,
            command_set=None,
            command_get="!" + command_character + "\r",
            check_instrument_value=False,
            pause_instrument=0.5,
            channel_argument=False,
        )

    def get(self):
        result = super().get()
        if result[:2] != self.command_get[:2]:
            raise FurnessException('Echo missing (got "' + result[:2] + '"')

        value = result[3:]
        print('value: "' + value + '"')
        if value in ["-.---", "--.---"]:  # below minimum
            value = 0.0
        elif value in ["+.+++", "++.+++"]:  # above maximum
            value = np.nan
        elif "," in value:
            values = value.split(",")
            print(values)
            value = {
                "T_BITS": int(values[0]),
                "RAW_ADC": int(values[1]),
                "COMP_ADC": int(values[2]),
                "LIN_ADC": int(values[3]),
                "OP_VAL": int(values[4]),
            }
        elif value.endswith("MM"):
            values = value.split(" ")
            value = float(values[0])
        else:
            value = float(value)

        return value

    def set(self):
        pass


[docs]class FurnessFCO318(Driver): default_physical_interface = PhysicalInterfaceType.Serial default_inter_params = { "baudrate": 2400, "bytesize": 8, "parity": "N", "stopbits": 1, "timeout": 1.0, "xonxoff": False, "rtscts": False, "dsrdtr": False, }
features = [ FurnessValue( "pressure", doc="Returns the displayed data", command_character="L" ), FurnessValue( "firmware", doc="Returns the current firmware version", command_character="I", ), FurnessValue( "internal", doc="Returns internal readings for advanced use", command_character="M", ), ] FurnessFCO318._build_class_with_features(features) if __name__ == "__main__": fco = Furness_FCO318("/dev/ttyS0") firmware = fco.firmware.get() print("Firmware: " + firmware) pressure = fco.pressure.get() print("Displayed pressure: " + str(pressure)) internal = fco.internal.get() print("Internal values: " + str(internal))