Examples¶
You can download all nidcpower examples for latest version here
nidcpower_advanced_sequence.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #!/usr/bin/python import argparse import hightime import nidcpower import sys def example(resource_name, options, voltage_max, current_max, points_per_output_function, delay_in_seconds): timeout = hightime.timedelta(seconds=(delay_in_seconds + 1.0)) with nidcpower.Session(resource_name=resource_name, options=options) as session: # Configure the session. session.source_mode = nidcpower.SourceMode.SEQUENCE session.voltage_level_autorange = True session.current_limit_autorange = True session.source_delay = hightime.timedelta(seconds=delay_in_seconds) properties_used = ['output_function', 'voltage_level', 'current_level'] session.create_advanced_sequence(sequence_name='my_sequence', property_names=properties_used, set_as_active_sequence=True) voltage_per_step = voltage_max / points_per_output_function for i in range(points_per_output_function): session.create_advanced_sequence_step(set_as_active_step=False) session.output_function = nidcpower.OutputFunction.DC_VOLTAGE session.voltage_level = voltage_per_step * i current_per_step = current_max / points_per_output_function for i in range(points_per_output_function): session.create_advanced_sequence_step(set_as_active_step=False) session.output_function = nidcpower.OutputFunction.DC_CURRENT session.current_level = current_per_step * i with session.initiate(): session.wait_for_event(nidcpower.Event.SEQUENCE_ENGINE_DONE) channel_indices = '0-{0}'.format(session.channel_count - 1) channels = session.get_channel_names(channel_indices) measurement_group = [session.channels[name].fetch_multiple(points_per_output_function * 2, timeout=timeout) for name in channels] session.delete_advanced_sequence(sequence_name='my_sequence') line_format = '{:<15} {:<4} {:<10} {:<10} {:<6}' print(line_format.format('Channel', 'Num', 'Voltage', 'Current', 'In Compliance')) for i, measurements in enumerate(measurement_group): num = 0 channel_name = channels[i].strip() for measurement in measurements: print(line_format.format(channel_name, num, measurement.voltage, measurement.current, str(measurement.in_compliance))) num += 1 def _main(argsv): parser = argparse.ArgumentParser(description='Output ramping voltage to voltage max, then ramping current to current max.', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('-n', '--resource-name', default='PXI1Slot2/0, PXI1Slot3/0-1', help='Resource names of NI SMUs.') parser.add_argument('-s', '--number-steps', default=256, help='Number of steps per output function') parser.add_argument('-v', '--voltage-max', default=1.0, type=float, help='Maximum voltage (V)') parser.add_argument('-i', '--current-max', default=0.001, type=float, help='Maximum Current (I)') parser.add_argument('-d', '--delay', default=0.05, type=float, help='Source delay (s)') parser.add_argument('-op', '--option-string', default='', type=str, help='Option string') args = parser.parse_args(argsv) example(args.resource_name, args.option_string, args.voltage_max, args.current_max, args.number_steps, args.delay) def main(): _main(sys.argv[1:]) def test_main(): cmd_line = ['--option-string', 'Simulate=1, DriverSetup=Model:4162; BoardType:PXIe', ] _main(cmd_line) def test_example(): options = {'simulate': True, 'driver_setup': {'Model': '4162', 'BoardType': 'PXIe', }, } example('PXI1Slot2/0, PXI1Slot3/1', options, 1.0, 0.001, 256, 0.05) if __name__ == '__main__': main() |
nidcpower_lcr_source_ac_voltage.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #!/usr/bin/python import argparse import nidcpower import sys def example( resource_name, options, lcr_frequency, lcr_impedance_range, cable_length, lcr_voltage_rms, lcr_dc_bias_source, lcr_dc_bias_voltage_level, lcr_measurement_time, lcr_custom_measurement_time, lcr_source_delay_mode, source_delay, ): with nidcpower.Session(resource_name=resource_name, options=options) as session: # Configure the session. session.instrument_mode = nidcpower.InstrumentMode.LCR session.lcr_stimulus_function = nidcpower.LCRStimulusFunction.VOLTAGE session.lcr_frequency = lcr_frequency session.lcr_impedance_range = lcr_impedance_range session.cable_length = cable_length session.lcr_voltage_amplitude = lcr_voltage_rms session.lcr_dc_bias_source = lcr_dc_bias_source session.lcr_dc_bias_voltage_level = lcr_dc_bias_voltage_level session.lcr_measurement_time = lcr_measurement_time session.lcr_custom_measurement_time = lcr_custom_measurement_time session.lcr_source_delay_mode = lcr_source_delay_mode session.source_delay = source_delay with session.initiate(): # Low frequencies require longer settling times than the default timeout for # wait_for_event(), hence 5.0s is set here as a reasonable timeout value session.wait_for_event(event_id=nidcpower.Event.SOURCE_COMPLETE, timeout=5.0) measurements = session.measure_multiple_lcr() for measurement in measurements: print(measurement) session.reset() def _main(argsv): parser = argparse.ArgumentParser( description='Output the specified AC voltage and DC bias voltage, then takes LCR measurements', formatter_class=argparse.ArgumentDefaultsHelpFormatter ) parser.add_argument('-n', '--resource-name', default='PXI1Slot2/0', help='Resource names of NI SMUs') parser.add_argument('-f', '--lcr-frequency', default=10.0e3, type=float, help='LCR frequency (Hz)') parser.add_argument('-i', '--lcr-impedance-range', default=100.0, type=float, help='LCR impedance range (Ω)') parser.add_argument('-c', '--cable-length', default='NI_STANDARD_2M', type=str, choices=tuple(nidcpower.CableLength.__members__.keys()), help='Cable length') parser.add_argument('-v', '--lcr-voltage-rms', default=700.0e-3, type=float, help='LCR voltage RMS (V RMS)') parser.add_argument('-d', '--lcr-dc-bias-source', default='OFF', type=str, choices=tuple(nidcpower.LCRDCBiasSource.__members__.keys()), help='LCR DC bias source') parser.add_argument('-dv', '--lcr-dc-bias-voltage_level', default=0.0, type=float, help='LCR DC bias voltage (V)') parser.add_argument('-t', '--lcr-measurement-time', default='MEDIUM', type=str, choices=tuple(nidcpower.LCRMeasurementTime.__members__.keys()), help='LCR measurement time') parser.add_argument('-ct', '--lcr-custom-measurement-time', default=10.0e-3, type=float, help='LCR custom measurement time (s)') parser.add_argument('-sm', '--lcr-source-delay-mode', default='AUTOMATIC', type=str, choices=tuple(nidcpower.LCRSourceDelayMode.__members__.keys()), help='LCR source delay mode') parser.add_argument('-s', '--source-delay', default=16.66e-3, type=float, help='Source delay (s)') parser.add_argument('-op', '--option-string', default='', type=str, help='Option string') args = parser.parse_args(argsv) example( resource_name=args.resource_name, options=args.option_string, lcr_frequency=args.lcr_frequency, lcr_impedance_range=args.lcr_impedance_range, cable_length=getattr(nidcpower.CableLength, args.cable_length), lcr_voltage_rms=args.lcr_voltage_rms, lcr_dc_bias_source=getattr(nidcpower.LCRDCBiasSource, args.lcr_dc_bias_source), lcr_dc_bias_voltage_level=args.lcr_dc_bias_voltage_level, lcr_measurement_time=getattr(nidcpower.LCRMeasurementTime, args.lcr_measurement_time), lcr_custom_measurement_time=args.lcr_custom_measurement_time, lcr_source_delay_mode=getattr(nidcpower.LCRSourceDelayMode, args.lcr_source_delay_mode), source_delay=args.source_delay, ) def main(): _main(sys.argv[1:]) def test_example(): example( resource_name='PXI1Slot2/0', options={'simulate': True, 'driver_setup': {'Model': '4190', 'BoardType': 'PXIe', }, }, lcr_frequency=10.0e3, lcr_impedance_range=100.0, cable_length=nidcpower.CableLength.NI_STANDARD_2M, lcr_voltage_rms=700.0e-3, lcr_dc_bias_source=nidcpower.LCRDCBiasSource.OFF, lcr_dc_bias_voltage_level=0.0, lcr_measurement_time=nidcpower.LCRMeasurementTime.MEDIUM, lcr_custom_measurement_time=10.0e-3, lcr_source_delay_mode=nidcpower.LCRSourceDelayMode.AUTOMATIC, source_delay=16.66e-3, ) def test_main(): cmd_line = ['--option-string', 'Simulate=1, DriverSetup=Model:4190; BoardType:PXIe', ] _main(cmd_line) if __name__ == '__main__': main() |
nidcpower_measure_record.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #!/usr/bin/python import argparse import nidcpower import sys def example(resource_name, options, voltage, length): with nidcpower.Session(resource_name=resource_name, options=options) as session: # Configure the session. session.measure_record_length = length session.measure_record_length_is_finite = True session.measure_when = nidcpower.MeasureWhen.AUTOMATICALLY_AFTER_SOURCE_COMPLETE session.voltage_level = voltage session.commit() print('Effective measurement rate: {0} S/s'.format(session.measure_record_delta_time / 1)) print('Channel Num Voltage Current In Compliance') row_format = '{0:15} {1:3d} {2:8.6f} {3:8.6f} {4}' with session.initiate(): channel_indices = '0-{0}'.format(session.channel_count - 1) channels = session.get_channel_names(channel_indices) for i, channel_name in enumerate(channels): samples_acquired = 0 while samples_acquired < length: measurements = session.channels[channel_name].fetch_multiple(count=session.fetch_backlog) samples_acquired += len(measurements) for i in range(len(measurements)): print(row_format.format(channel_name, i, measurements[i].voltage, measurements[i].current, measurements[i].in_compliance)) def _main(argsv): parser = argparse.ArgumentParser(description='Outputs the specified voltage, then takes the specified number of voltage and current readings.', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('-n', '--resource-name', default='PXI1Slot2/0, PXI1Slot3/0-1', help='Resource names of NI SMUs.') parser.add_argument('-l', '--length', default='20', type=int, help='Measure record length per channel') parser.add_argument('-v', '--voltage', default=5.0, type=float, help='Voltage level (V)') parser.add_argument('-op', '--option-string', default='', type=str, help='Option string') args = parser.parse_args(argsv) example(args.resource_name, args.option_string, args.voltage, args.length) def main(): _main(sys.argv[1:]) def test_example(): options = {'simulate': True, 'driver_setup': {'Model': '4162', 'BoardType': 'PXIe', }, } example('PXI1Slot2/0, PXI1Slot3/1', options, 5.0, 20) def test_main(): cmd_line = ['--option-string', 'Simulate=1, DriverSetup=Model:4162; BoardType:PXIe', ] _main(cmd_line) if __name__ == '__main__': main() |
nidcpower_source_delay_measure.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #!/usr/bin/python import argparse import hightime import nidcpower import sys def print_fetched_measurements(measurements): print(' Voltage : {:f} V'.format(measurements[0].voltage)) print(' Current: {:f} A'.format(measurements[0].current)) print(' In compliance: {0}'.format(measurements[0].in_compliance)) def example(resource_name, options, voltage1, voltage2, delay): timeout = hightime.timedelta(seconds=(delay + 1.0)) with nidcpower.Session(resource_name=resource_name, options=options) as session: # Configure the session. session.source_mode = nidcpower.SourceMode.SINGLE_POINT session.output_function = nidcpower.OutputFunction.DC_VOLTAGE session.current_limit = .06 session.voltage_level_range = 5.0 session.current_limit_range = .06 session.source_delay = hightime.timedelta(seconds=delay) session.measure_when = nidcpower.MeasureWhen.AUTOMATICALLY_AFTER_SOURCE_COMPLETE session.voltage_level = voltage1 with session.initiate(): channel_indices = '0-{0}'.format(session.channel_count - 1) channels = session.get_channel_names(channel_indices) for channel_name in channels: print('Channel: {0}'.format(channel_name)) print('---------------------------------') print('Voltage 1:') print_fetched_measurements(session.channels[channel_name].fetch_multiple(count=1, timeout=timeout)) session.voltage_level = voltage2 # on-the-fly set print('Voltage 2:') print_fetched_measurements(session.channels[channel_name].fetch_multiple(count=1, timeout=timeout)) session.output_enabled = False print('') def _main(argsv): parser = argparse.ArgumentParser(description='Outputs voltage 1, waits for source delay, and then takes a measurement. Then orepeat with voltage 2.', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('-n', '--resource-name', default='PXI1Slot2/0, PXI1Slot3/0-1', help='Resource names of an NI SMUs.') parser.add_argument('-v1', '--voltage1', default=1.0, type=float, help='Voltage level 1 (V)') parser.add_argument('-v2', '--voltage2', default=2.0, type=float, help='Voltage level 2 (V)') parser.add_argument('-d', '--delay', default=0.05, type=float, help='Source delay (s)') parser.add_argument('-op', '--option-string', default='', type=str, help='Option string') args = parser.parse_args(argsv) example(args.resource_name, args.option_string, args.voltage1, args.voltage2, args.delay) def main(): _main(sys.argv[1:]) def test_main(): cmd_line = ['--option-string', 'Simulate=1, DriverSetup=Model:4162; BoardType:PXIe', ] _main(cmd_line) def test_example(): options = {'simulate': True, 'driver_setup': {'Model': '4162', 'BoardType': 'PXIe', }, } example('PXI1Slot2/0, PXI1Slot3/1', options, 1.0, 2.0, 0.05) if __name__ == '__main__': main() |