Skip to content

Commit efb0eae

Browse files
authored
Users/ankit/current measurement (#24)
* added current measurement and validation examples * updated instrument name in validation examples
1 parent 53046ab commit efb0eae

File tree

7 files changed

+551
-0
lines changed

7 files changed

+551
-0
lines changed

src/nipcbatt/pcbatt_library/dmm/__init__.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,21 @@
3333
from nipcbatt.pcbatt_library.dmm.dc_rms_voltage_measurements.dc_rms_voltage_measurement import (
3434
DcRmsVoltageMeasurement,
3535
)
36+
from nipcbatt.pcbatt_library.dmm.dc_rms_current_measurements.dc_rms_current_constants import (
37+
DEFAULT_DC_RMS_CURRENT_AC_MIN_FREQUENCY,
38+
DEFAULT_DC_RMS_CURRENT_EXECUTION_TYPE,
39+
DEFAULT_DC_RMS_CURRENT_MEASUREMENT_CONFIGURATION,
40+
DEFAULT_DC_RMS_CURRENT_MEASUREMENT_PARAMETERS,
41+
DEFAULT_DC_RMS_CURRENT_TIMING_PARAMETERS,
42+
DEFAULT_DC_RMS_CURRENT_TRIGGER_PARAMETERS,
43+
ConstantsForDcRmsCurrentMeasurements,
44+
)
45+
from nipcbatt.pcbatt_library.dmm.dc_rms_current_measurements.dc_rms_current_data_types import (
46+
CurrentRangeAndFunctions,
47+
DcRmsCurrentMeasurementConfiguration,
48+
DcRmsCurrentMeasurementFunctionParameters,
49+
DcRmsCurrentMeasurementResultData,
50+
)
51+
from nipcbatt.pcbatt_library.dmm.dc_rms_current_measurements.dc_rms_current_measurement import (
52+
DcRmsCurrentMeasurement,
53+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Provides DC and RMS current measurement functionality using DMM."""
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""Constants data types for DC-RMS Current Measurements."""
2+
3+
import dataclasses
4+
5+
from nipcbatt.pcbatt_library.dmm.common.common_data_types import (
6+
TimingParameters,
7+
TriggerParameters,
8+
)
9+
from nipcbatt.pcbatt_library.dmm.common.constants import ConstantsForDcRmsMeasurements
10+
from nipcbatt.pcbatt_library.dmm.dc_rms_current_measurements.dc_rms_current_data_types import (
11+
CurrentRangeAndFunctions,
12+
DcRmsCurrentMeasurementFunctionParameters,
13+
DcRmsCurrentMeasurementConfiguration,
14+
)
15+
16+
17+
@dataclasses.dataclass
18+
class ConstantsForDcRmsCurrentMeasurements:
19+
"""Constants used for Current measurement."""
20+
21+
RANGE_AND_FUNCTION = CurrentRangeAndFunctions.DC_Current_Auto_Range
22+
23+
24+
"""Current measurement-specific range/function setting is defined
25+
in ConstantsForDcRmsCurrentMeasurements."""
26+
# Default execution type for current measurements
27+
DEFAULT_DC_RMS_CURRENT_EXECUTION_TYPE = ConstantsForDcRmsMeasurements.DEFAULT_EXECUTION_TYPE
28+
29+
# Default measurement function parameters including current range/function and resolution in digits
30+
DEFAULT_DC_RMS_CURRENT_MEASUREMENT_PARAMETERS = DcRmsCurrentMeasurementFunctionParameters(
31+
measurement_function=ConstantsForDcRmsCurrentMeasurements.RANGE_AND_FUNCTION,
32+
resolution_in_digits=ConstantsForDcRmsMeasurements.DEFAULT_RESOLUTION_IN_DIGITS,
33+
)
34+
35+
# Default timing parameters including aperture time and settle time
36+
DEFAULT_DC_RMS_CURRENT_TIMING_PARAMETERS = TimingParameters(
37+
aperture_time_seconds=ConstantsForDcRmsMeasurements.DEFAULT_APERTURE_TIME_SECONDS,
38+
settle_time_seconds=ConstantsForDcRmsMeasurements.DEFAULT_SETTLE_TIME_SECONDS,
39+
)
40+
41+
# Default AC minimum frequency
42+
DEFAULT_DC_RMS_CURRENT_AC_MIN_FREQUENCY = ConstantsForDcRmsMeasurements.DEFAULT_AC_MIN_FREQUENCY
43+
44+
# Default trigger parameters including trigger source, trigger delay, and trigger enable setting
45+
DEFAULT_DC_RMS_CURRENT_TRIGGER_PARAMETERS = TriggerParameters(
46+
trigger_source=ConstantsForDcRmsMeasurements.DEFAULT_TRIGGER_SOURCE,
47+
trigger_delay=ConstantsForDcRmsMeasurements.DEFAULT_TRIGGER_DELAY,
48+
slope=ConstantsForDcRmsMeasurements.DEFAULT_TRIGGER_SLOPE,
49+
enable_trigger=ConstantsForDcRmsMeasurements.DEFAULT_ENABLE_TRIGGER,
50+
)
51+
52+
# Default DC-RMS current measurement configuration
53+
DEFAULT_DC_RMS_CURRENT_MEASUREMENT_CONFIGURATION = DcRmsCurrentMeasurementConfiguration(
54+
execution_type=DEFAULT_DC_RMS_CURRENT_EXECUTION_TYPE,
55+
measurement_function_parameters=DEFAULT_DC_RMS_CURRENT_MEASUREMENT_PARAMETERS,
56+
trigger_parameters=DEFAULT_DC_RMS_CURRENT_TRIGGER_PARAMETERS,
57+
timing_parameters=DEFAULT_DC_RMS_CURRENT_TIMING_PARAMETERS,
58+
ac_min_frequency=DEFAULT_DC_RMS_CURRENT_AC_MIN_FREQUENCY,
59+
)
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
"""DC-RMS current data types."""
2+
3+
from enum import Enum
4+
from typing import Union
5+
6+
import nidmm
7+
8+
from nipcbatt.pcbatt_library.common.common_data_types import MeasurementExecutionType
9+
from nipcbatt.pcbatt_library.dmm.common.common_data_types import (
10+
ResolutionInDigits,
11+
TimingParameters,
12+
TriggerParameters,
13+
)
14+
from nipcbatt.pcbatt_library_core.pcbatt_data_types import PCBATestToolkitData
15+
16+
17+
class CurrentRangeAndFunctions(Enum):
18+
"""Defines the measurement function and range settings for current measurement."""
19+
20+
DC_Current_Auto_Range = (nidmm.Function.DC_CURRENT, -1.0)
21+
DC_1uA = (nidmm.Function.DC_CURRENT, 0.000001)
22+
DC_10uA = (nidmm.Function.DC_CURRENT, 0.00001)
23+
DC_100uA = (nidmm.Function.DC_CURRENT, 0.0001)
24+
DC_1mA = (nidmm.Function.DC_CURRENT, 0.001)
25+
DC_10mA = (nidmm.Function.DC_CURRENT, 0.01)
26+
DC_20mA = (nidmm.Function.DC_CURRENT, 0.02)
27+
DC_100mA = (nidmm.Function.DC_CURRENT, 0.1)
28+
DC_200mA = (nidmm.Function.DC_CURRENT, 0.2)
29+
DC_1A = (nidmm.Function.DC_CURRENT, 1)
30+
DC_3A = (nidmm.Function.DC_CURRENT, 3)
31+
32+
AC_Current_Auto_Range = (nidmm.Function.AC_CURRENT, -1.0)
33+
AC_100uA = (nidmm.Function.AC_CURRENT, 0.0001)
34+
AC_1mA = (nidmm.Function.AC_CURRENT, 0.001)
35+
AC_10mA = (nidmm.Function.AC_CURRENT, 0.01)
36+
AC_100mA = (nidmm.Function.AC_CURRENT, 0.1)
37+
AC_500mA = (nidmm.Function.AC_CURRENT, 0.5)
38+
AC_1A = (nidmm.Function.AC_CURRENT, 1)
39+
AC_3A = (nidmm.Function.AC_CURRENT, 3)
40+
41+
42+
class DcRmsCurrentMeasurementFunctionParameters:
43+
"""Defines parameters used for configuration of DC-RMS current measurement.."""
44+
45+
def __init__(
46+
self,
47+
measurement_function: CurrentRangeAndFunctions,
48+
resolution_in_digits: ResolutionInDigits,
49+
) -> None:
50+
"""Initializes measurement function parameters.
51+
52+
Args:
53+
measurement_function (CurrentRangeAndFunctions):
54+
The current measurement function and range setting.
55+
resolution_in_digits (ResolutionInDigits):
56+
The measurement resolution in digits.
57+
"""
58+
self._measurement_function = measurement_function
59+
self._resolution_in_digits = resolution_in_digits
60+
61+
@property
62+
def measurement_function(self) -> CurrentRangeAndFunctions:
63+
"""Gets the current measurement function and range setting.
64+
65+
Returns:
66+
CurrentRangeAndFunctions: The configured current range and function.
67+
"""
68+
return self._measurement_function
69+
70+
@property
71+
def resolution_in_digits(self) -> ResolutionInDigits:
72+
"""Gets the measurement resolution in digits.
73+
74+
Returns:
75+
ResolutionInDigits: The configured resolution setting.
76+
"""
77+
return self._resolution_in_digits
78+
79+
80+
class DcRmsCurrentMeasurementConfiguration(PCBATestToolkitData):
81+
"""Defines configuration parameters for current DC-RMS measurements."""
82+
83+
def __init__(
84+
self,
85+
execution_type: MeasurementExecutionType,
86+
measurement_function_parameters: DcRmsCurrentMeasurementFunctionParameters,
87+
trigger_parameters: TriggerParameters,
88+
timing_parameters: TimingParameters,
89+
ac_min_frequency: float,
90+
) -> None:
91+
"""Initializes the current measurement configuration.
92+
93+
Args:
94+
execution_type (MeasurementExecutionType):
95+
Specifies whether to configure only, measure only, or both configure and measure.
96+
measurement_function_parameters (DcRmsCurrentMeasurementFunctionParameters):
97+
The measurement function settings including current range and resolution.
98+
trigger_parameters (TriggerParameters):
99+
Trigger configuration including source, delay, and enable/disable settings.
100+
timing_parameters (TimingParameters):
101+
Timing settings including aperture time and settle time.
102+
ac_min_frequency (float):
103+
Minimum frequency for AC current measurements in Hz (ignored for DC measurements).
104+
"""
105+
self._execution_type = execution_type
106+
self._measurement_function_parameters = measurement_function_parameters
107+
self._trigger_parameters = trigger_parameters
108+
self._timing_parameters = timing_parameters
109+
self._ac_min_frequency = ac_min_frequency
110+
111+
@property
112+
def execution_type(self) -> MeasurementExecutionType:
113+
"""Gets the measurement execution type.
114+
115+
Returns:
116+
MeasurementExecutionType: The execution mode (configure only, measure only, or both).
117+
"""
118+
return self._execution_type
119+
120+
@property
121+
def trigger_parameters(self) -> TriggerParameters:
122+
"""Gets the trigger configuration parameters.
123+
124+
Returns:
125+
TriggerParameters: The trigger settings for the measurement.
126+
"""
127+
return self._trigger_parameters
128+
129+
@property
130+
def measurement_function_parameters(self) -> DcRmsCurrentMeasurementFunctionParameters:
131+
"""Gets the measurement function parameters.
132+
133+
Returns:
134+
DcRmsCurrentMeasurementFunctionParameters: The current range, function,
135+
and resolution settings.
136+
"""
137+
return self._measurement_function_parameters
138+
139+
@property
140+
def timing_parameters(self) -> TimingParameters:
141+
"""Gets the timing configuration parameters.
142+
143+
Returns:
144+
TimingParameters: The aperture time and settle time settings.
145+
"""
146+
return self._timing_parameters
147+
148+
@property
149+
def ac_min_frequency(self) -> float:
150+
"""Gets the minimum AC frequency setting.
151+
152+
Returns:
153+
float: The minimum frequency for AC current measurements.
154+
"""
155+
return self._ac_min_frequency
156+
157+
158+
class DcRmsCurrentMeasurementResultData(PCBATestToolkitData):
159+
"""Defines current DC-RMS results obtained from DMM DC-RMS Current Measurement."""
160+
161+
def __init__(self, dmm_execution_settings: dict, measurement: Union[dict, None]) -> None:
162+
"""Initializes the current measurement result data.
163+
164+
Args:
165+
dmm_execution_settings (dict):
166+
Dictionary containing the DMM configuration used during measurement.
167+
measurement (dict | None):
168+
Dictionary containing the measurement results,
169+
or None if only configuration was performed.
170+
"""
171+
self._dmm_execution_settings = dmm_execution_settings
172+
self._measurement = measurement
173+
174+
@property
175+
def dmm_execution_settings(self) -> dict:
176+
"""Gets the DMM execution settings used during the measurement.
177+
178+
Returns:
179+
dict: Dictionary with labeled keys and values including units for each setting.
180+
"""
181+
return self._dmm_execution_settings
182+
183+
@property
184+
def measurement(self) -> Union[dict, None]:
185+
"""Gets the measurement result data.
186+
187+
Returns:
188+
dict | None: Dictionary containing 'Measured_Value', 'Unit', and
189+
'Formatted_Measurement' keys, or None if only configuration was performed.
190+
"""
191+
return self._measurement

0 commit comments

Comments
 (0)