# This file was generated
import array
import ctypes
import datetime
import threading
import nitclk._attributes as _attributes
import nitclk._converters as _converters
import nitclk._library_singleton as _library_singleton
import nitclk._visatype as _visatype
import nitclk.errors as errors
# Used for __repr__ and __str__
import pprint
pp = pprint.PrettyPrinter(indent=4)
_session_instance = None
_session_instance_lock = threading.Lock()
# Helper functions for creating ctypes needed for calling into the driver DLL
def get_ctypes_pointer_for_buffer(value=None, library_type=None, size=None):
if isinstance(value, array.array):
assert library_type is not None, 'library_type is required for array.array'
addr, _ = value.buffer_info()
return ctypes.cast(addr, ctypes.POINTER(library_type))
elif str(type(value)).find("'numpy.ndarray'") != -1:
import numpy
return numpy.ctypeslib.as_ctypes(value)
elif isinstance(value, list):
assert library_type is not None, 'library_type is required for list'
return (library_type * len(value))(*value)
else:
if library_type is not None and size is not None:
return (library_type * size)()
else:
return None
[docs]class SessionReference(object):
'''Properties container for NI-TClk attributes.'''
# This is needed during __init__. Without it, __setattr__ raises an exception
_is_frozen = False
exported_sync_pulse_output_terminal = _attributes.AttributeViString(2)
'''Type: str
Specifies the destination of the Sync Pulse. This property is most often used when synchronizing a multichassis system.
Values
Empty string. Empty string is a valid value, indicating that the signal is not exported.
PXI Devices - 'PXI_Trig0' through 'PXI_Trig7' and device-specific settings
PCI Devices - 'RTSI_0' through 'RTSI_7' and device-specific settings
Examples of Device-Specific Settings
- NI PXI-5122 supports 'PFI0' and 'PFI1'
- NI PXI-5421 supports 'PFI0', 'PFI1', 'PFI4', and 'PFI5'
- NI PXI-6551/6552 supports 'PFI0', 'PFI1', 'PFI2', and 'PFI3'
Default Value is empty string
'''
exported_tclk_output_terminal = _attributes.AttributeViString(9)
'''Type: str
Specifies the destination of the device's TClk signal.
Values
Empty string. Empty string is a valid value, indicating that the signal is not exported.
PXI Devices - 'PXI_Trig0' through 'PXI_Trig7' and device-specific settings
PCI Devices - 'RTSI_0' through 'RTSI_7' and device-specific settings
Examples of Device-Specific Settings
- NI PXI-5122 supports 'PFI0' and 'PFI1'
- NI PXI-5421 supports 'PFI0', 'PFI1', 'PFI4', and 'PFI5'
- NI PXI-6551/6552 supports 'PFI0', 'PFI1', 'PFI2', and 'PFI3'
Default Value is empty string
'''
pause_trigger_master_session = _attributes.AttributeSessionReference(6)
'''Type: nimi-python Session class, nitclk.SessionReference, NI-TClk Session Number
Specifies the pause trigger master session.
For external triggers, the session that originally receives the trigger. For None (no trigger configured) or software triggers, the session that originally generates the trigger.
'''
ref_trigger_master_session = _attributes.AttributeSessionReference(4)
'''Type: nimi-python Session class, nitclk.SessionReference, NI-TClk Session Number
Specifies the reference trigger master session.
For external triggers, the session that originally receives the trigger. For None (no trigger configured) or software triggers, the session that originally generates the trigger.
'''
sample_clock_delay = _attributes.AttributeViReal64(11)
'''Type: float
Specifies the sample clock delay.
Specifies the delay, in seconds, to apply to the session sample clock relative to the other synchronized sessions. During synchronization, NI-TClk aligns the sample clocks on the synchronized devices. If you want to delay the sample clocks, set this property before calling synchronize.
not supported for acquisition sessions.
Values - Between minus one and plus one period of the sample clock.
One sample clock period is equal to (1/sample clock rate). For example, for a session with sample rate of 100 MS/s, you can specify sample clock delays between -10.0 ns and +10.0 ns.
Default Value is 0
Note: Sample clock delay is supported for generation sessions only; it is
'''
script_trigger_master_session = _attributes.AttributeSessionReference(5)
'''Type: nimi-python Session class, nitclk.SessionReference, NI-TClk Session Number
Specifies the script trigger master session.
For external triggers, the session that originally receives the trigger. For None (no trigger configured) or software triggers, the session that originally generates the trigger.
'''
sequencer_flag_master_session = _attributes.AttributeSessionReference(16)
'''Type: nimi-python Session class, nitclk.SessionReference, NI-TClk Session Number
Specifies the sequencer flag master session.
For external triggers, the session that originally receives the trigger.
For None (no trigger configured) or software triggers, the session that
originally generates the trigger.
'''
start_trigger_master_session = _attributes.AttributeSessionReference(3)
'''Type: nimi-python Session class, nitclk.SessionReference, NI-TClk Session Number
Specifies the start trigger master session.
For external triggers, the session that originally receives the trigger. For None (no trigger configured) or software triggers, the session that originally generates the trigger.
'''
sync_pulse_clock_source = _attributes.AttributeViString(10)
'''Type: str
Specifies the Sync Pulse Clock source. This property is typically used to synchronize PCI devices when you want to control RTSI 7 yourself. Make sure that a 10 MHz clock is driven onto RTSI 7.
Values
PCI Devices - 'RTSI_7' and 'None'
PXI Devices - 'PXI_CLK10' and 'None'
Default Value - 'None' directs synchronize to create the necessary routes. For PCI, one of the synchronized devices drives a 10 MHz clock on RTSI 7 unless that line is already being driven.
'''
sync_pulse_sender_sync_pulse_source = _attributes.AttributeViString(13)
'''Type: str
Specifies the external sync pulse source for the Sync Pulse Sender. You can use this source to synchronize the Sync Pulse Sender with an external non-TClk source.
Values
Empty string. Empty string is a valid value, indicating that the signal is not exported.
PXI Devices - 'PXI_Trig0' through 'PXI_Trig7' and device-specific settings
PCI Devices - 'RTSI_0' through 'RTSI_7' and device-specific settings
Examples of Device-Specific Settings
- NI PXI-5122 supports 'PFI0' and 'PFI1'
- NI PXI-5421 supports 'PFI0', 'PFI1', 'PFI4', and 'PFI5'
- NI PXI-6551/6552 supports 'PFI0', 'PFI1', 'PFI2', and 'PFI3'
Default Value is empty string
'''
sync_pulse_source = _attributes.AttributeViString(1)
'''Type: str
Specifies the Sync Pulse source. This property is most often used when synchronizing a multichassis system.
Values
Empty string
PXI Devices - 'PXI_Trig0' through 'PXI_Trig7' and device-specific settings
PCI Devices - 'RTSI_0' through 'RTSI_7' and device-specific settings
Examples of Device-Specific Settings
- NI PXI-5122 supports 'PFI0' and 'PFI1'
- NI PXI-5421 supports 'PFI0', 'PFI1', 'PFI2', and 'PFI3'
- NI PXI-6551/6552 supports 'PFI0', 'PFI1', 'PFI2', and 'PFI3'
Default Value - Empty string. This default value directs synchronize to set this property when all the synchronized devices are in one PXI chassis. To synchronize a multichassis system, you must set this property before calling synchronize.
'''
tclk_actual_period = _attributes.AttributeViReal64(8)
'''Type: float
Indicates the computed TClk period that will be used during the acquisition.
'''
def __init__(self, session_number, encoding='windows-1251'):
self._session_number = session_number
self._library = _library_singleton.get()
self._encoding = encoding
# We need a self._repeated_capability string for passing down to function calls on _Library class. We just need to set it to empty string.
self._repeated_capability = ''
# Store the parameter list for later printing in __repr__
param_list = []
param_list.append("session_number=" + pp.pformat(session_number))
param_list.append("encoding=" + pp.pformat(encoding))
self._param_list = ', '.join(param_list)
self._is_frozen = True
def __repr__(self):
return '{0}.{1}({2})'.format('nitclk', self.__class__.__name__, self._param_list)
def __setattr__(self, key, value):
if self._is_frozen and key not in dir(self):
raise AttributeError("'{0}' object has no attribute '{1}'".format(type(self).__name__, key))
object.__setattr__(self, key, value)
def _get_error_description(self, error_code):
'''_get_error_description
Returns the error description.
'''
try:
'''
It is expected for _get_error to raise when the session is invalid
(IVI spec requires GetError to fail).
Use _error_message instead. It doesn't require a session.
'''
error_string = self._get_extended_error_info()
return error_string
except errors.Error:
return "Failed to retrieve error description."
def _get_session_number(self):
return self._session_number
def _get_attribute_vi_real64(self, attribute_id):
r'''_get_attribute_vi_real64
Gets the value of an NI-TClk ViReal64 property.
Tip:
This method requires repeated capabilities (channels). If called directly on the
nitclk.Session object, then the method will use all repeated capabilities in the session.
You can specify a subset of repeated capabilities using the Python index notation on an
nitclk.Session repeated capabilities container, and calling this method on the result.:
session.channels[0,1]._get_attribute_vi_real64(attribute_id)
Args:
attribute_id (int): The ID of the property that you want to get Supported Property
sample_clock_delay
Returns:
value (float): The value that you are getting
'''
session_ctype = _visatype.ViSession(self._session_number) # case S110
channel_name_ctype = ctypes.create_string_buffer(self._repeated_capability.encode(self._encoding)) # case C010
attribute_id_ctype = _visatype.ViAttr(attribute_id) # case S150
value_ctype = _visatype.ViReal64() # case S220
error_code = self._library.niTClk_GetAttributeViReal64(session_ctype, channel_name_ctype, attribute_id_ctype, None if value_ctype is None else (ctypes.pointer(value_ctype)))
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return float(value_ctype.value)
def _get_attribute_vi_session(self, attribute_id):
r'''_get_attribute_vi_session
Gets the value of an NI-TClk ViSession property.
Tip:
This method requires repeated capabilities (channels). If called directly on the
nitclk.Session object, then the method will use all repeated capabilities in the session.
You can specify a subset of repeated capabilities using the Python index notation on an
nitclk.Session repeated capabilities container, and calling this method on the result.:
session.channels[0,1]._get_attribute_vi_session(attribute_id)
Args:
attribute_id (int): The ID of the property that you want to set Supported Properties
start_trigger_master_session
ref_trigger_master_session
script_trigger_master_session
pause_trigger_master_session
Returns:
value (int): The value that you are getting
'''
session_ctype = _visatype.ViSession(self._session_number) # case S110
channel_name_ctype = ctypes.create_string_buffer(self._repeated_capability.encode(self._encoding)) # case C010
attribute_id_ctype = _visatype.ViAttr(attribute_id) # case S150
value_ctype = _visatype.ViSession() # case S220
error_code = self._library.niTClk_GetAttributeViSession(session_ctype, channel_name_ctype, attribute_id_ctype, None if value_ctype is None else (ctypes.pointer(value_ctype)))
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return int(value_ctype.value)
def _get_attribute_vi_string(self, attribute_id):
r'''_get_attribute_vi_string
This method queries the value of an NI-TClk ViString property. You
must provide a ViChar array to serve as a buffer for the value. You pass
the number of bytes in the buffer as bufSize. If the current value of
the property, including the terminating NULL byte, is larger than the
size you indicate in bufSize, the method copies bufSize minus 1 bytes
into the buffer, places an ASCII NULL byte at the end of the buffer, and
returns the array size that you must pass to get the entire value. For
example, if the value is "123456" and bufSize is 4, the method places
"123" into the buffer and returns 7. If you want to call
_get_attribute_vi_string just to get the required array size, pass 0
for bufSize and VI_NULL for the value.
Tip:
This method requires repeated capabilities (channels). If called directly on the
nitclk.Session object, then the method will use all repeated capabilities in the session.
You can specify a subset of repeated capabilities using the Python index notation on an
nitclk.Session repeated capabilities container, and calling this method on the result.:
session.channels[0,1]._get_attribute_vi_string(attribute_id)
Args:
attribute_id (int): The ID of the property that you want to get Supported Properties
sync_pulse_source
sync_pulse_clock_source
exported_sync_pulse_output_terminal
Returns:
value (str): The value that you are getting
'''
session_ctype = _visatype.ViSession(self._session_number) # case S110
channel_name_ctype = ctypes.create_string_buffer(self._repeated_capability.encode(self._encoding)) # case C010
attribute_id_ctype = _visatype.ViAttr(attribute_id) # case S150
buf_size_ctype = _visatype.ViInt32() # case S170
value_ctype = None # case C050
error_code = self._library.niTClk_GetAttributeViString(session_ctype, channel_name_ctype, attribute_id_ctype, buf_size_ctype, value_ctype)
errors.handle_error(self, error_code, ignore_warnings=True, is_error_handling=False)
buf_size_ctype = _visatype.ViInt32(error_code) # case S180
value_ctype = (_visatype.ViChar * buf_size_ctype.value)() # case C060
error_code = self._library.niTClk_GetAttributeViString(session_ctype, channel_name_ctype, attribute_id_ctype, buf_size_ctype, value_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return value_ctype.value.decode(self._encoding)
def _get_extended_error_info(self):
r'''_get_extended_error_info
Reports extended error information for the most recent NI-TClk method
that returned an error. To establish the method that returned an
error, use the return values of the individual methods because once
_get_extended_error_info reports an errorString, it does not report
an empty string again.
Returns:
error_string (str): Extended error description. If errorString is NULL, then it is not large
enough to hold the entire error description. In this case, the return
value of _get_extended_error_info is the size that you should use
for _get_extended_error_info to return the full error string.
'''
error_string_ctype = None # case C050
error_string_size_ctype = _visatype.ViUInt32() # case S170
error_code = self._library.niTClk_GetExtendedErrorInfo(error_string_ctype, error_string_size_ctype)
errors.handle_error(self, error_code, ignore_warnings=True, is_error_handling=True)
error_string_size_ctype = _visatype.ViUInt32(error_code) # case S180
error_string_ctype = (_visatype.ViChar * error_string_size_ctype.value)() # case C060
error_code = self._library.niTClk_GetExtendedErrorInfo(error_string_ctype, error_string_size_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=True)
return error_string_ctype.value.decode(self._encoding)
def _set_attribute_vi_real64(self, attribute_id, value):
r'''_set_attribute_vi_real64
Sets the value of an NI-TClk VIReal64 property.
_set_attribute_vi_real64 is a low-level method that you can use to
set the values NI-TClk properties. NI-TClk contains high-level methods
that set most of the properties. It is best to use the high-level
methods as much as possible.
Tip:
This method requires repeated capabilities (channels). If called directly on the
nitclk.Session object, then the method will use all repeated capabilities in the session.
You can specify a subset of repeated capabilities using the Python index notation on an
nitclk.Session repeated capabilities container, and calling this method on the result.:
session.channels[0,1]._set_attribute_vi_real64(attribute_id, value)
Args:
attribute_id (int): The ID of the property that you want to set Supported Property
sample_clock_delay
value (float): The value for the property
'''
session_ctype = _visatype.ViSession(self._session_number) # case S110
channel_name_ctype = ctypes.create_string_buffer(self._repeated_capability.encode(self._encoding)) # case C010
attribute_id_ctype = _visatype.ViAttr(attribute_id) # case S150
value_ctype = _visatype.ViReal64(value) # case S150
error_code = self._library.niTClk_SetAttributeViReal64(session_ctype, channel_name_ctype, attribute_id_ctype, value_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def _set_attribute_vi_session(self, attribute_id, value):
r'''_set_attribute_vi_session
Sets the value of an NI-TClk ViSession property.
_set_attribute_vi_session is a low-level method that you can use
to set the values NI-TClk properties. NI-TClk contains high-level
methods that set most of the properties. It is best to use the
high-level methods as much as possible.
Tip:
This method requires repeated capabilities (channels). If called directly on the
nitclk.Session object, then the method will use all repeated capabilities in the session.
You can specify a subset of repeated capabilities using the Python index notation on an
nitclk.Session repeated capabilities container, and calling this method on the result.:
session.channels[0,1]._set_attribute_vi_session(attribute_id, value)
Args:
attribute_id (int): The ID of the property that you want to set Supported Properties
start_trigger_master_session
ref_trigger_master_session
script_trigger_master_session
pause_trigger_master_session
value (int): The value for the property
'''
session_ctype = _visatype.ViSession(self._session_number) # case S110
channel_name_ctype = ctypes.create_string_buffer(self._repeated_capability.encode(self._encoding)) # case C010
attribute_id_ctype = _visatype.ViAttr(attribute_id) # case S150
value_ctype = _visatype.ViSession(value) # case S150
error_code = self._library.niTClk_SetAttributeViSession(session_ctype, channel_name_ctype, attribute_id_ctype, value_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def _set_attribute_vi_string(self, attribute_id, value):
r'''_set_attribute_vi_string
Sets the value of an NI-TClk VIString property.
_set_attribute_vi_string is a low-level method that you can use to
set the values of NI-TClk properties. NI-TClk contain high-level
methods that set most of the properties. It is best to use the
high-level methods as much as possible.
Tip:
This method requires repeated capabilities (channels). If called directly on the
nitclk.Session object, then the method will use all repeated capabilities in the session.
You can specify a subset of repeated capabilities using the Python index notation on an
nitclk.Session repeated capabilities container, and calling this method on the result.:
session.channels[0,1]._set_attribute_vi_string(attribute_id, value)
Args:
attribute_id (int): Pass the ID of the property that you want to set Supported Properties
sync_pulse_source
sync_pulse_clock_source
exported_sync_pulse_output_terminal
value (str): Pass the value for the property
'''
session_ctype = _visatype.ViSession(self._session_number) # case S110
channel_name_ctype = ctypes.create_string_buffer(self._repeated_capability.encode(self._encoding)) # case C010
attribute_id_ctype = _visatype.ViAttr(attribute_id) # case S150
value_ctype = ctypes.create_string_buffer(value.encode(self._encoding)) # case C020
error_code = self._library.niTClk_SetAttributeViString(session_ctype, channel_name_ctype, attribute_id_ctype, value_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
class _Session(object):
'''Private class
This class allows reusing function templates that are used in all other drivers. If
we don't do this, we would need new template(s) that the only difference is in the
indentation.
'''
def __init__(self):
self._library = _library_singleton.get()
self._encoding = 'windows-1251'
# Instantiate any repeated capability objects
# Store the parameter list for later printing in __repr__
param_list = []
self._param_list = ', '.join(param_list)
self._is_frozen = True
def _get_error_description(self, error_code):
'''_get_error_description
Returns the error description.
'''
try:
'''
It is expected for _get_error to raise when the session is invalid
(IVI spec requires GetError to fail).
Use _error_message instead. It doesn't require a session.
'''
error_string = self._get_extended_error_info()
return error_string
except errors.Error:
return "Failed to retrieve error description."
''' These are code-generated '''
def configure_for_homogeneous_triggers(self, sessions):
r'''configure_for_homogeneous_triggers
Configures the properties commonly required for the TClk synchronization
of device sessions with homogeneous triggers in a single PXI chassis or
a single PC. Use configure_for_homogeneous_triggers to configure
the properties for the reference clocks, start triggers, reference
triggers, script triggers, and pause triggers. If
configure_for_homogeneous_triggers cannot perform all the steps
appropriate for the given sessions, it returns an error. If an error is
returned, use the instrument driver methods and properties for signal
routing, along with the following NI-TClk properties:
start_trigger_master_session
ref_trigger_master_session
script_trigger_master_session
pause_trigger_master_session
configure_for_homogeneous_triggers affects the following clocks and
triggers: - Reference clocks - Start triggers - Reference triggers -
Script triggers - Pause triggers Reference Clocks
configure_for_homogeneous_triggers configures the reference clocks
if they are needed. Specifically, if the internal sample clocks or
internal sample clock timebases are used, and the reference clock source
is not configured--or is set to None (no trigger
configured)--configure_for_homogeneous_triggers configures the
following: PXI--The reference clock source on all devices is set to be
the 10 MHz PXI backplane clock (PXI_CLK10). PCI--One of the devices
exports its 10 MHz onboard reference clock to RTSI 7. The reference
clock source on all devices is set to be RTSI 7. Note: If the reference
clock source is set to a value other than None,
configure_for_homogeneous_triggers cannot configure the reference
clock source. Start Triggers If the start trigger is set to None (no
trigger configured) for all sessions, the sessions are configured to
share the start trigger. The start trigger is shared by: - Implicitly
exporting the start trigger from one session - Configuring the other
sessions for digital edge start triggers with sources corresponding to
the exported start trigger - Setting
start_trigger_master_session to the session that is
exporting the trigger for all sessions If the start triggers are None
for all except one session, configure_for_homogeneous_triggers
configures the sessions to share the start trigger from the one excepted
session. The start trigger is shared by: - Implicitly exporting start
trigger from the session with the start trigger that is not None -
Configuring the other sessions for digital-edge start triggers with
sources corresponding to the exported start trigger - Setting
start_trigger_master_session to the session that is
exporting the trigger for all sessions If start triggers are configured
for all sessions, configure_for_homogeneous_triggers does not
affect the start triggers. Start triggers are considered to be
configured for all sessions if either of the following conditions is
true: - No session has a start trigger that is None - One session has a
start trigger that is None, and all other sessions have start triggers
other than None. The one session with the None trigger must have
start_trigger_master_session set to itself, indicating
that the session itself is the start trigger master Reference Triggers
configure_for_homogeneous_triggers configures sessions that support
reference triggers to share the reference triggers if the reference
triggers are None (no trigger configured) for all except one session.
The reference triggers are shared by: - Implicitly exporting the
reference trigger from the session whose reference trigger is not None -
Configuring the other sessions that support the reference trigger for
digital-edge reference triggers with sources corresponding to the
exported reference trigger - Setting
ref_trigger_master_session to the session that is
exporting the trigger for all sessions that support reference trigger If
the reference triggers are configured for all sessions that support
reference triggers, configure_for_homogeneous_triggers does not
affect the reference triggers. Reference triggers are considered to be
configured for all sessions if either one or the other of the following
conditions is true: - No session has a reference trigger that is None -
One session has a reference trigger that is None, and all other sessions
have reference triggers other than None. The one session with the None
trigger must have ref_trigger_master_session set to
itself, indicating that the session itself is the reference trigger
master Reference Trigger Holdoffs Acquisition sessions may be configured
with the reference trigger. For acquisition sessions, when the reference
trigger is shared, configure_for_homogeneous_triggers configures
the holdoff properties (which are instrument driver specific) on the
reference trigger master session so that the session does not recognize
the reference trigger before the other sessions are ready. This
condition is only relevant when the sample clock rates, sample clock
timebase rates, sample counts, holdoffs, and/or any delays for the
acquisitions are different. When the sample clock rates, sample clock
timebase rates, and/or the sample counts are different in acquisition
sessions sharing the reference trigger, you should also set the holdoff
properties for the reference trigger master using the instrument driver.
Script Triggers configure_for_homogeneous_triggers configures
sessions that support script triggers to share them, if the script
triggers are None (no trigger configured) for all except one session.
The script triggers are shared in the following ways: - Implicitly
exporting the script trigger from the session whose script trigger is
not None - Configuring the other sessions that support the script
trigger for digital-edge script triggers with sources corresponding to
the exported script trigger - Setting
script_trigger_master_session to the session that is
exporting the trigger for all sessions that support script triggers If
the script triggers are configured for all sessions that support script
triggers, configure_for_homogeneous_triggers does not affect script
triggers. Script triggers are considered to be configured for all
sessions if either one or the other of the following conditions are
true: - No session has a script trigger that is None - One session has a
script trigger that is None and all other sessions have script triggers
other than None. The one session with the None trigger must have
script_trigger_master_session set to itself, indicating
that the session itself is the script trigger master Pause Triggers
configure_for_homogeneous_triggers configures generation sessions
that support pause triggers to share them, if the pause triggers are
None (no trigger configured) for all except one session. The pause
triggers are shared by: - Implicitly exporting the pause trigger from
the session whose script trigger is not None - Configuring the other
sessions that support the pause trigger for digital-edge pause triggers
with sources corresponding to the exported pause trigger - Setting
pause_trigger_master_session to the session that is
exporting the trigger for all sessions that support script triggers If
the pause triggers are configured for all generation sessions that
support pause triggers, configure_for_homogeneous_triggers does not
affect pause triggers. Pause triggers are considered to be configured
for all sessions if either one or the other of the following conditions
is true: - No session has a pause trigger that is None - One session has
a pause trigger that is None and all other sessions have pause triggers
other than None. The one session with the None trigger must have
pause_trigger_master_session set to itself, indicating
that the session itself is the pause trigger master Note: TClk
synchronization is not supported for pause triggers on acquisition
sessions.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
error_code = self._library.niTClk_ConfigureForHomogeneousTriggers(session_count_ctype, sessions_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def finish_sync_pulse_sender_synchronize(self, sessions, min_time):
r'''finish_sync_pulse_sender_synchronize
TBD
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_time (float): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
min_time_ctype = _visatype.ViReal64(min_time) # case S150
error_code = self._library.niTClk_FinishSyncPulseSenderSynchronize(session_count_ctype, sessions_ctype, min_time_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def _get_extended_error_info(self):
r'''_get_extended_error_info
Reports extended error information for the most recent NI-TClk method
that returned an error. To establish the method that returned an
error, use the return values of the individual methods because once
_get_extended_error_info reports an errorString, it does not report
an empty string again.
Returns:
error_string (str): Extended error description. If errorString is NULL, then it is not large
enough to hold the entire error description. In this case, the return
value of _get_extended_error_info is the size that you should use
for _get_extended_error_info to return the full error string.
'''
error_string_ctype = None # case C050
error_string_size_ctype = _visatype.ViUInt32() # case S170
error_code = self._library.niTClk_GetExtendedErrorInfo(error_string_ctype, error_string_size_ctype)
errors.handle_error(self, error_code, ignore_warnings=True, is_error_handling=True)
error_string_size_ctype = _visatype.ViUInt32(error_code) # case S180
error_string_ctype = (_visatype.ViChar * error_string_size_ctype.value)() # case C060
error_code = self._library.niTClk_GetExtendedErrorInfo(error_string_ctype, error_string_size_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=True)
return error_string_ctype.value.decode(self._encoding)
def initiate(self, sessions):
r'''initiate
Initiates the acquisition or generation sessions specified, taking into
consideration any special requirements needed for synchronization. For
example, the session exporting the TClk-synchronized start trigger is
not initiated until after initiate initiates all the sessions
that import the TClk-synchronized start trigger.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
error_code = self._library.niTClk_Initiate(session_count_ctype, sessions_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def is_done(self, sessions):
r'''is_done
Monitors the progress of the acquisitions and/or generations
corresponding to sessions.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
Returns:
done (bool): Indicates that the operation is done. The operation is done when each
session has completed without any errors or when any one of the sessions
reports an error.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
done_ctype = _visatype.ViBoolean() # case S220
error_code = self._library.niTClk_IsDone(session_count_ctype, sessions_ctype, None if done_ctype is None else (ctypes.pointer(done_ctype)))
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return bool(done_ctype.value)
def setup_for_sync_pulse_sender_synchronize(self, sessions, min_time):
r'''setup_for_sync_pulse_sender_synchronize
TBD
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_time (float): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
min_time_ctype = _visatype.ViReal64(min_time) # case S150
error_code = self._library.niTClk_SetupForSyncPulseSenderSynchronize(session_count_ctype, sessions_ctype, min_time_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def synchronize(self, sessions, min_tclk_period=datetime.timedelta(seconds=0.0)):
r'''synchronize
Synchronizes the TClk signals on the given sessions. After
synchronize executes, TClk signals from all sessions are
synchronized. Note: Before using this NI-TClk method, verify that your
system is configured as specified in the PXI Trigger Lines and RTSI
Lines topic of the NI-TClk Synchronization Help. You can locate this
help file at Start>>Programs>>National Instruments>>NI-TClk.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_tclk_period (float in seconds or datetime.timedelta): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
min_tclk_period_ctype = _converters.convert_timedelta_to_seconds(min_tclk_period, _visatype.ViReal64) # case S140
error_code = self._library.niTClk_Synchronize(session_count_ctype, sessions_ctype, min_tclk_period_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def synchronize_to_sync_pulse_sender(self, sessions, min_time):
r'''synchronize_to_sync_pulse_sender
TBD
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_time (float): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
min_time_ctype = _visatype.ViReal64(min_time) # case S150
error_code = self._library.niTClk_SynchronizeToSyncPulseSender(session_count_ctype, sessions_ctype, min_time_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
def wait_until_done(self, sessions, timeout):
r'''wait_until_done
Call this method to pause execution of your program until the
acquisitions and/or generations corresponding to sessions are done or
until the method returns a timeout error. wait_until_done is a
blocking method that periodically checks the operation status. It
returns control to the calling program if the operation completes
successfully or an error occurs (including a timeout error). This
method is most useful for finite data operations that you expect to
complete within a certain time.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
timeout (float): The amount of time in seconds that wait_until_done waits for the
sessions to complete. If timeout is exceeded, wait_until_done
returns an error.
'''
session_count_ctype = _visatype.ViUInt32(0 if sessions is None else len(sessions)) # case S160
sessions_ctype = get_ctypes_pointer_for_buffer(value=_converters.convert_to_nitclk_session_number_list(sessions), library_type=_visatype.ViSession) # case B520
timeout_ctype = _visatype.ViReal64(timeout) # case S150
error_code = self._library.niTClk_WaitUntilDone(session_count_ctype, sessions_ctype, timeout_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return
[docs]def finish_sync_pulse_sender_synchronize(sessions, min_time):
'''finish_sync_pulse_sender_synchronize
TBD
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_time (float): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
return _Session().finish_sync_pulse_sender_synchronize(sessions, min_time)
[docs]def initiate(sessions):
'''initiate
Initiates the acquisition or generation sessions specified, taking into
consideration any special requirements needed for synchronization. For
example, the session exporting the TClk-synchronized start trigger is
not initiated until after initiate initiates all the sessions
that import the TClk-synchronized start trigger.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
'''
return _Session().initiate(sessions)
[docs]def is_done(sessions):
'''is_done
Monitors the progress of the acquisitions and/or generations
corresponding to sessions.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
Returns:
done (bool): Indicates that the operation is done. The operation is done when each
session has completed without any errors or when any one of the sessions
reports an error.
'''
return _Session().is_done(sessions)
[docs]def setup_for_sync_pulse_sender_synchronize(sessions, min_time):
'''setup_for_sync_pulse_sender_synchronize
TBD
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_time (float): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
return _Session().setup_for_sync_pulse_sender_synchronize(sessions, min_time)
[docs]def synchronize(sessions, min_tclk_period):
'''synchronize
Synchronizes the TClk signals on the given sessions. After
synchronize executes, TClk signals from all sessions are
synchronized. Note: Before using this NI-TClk method, verify that your
system is configured as specified in the PXI Trigger Lines and RTSI
Lines topic of the NI-TClk Synchronization Help. You can locate this
help file at Start>>Programs>>National Instruments>>NI-TClk.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_tclk_period (float in seconds or datetime.timedelta): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
return _Session().synchronize(sessions, min_tclk_period)
[docs]def synchronize_to_sync_pulse_sender(sessions, min_time):
'''synchronize_to_sync_pulse_sender
TBD
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
min_time (float): Minimal period of TClk, expressed in seconds. Supported values are
between 0.0 s and 0.050 s (50 ms). Minimal period for a single
chassis/PC is 200 ns. If the specified value is less than 200 ns,
NI-TClk automatically coerces minTime to 200 ns. For multichassis
synchronization, adjust this value to account for propagation delays
through the various devices and cables.
'''
return _Session().synchronize_to_sync_pulse_sender(sessions, min_time)
[docs]def wait_until_done(sessions, timeout):
'''wait_until_done
Call this method to pause execution of your program until the
acquisitions and/or generations corresponding to sessions are done or
until the method returns a timeout error. wait_until_done is a
blocking method that periodically checks the operation status. It
returns control to the calling program if the operation completes
successfully or an error occurs (including a timeout error). This
method is most useful for finite data operations that you expect to
complete within a certain time.
Args:
sessions (list of list of int, list of nimi-python Session class, list of SessionReference): sessions is an array of sessions that are being synchronized.
timeout (float): The amount of time in seconds that wait_until_done waits for the
sessions to complete. If timeout is exceeded, wait_until_done
returns an error.
'''
return _Session().wait_until_done(sessions, timeout)