forked from awendt/pyrelacs
adding comments
This commit is contained in:
parent
3433ef7132
commit
a7b73fa09a
@ -12,13 +12,32 @@ log = config_logging()
|
|||||||
|
|
||||||
|
|
||||||
class MccDac:
|
class MccDac:
|
||||||
|
"""
|
||||||
|
Represents the Digital/Analog Converter from Meassuring Computing.
|
||||||
|
provides methods for writing and reading the Analog / Digital input and output.
|
||||||
|
|
||||||
|
Connects to the DAC device.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
daq_device : uldaq.DaqDevice
|
||||||
|
DaqDevice for handling connecting, releasing and disconnecting
|
||||||
|
ai_device : uldaq.AiDevice
|
||||||
|
The Analog input Device
|
||||||
|
ao_device :
|
||||||
|
Analog output Device
|
||||||
|
dio_device :
|
||||||
|
Digital Input Output
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
devices = uldaq.get_daq_device_inventory(uldaq.InterfaceType.USB)
|
devices = uldaq.get_daq_device_inventory(uldaq.InterfaceType.USB)
|
||||||
log.debug(f"Found daq devices {len(devices)}, connecting to the first one")
|
log.debug(f"Found daq devices {len(devices)}, connecting to the first one")
|
||||||
if len(devices) == 0:
|
try:
|
||||||
|
self.daq_device = uldaq.DaqDevice(devices[0])
|
||||||
|
except uldaq.ul_exception.ULException as e:
|
||||||
log.error("Did not found daq devices, please connect one")
|
log.error("Did not found daq devices, please connect one")
|
||||||
exit(1)
|
raise e
|
||||||
self.daq_device = uldaq.DaqDevice(devices[0])
|
|
||||||
try:
|
try:
|
||||||
self.daq_device.connect()
|
self.daq_device.connect()
|
||||||
except uldaq.ul_exception.ULException:
|
except uldaq.ul_exception.ULException:
|
||||||
@ -30,6 +49,10 @@ class MccDac:
|
|||||||
log.debug("Connected")
|
log.debug("Connected")
|
||||||
|
|
||||||
def connect_dac(self):
|
def connect_dac(self):
|
||||||
|
"""
|
||||||
|
Connecting to the DAQ device
|
||||||
|
|
||||||
|
"""
|
||||||
devices = uldaq.get_daq_device_inventory(uldaq.InterfaceType.USB)
|
devices = uldaq.get_daq_device_inventory(uldaq.InterfaceType.USB)
|
||||||
log.debug(f"Found daq devices {len(devices)}, connecting to the first one")
|
log.debug(f"Found daq devices {len(devices)}, connecting to the first one")
|
||||||
if len(devices) == 0:
|
if len(devices) == 0:
|
||||||
@ -52,6 +75,40 @@ class MccDac:
|
|||||||
ScanOption: uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO,
|
ScanOption: uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO,
|
||||||
AInScanFlag: uldaq.AInScanFlag = uldaq.AInScanFlag.DEFAULT,
|
AInScanFlag: uldaq.AInScanFlag = uldaq.AInScanFlag.DEFAULT,
|
||||||
) -> Array[c_double]:
|
) -> Array[c_double]:
|
||||||
|
"""
|
||||||
|
Reading the analog input of the DAC device
|
||||||
|
Creates a c_double Array for storing the acquired data
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
channels : list[int]
|
||||||
|
channels to read from, provide only two int's in a list (ex [0, 1] or [0, 4])
|
||||||
|
for sampling from the range(channel0, channel4)
|
||||||
|
|
||||||
|
duration : int
|
||||||
|
duration of sampling period
|
||||||
|
|
||||||
|
samplerate : float
|
||||||
|
samplerate for the duration of sampling
|
||||||
|
|
||||||
|
AiInputMode : uldaq.AiInputMode = uldaq.AiInputMode.SINGLE_ENDED
|
||||||
|
Contains attributes indicating A/D channel input modes.
|
||||||
|
Compares to Ground
|
||||||
|
|
||||||
|
Range : uldaq.Range = uldaq.Range.BIP10VOLTS
|
||||||
|
Range of the output
|
||||||
|
|
||||||
|
ScanOption : uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO
|
||||||
|
Specific Flags for acuiring the input
|
||||||
|
|
||||||
|
AInScanFlag : uldaq.AInScanFlag = uldaq.AInScanFlag.DEFAULT
|
||||||
|
Scaling of the data
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
Array[c_double]
|
||||||
|
|
||||||
|
"""
|
||||||
assert len(channels) == 2, log.error("You can only provide two channels [0, 1]")
|
assert len(channels) == 2, log.error("You can only provide two channels [0, 1]")
|
||||||
|
|
||||||
if channels[0] != channels[1]:
|
if channels[0] != channels[1]:
|
||||||
@ -85,6 +142,37 @@ class MccDac:
|
|||||||
ScanOption: uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO,
|
ScanOption: uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO,
|
||||||
AOutScanFlag: uldaq.AOutScanFlag = uldaq.AOutScanFlag.DEFAULT,
|
AOutScanFlag: uldaq.AOutScanFlag = uldaq.AOutScanFlag.DEFAULT,
|
||||||
) -> Array[c_double]:
|
) -> Array[c_double]:
|
||||||
|
"""
|
||||||
|
Writes data to the DAC device.
|
||||||
|
Creates a c_double Array for writing the data
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
data : Union[list, npt.NDArray]
|
||||||
|
data which should be written to the DAC
|
||||||
|
|
||||||
|
channels : list[int]
|
||||||
|
channels to read from, provide only two int's in a list (ex [0, 1])
|
||||||
|
for sampling from the range(channel0, channel1)
|
||||||
|
DAC 16 has only 2 output channels
|
||||||
|
|
||||||
|
samplerate : float
|
||||||
|
samplerate for the duration of sampling
|
||||||
|
|
||||||
|
Range : uldaq.Range = uldaq.Range.BIP10VOLTS
|
||||||
|
Range of the output
|
||||||
|
|
||||||
|
ScanOption : uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO
|
||||||
|
Specific Flags for acuiring the input
|
||||||
|
|
||||||
|
AOutScanFlag : uldaq.AOutScanFlag = uldaq.AOutScanFlag.DEFAULT
|
||||||
|
For Scaling the data
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
Array[c_double]
|
||||||
|
"""
|
||||||
|
|
||||||
assert len(channels) == 2, log.error("You can only provide two channels [0, 1]")
|
assert len(channels) == 2, log.error("You can only provide two channels [0, 1]")
|
||||||
|
|
||||||
buffer = c_double * len(data)
|
buffer = c_double * len(data)
|
||||||
@ -109,7 +197,18 @@ class MccDac:
|
|||||||
|
|
||||||
return data_analog_output
|
return data_analog_output
|
||||||
|
|
||||||
def set_analog_to_zero(self, channels: list[int] = [0, 1]):
|
def set_analog_to_zero(self, channels: list[int] = [0, 1]) -> None:
|
||||||
|
"""
|
||||||
|
Sets all analog outputs to zero
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
channels : list[int]
|
||||||
|
channels to read from, provide only two int's in a list (ex [0, 1])
|
||||||
|
for sampling from the range(channel0, channel1)
|
||||||
|
DAC 16 has only 2 output channels
|
||||||
|
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
err = self.ao_device.a_out_list(
|
err = self.ao_device.a_out_list(
|
||||||
channels[0],
|
channels[0],
|
||||||
@ -126,14 +225,23 @@ class MccDac:
|
|||||||
log.error("disconnection dac")
|
log.error("disconnection dac")
|
||||||
self.disconnect_dac()
|
self.disconnect_dac()
|
||||||
|
|
||||||
def diggital_trigger(self) -> None:
|
def digital_trigger(self, ch: int = 0) -> None:
|
||||||
data = self.read_bit(channel=0)
|
"""
|
||||||
|
Digital
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
ch : int
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
data = self.read_bit(channel=ch)
|
||||||
if data:
|
if data:
|
||||||
self.write_bit(channel=0, bit=0)
|
self.write_bit(channel=ch, bit=0)
|
||||||
time.time_ns()
|
time.time_ns()
|
||||||
self.write_bit(channel=0, bit=1)
|
self.write_bit(channel=ch, bit=1)
|
||||||
else:
|
else:
|
||||||
self.write_bit(channel=0, bit=1)
|
self.write_bit(channel=ch, bit=1)
|
||||||
|
|
||||||
def write_bit(self, channel: int = 0, bit: int = 1) -> None:
|
def write_bit(self, channel: int = 0, bit: int = 1) -> None:
|
||||||
self.dio_device.d_config_bit(
|
self.dio_device.d_config_bit(
|
||||||
|
Loading…
Reference in New Issue
Block a user