Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions src/nipcbatt/pcbatt_library/dmm/common/helper_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,12 @@ class FormatMeasurement:

# Mapping of nidmm.Function to measurement units
UNIT_MAP = {
nidmm.Function.DC_VOLTS: "V",
nidmm.Function.AC_VOLTS: "V",
nidmm.Function.DC_CURRENT: "A",
nidmm.Function.AC_CURRENT: "A",
nidmm.Function.DC_VOLTS: "V (dc)",
nidmm.Function.AC_VOLTS: "V (ac)",
nidmm.Function.DC_CURRENT: "A (dc)",
nidmm.Function.AC_CURRENT: "A (ac)",
nidmm.Function.TWO_WIRE_RES: "Ohm",
nidmm.Function.FOUR_WIRE_RES: "Ohm",
nidmm.Function.FREQ: "Hz",
nidmm.Function.PERIOD: "s",
}

@staticmethod
Expand Down Expand Up @@ -142,6 +140,7 @@ def measurement(
}
if math.isinf(measured_value):
sign = "+" if measured_value > 0 else "-"

unit = FormatMeasurement.UNIT_MAP.get(measurement_function, "")
return {
"Formatted_Measurement": f"{sign}Inf{unit}",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
"""DMM DC-RMS Current measurement in loop example with custom input parameters."""

import time

import nidmm

import nipcbatt
from nipcbatt import dmm
from nipcbatt.pcbatt_utilities.pcbatt_logger import PcbattLogger


def main():
"""Configures and executes custom DMM DC-RMS current measurement with logging."""
dmm_current_measurement = dmm.DcRmsCurrentMeasurement()

logger = PcbattLogger(file="c:\\Temp\\current_measurement_logger.txt")
logger.attach(dmm_current_measurement)

config = dmm.DcRmsCurrentMeasurementConfiguration(
nipcbatt.MeasurementExecutionType.CONFIGURE_AND_MEASURE,
trigger_parameters=dmm.TriggerParameters(
trigger_source=nidmm.TriggerSource.IMMEDIATE,
trigger_delay=5.0,
slope=dmm.Slope.RISING_EDGE,
enable_trigger=False,
),
measurement_function_parameters=dmm.DcRmsCurrentMeasurementFunctionParameters(
measurement_function=dmm.CurrentRangeAndFunctions.DC_1A,
resolution_in_digits=dmm.ResolutionInDigits.DIGITS_5_5,
),
timing_parameters=dmm.TimingParameters(
aperture_time_seconds=-1.0,
settle_time_seconds=-1.0,
),
ac_min_frequency=40.0,
)

# Number of measurements to take in the loop
number_of_measurements = 5

# ======================= Initialize the DMM ============================
dmm_current_measurement.initialize("Sim_DMM", 50)

# ================= Configure once, then measure in a loop ===================
config_only = dmm.DcRmsCurrentMeasurementConfiguration(
nipcbatt.MeasurementExecutionType.CONFIGURE_ONLY,
trigger_parameters=config.trigger_parameters,
measurement_function_parameters=config.measurement_function_parameters,
timing_parameters=config.timing_parameters,
ac_min_frequency=config.ac_min_frequency,
)

measure_only = dmm.DcRmsCurrentMeasurementConfiguration(
nipcbatt.MeasurementExecutionType.MEASURE_ONLY,
trigger_parameters=config.trigger_parameters,
measurement_function_parameters=config.measurement_function_parameters,
timing_parameters=config.timing_parameters,
ac_min_frequency=config.ac_min_frequency,
)

# Configure the DMM once before the loop
dmm_current_measurement.configure_and_measure(configuration=config_only)

# Measure in a loop
for i in range(number_of_measurements):
measurement = {}
measurement["value"] = dmm_current_measurement.configure_and_measure(
configuration=measure_only
)
print(measurement["value"])
time.sleep(2) # Wait for 2 seconds between measurements

# ===================== Close the DMM session ===========================
dmm_current_measurement.close()


if __name__ == "__main__":
main()
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ def main():
dmm_current_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print("executed succesfully")
print(measurement)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ def main():
dmm_current_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print("executed succesfully")
print(measurement)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"""DMM DC-RMS Voltage measurement in loop example with custom input parameters."""

import time

import nidmm

import nipcbatt
from nipcbatt import dmm
from nipcbatt.pcbatt_utilities.pcbatt_logger import PcbattLogger


def main():
"""Configures and executes custom DMM DC-RMS voltage measurement with logging."""
dmm_voltage_measurement = dmm.DcRmsVoltageMeasurement()

logger = PcbattLogger(file="c:\\Temp\\voltage_measurement_logger.txt")
logger.attach(dmm_voltage_measurement)

config = dmm.DcRmsVoltageMeasurementConfiguration(
nipcbatt.MeasurementExecutionType.CONFIGURE_AND_MEASURE,
trigger_parameters=dmm.TriggerParameters(
trigger_source=nidmm.TriggerSource.IMMEDIATE,
trigger_delay=5.0,
slope=dmm.Slope.RISING_EDGE,
enable_trigger=False,
),
measurement_function_parameters=dmm.DcRmsVoltageMeasurementFunctionParameters(
measurement_function=dmm.VoltageRangeAndFunctions.DC_10V,
resolution_in_digits=dmm.ResolutionInDigits.DIGITS_5_5,
),
timing_parameters=dmm.TimingParameters(
aperture_time_seconds=-1.0,
settle_time_seconds=-1.0,
),
ac_min_frequency=40.0,
)
# Number of measurements to take in the loop
number_of_measurements = 5

# ======================= Initialize the DMM ============================
dmm_voltage_measurement.initialize("Sim_DMM", 50)

# ================= Configure once, then measure in a loop ===================
config_only = dmm.DcRmsVoltageMeasurementConfiguration(
nipcbatt.MeasurementExecutionType.CONFIGURE_ONLY,
trigger_parameters=config.trigger_parameters,
measurement_function_parameters=config.measurement_function_parameters,
timing_parameters=config.timing_parameters,
ac_min_frequency=config.ac_min_frequency,
)

measure_only = dmm.DcRmsVoltageMeasurementConfiguration(
nipcbatt.MeasurementExecutionType.MEASURE_ONLY,
trigger_parameters=config.trigger_parameters,
measurement_function_parameters=config.measurement_function_parameters,
timing_parameters=config.timing_parameters,
ac_min_frequency=config.ac_min_frequency,
)

# Configure the DMM once before the loop
dmm_voltage_measurement.configure_and_measure(configuration=config_only)

# Measure in a loop
for i in range(number_of_measurements):
measurement = {}
measurement["value"] = dmm_voltage_measurement.configure_and_measure(
configuration=measure_only
)
print(measurement['value'])
time.sleep(2) # Wait for 2 seconds between measurements

# ===================== Close the DMM session ===========================
dmm_voltage_measurement.close()


if __name__ == "__main__":
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
"""Signal Voltage Generation connected to DMM DC-RMS Voltage Measurement."""
### Ensure correct hardware and corresponding trigger names before running this example

import threading
import time

import nidaqmx.constants
import nidmm

import nipcbatt
from nipcbatt import dmm, daq
from nipcbatt.pcbatt_utilities.pcbatt_logger import PcbattLogger

def main():
# Initialize SVG and DMM
svg = daq.SignalVoltageGeneration()
svg.initialize(channel_expression="Sim_DAQ/ao0")

dmm_voltage_measurement = dmm.DcRmsVoltageMeasurement()
dmm_voltage_measurement.initialize("Sim_DMM", 50.0)

# Add logger to DMM
logger = PcbattLogger(file="c:\\Temp\\svg_dmm_logger.txt")
logger.attach(dmm_voltage_measurement)

# SVG parameters configuration
voltage_generation_range_parameters = nipcbatt.VoltageGenerationChannelParameters(
range_min_volts=-10.0,
range_max_volts=10.0,
)

svg_timing_parameters = daq.SignalVoltageGenerationTimingParameters(
sample_clock_source="OnboardClock",
sampling_rate_hertz=100000,
generated_signal_duration_seconds=4.0,
)

svg_trigger_parameters = nipcbatt.DigitalStartTriggerParameters(
trigger_select=nipcbatt.StartTriggerType.NO_TRIGGER,
digital_start_trigger_source="",
digital_start_trigger_edge=nidaqmx.constants.Edge.RISING,
)

svg_tone_parameters = daq.ToneParameters(
tone_frequency_hertz=100,
tone_amplitude_volts=10.0,
tone_phase_radians=0,
)

svg_waveform_parameters = daq.SignalVoltageGenerationSineWaveParameters(
generated_signal_offset_volts=0,
generated_signal_tone_parameters=svg_tone_parameters,
)

svg.configure_all_channels(parameters=voltage_generation_range_parameters)
svg.configure_timing(parameters=svg_timing_parameters)
svg.configure_trigger(parameters=svg_trigger_parameters)

# Route AO start-trigger → PXI_Trig0
svg.route_start_trigger_signal_to_terminal("PXI_Trig0")

# Configure DMM to wait for trigger on PXI_Trig0
dmm_config = dmm.DcRmsVoltageMeasurementConfiguration(
execution_type=nipcbatt.MeasurementExecutionType.CONFIGURE_AND_MEASURE,
measurement_function_parameters=dmm.DcRmsVoltageMeasurementFunctionParameters(
measurement_function=dmm.VoltageRangeAndFunctions.AC_20V,
resolution_in_digits=dmm.ResolutionInDigits.DIGITS_5_5,
),
trigger_parameters=dmm.TriggerParameters(
trigger_source=nidmm.TriggerSource.PXI_TRIG0,
trigger_delay=1.0,
slope=dmm.Slope.RISING_EDGE,
enable_trigger=True,
),
timing_parameters=dmm.TimingParameters(
aperture_time_seconds=-1.0,
settle_time_seconds=-1.0,
),
ac_min_frequency=40.0,
)

# DMM voltage measurement in background thread
dmm_result = {}

def _dmm_measure():
dmm_result["value"] = dmm_voltage_measurement.configure_and_measure(
configuration=dmm_config
)

dmm_thread = threading.Thread(target=_dmm_measure, daemon=True)
dmm_thread.start()

# 2 seconds wait
time.sleep(2.0)

svg.generate_voltage_sine_waveform(
signal_parameters=svg_waveform_parameters,
timing_parameters=svg_timing_parameters,
)

# Wait for DMM thread to complete
dmm_thread.join(timeout=15.0)

# Close resources
svg.close()
dmm_voltage_measurement.close()

print(dmm_result["value"])


if __name__ == "__main__":
main()
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def main():
dmm_voltage_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print(measurement)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ def main():
dmm_voltage_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print("executed succesfully")
print(measurement)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def main():
dmm_mixed_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print(measurement)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def main():
dmm_mixed_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print(measurement)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ def main():
resistance_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print("executed succesfully")
print(measurement)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ def main():
resistance_measurement.close()

# Print the measurement result
print(measurement.dmm_execution_settings, measurement.measurement)
print("executed succesfully")
print(measurement)


if __name__ == "__main__":
Expand Down
Loading