Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

examples: Update TestStand code modules for NI-Fgen and NI-Switch examples #480

Merged
merged 2 commits into from
Oct 26, 2023
Merged
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
63 changes: 30 additions & 33 deletions examples/nifgen_standard_function/teststand_nifgen.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
"""Functions to set up and tear down sessions of NI-FGEN devices in NI TestStand."""
from typing import Any

import ni_measurementlink_service as nims
import nifgen
from _helpers import GrpcChannelPoolHelper, TestStandSupport
from _nifgen_helpers import create_session
from ni_measurementlink_service.discovery import DiscoveryClient
from ni_measurementlink_service.session_management import (
INSTRUMENT_TYPE_NI_FGEN,
PinMapContext,
SessionInitializationBehavior,
SessionManagementClient,
)


def create_nifgen_sessions(sequence_context: Any) -> None:
Expand All @@ -15,49 +19,42 @@ def create_nifgen_sessions(sequence_context: Any) -> None:
(Dynamically typed.)
"""
with GrpcChannelPoolHelper() as grpc_channel_pool:
session_management_client = nims.session_management.Client(
grpc_channel=grpc_channel_pool.session_management_channel
)

teststand_support = TestStandSupport(sequence_context)
pin_map_id = teststand_support.get_active_pin_map_id()
pin_map_context = nims.session_management.PinMapContext(pin_map_id=pin_map_id, sites=None)
grpc_device_channel = grpc_channel_pool.get_grpc_device_channel(
nifgen.GRPC_SERVICE_INTERFACE_NAME
pin_map_context = PinMapContext(pin_map_id=pin_map_id, sites=None)

discovery_client = DiscoveryClient(grpc_channel_pool=grpc_channel_pool)
session_management_client = SessionManagementClient(
discovery_client=discovery_client, grpc_channel_pool=grpc_channel_pool
)
with session_management_client.reserve_sessions(
context=pin_map_context,
instrument_type_id=nims.session_management.INSTRUMENT_TYPE_NI_FGEN,
pin_map_context,
instrument_type_id=INSTRUMENT_TYPE_NI_FGEN,
) as reservation:
for session_info in reservation.session_info:
# Leave session open
_ = create_session(
session_info,
grpc_device_channel,
initialization_behavior=nifgen.SessionInitializationBehavior.INITIALIZE_SERVER_SESSION,
)
with reservation.initialize_nifgen_sessions(
initialization_behavior=SessionInitializationBehavior.INITIALIZE_SESSION_THEN_DETACH
):
pass

session_management_client.register_sessions(reservation.session_info)


def destroy_nifgen_sessions() -> None:
"""Destroy and unregister all NI-FGEN sessions."""
with GrpcChannelPoolHelper() as grpc_channel_pool:
session_management_client = nims.session_management.Client(
grpc_channel=grpc_channel_pool.session_management_channel
)
grpc_device_channel = grpc_channel_pool.get_grpc_device_channel(
nifgen.GRPC_SERVICE_INTERFACE_NAME
discovery_client = DiscoveryClient(grpc_channel_pool=grpc_channel_pool)
session_management_client = SessionManagementClient(
discovery_client=discovery_client, grpc_channel_pool=grpc_channel_pool
)
with session_management_client.reserve_all_registered_sessions(
instrument_type_id=nims.session_management.INSTRUMENT_TYPE_NI_FGEN,
instrument_type_id=INSTRUMENT_TYPE_NI_FGEN,
) as reservation:
if not reservation.session_info:
return

session_management_client.unregister_sessions(reservation.session_info)
for session_info in reservation.session_info:
session = create_session(
session_info,
grpc_device_channel,
initialization_behavior=nifgen.SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION,
)

session.close()

with reservation.initialize_nifgen_sessions(
initialization_behavior=SessionInitializationBehavior.ATTACH_TO_SESSION_THEN_CLOSE
):
pass
61 changes: 28 additions & 33 deletions examples/niswitch_control_relays/teststand_niswitch.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
"""Functions to set up and tear down sessions of NI-Switch devices in NI TestStand."""
from typing import Any

import ni_measurementlink_service as nims
import niswitch
from _helpers import GrpcChannelPoolHelper, TestStandSupport
from _niswitch_helpers import create_session
from ni_measurementlink_service.discovery import DiscoveryClient
from ni_measurementlink_service.session_management import (
INSTRUMENT_TYPE_NI_RELAY_DRIVER,
PinMapContext,
SessionInitializationBehavior,
SessionManagementClient,
)


def create_niswitch_sessions(sequence_context: Any) -> None:
Expand All @@ -15,51 +19,42 @@ def create_niswitch_sessions(sequence_context: Any) -> None:
(Dynamically typed.)
"""
with GrpcChannelPoolHelper() as grpc_channel_pool:
session_management_client = nims.session_management.Client(
grpc_channel=grpc_channel_pool.session_management_channel
)

teststand_support = TestStandSupport(sequence_context)
pin_map_id = teststand_support.get_active_pin_map_id()
pin_map_context = PinMapContext(pin_map_id=pin_map_id, sites=None)

pin_map_context = nims.session_management.PinMapContext(pin_map_id=pin_map_id, sites=None)
grpc_device_channel = grpc_channel_pool.get_grpc_device_channel(
niswitch.GRPC_SERVICE_INTERFACE_NAME
discovery_client = DiscoveryClient(grpc_channel_pool=grpc_channel_pool)
session_management_client = SessionManagementClient(
discovery_client=discovery_client, grpc_channel_pool=grpc_channel_pool
)
with session_management_client.reserve_sessions(
context=pin_map_context,
instrument_type_id=nims.session_management.INSTRUMENT_TYPE_NI_RELAY_DRIVER,
pin_map_context,
instrument_type_id=INSTRUMENT_TYPE_NI_RELAY_DRIVER,
) as reservation:
for session_info in reservation.session_info:
# Leave session open
_ = create_session(
session_info,
grpc_device_channel,
initialization_behavior=niswitch.SessionInitializationBehavior.INITIALIZE_SERVER_SESSION,
)
with reservation.initialize_niswitch_sessions(
initialization_behavior=SessionInitializationBehavior.INITIALIZE_SESSION_THEN_DETACH
):
pass

session_management_client.register_sessions(reservation.session_info)


def destroy_niswitch_sessions() -> None:
"""Destroy and unregister all NI-Switch sessions."""
with GrpcChannelPoolHelper() as grpc_channel_pool:
session_management_client = nims.session_management.Client(
grpc_channel=grpc_channel_pool.session_management_channel
)
grpc_device_channel = grpc_channel_pool.get_grpc_device_channel(
niswitch.GRPC_SERVICE_INTERFACE_NAME
discovery_client = DiscoveryClient(grpc_channel_pool=grpc_channel_pool)
session_management_client = SessionManagementClient(
discovery_client=discovery_client, grpc_channel_pool=grpc_channel_pool
)
with session_management_client.reserve_all_registered_sessions(
instrument_type_id=nims.session_management.INSTRUMENT_TYPE_NI_RELAY_DRIVER,
instrument_type_id=INSTRUMENT_TYPE_NI_RELAY_DRIVER,
) as reservation:
session_management_client.unregister_sessions(reservation.session_info)
if not reservation.session_info:
return

for session_info in reservation.session_info:
session = create_session(
session_info,
grpc_device_channel,
initialization_behavior=niswitch.SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION,
)
session_management_client.unregister_sessions(reservation.session_info)

session.close()
with reservation.initialize_niswitch_sessions(
initialization_behavior=SessionInitializationBehavior.ATTACH_TO_SESSION_THEN_CLOSE
):
pass
2 changes: 2 additions & 0 deletions ni_measurementlink_service/_drivers/_nifgen.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
SessionInitializationBehavior.AUTO: nifgen.SessionInitializationBehavior.AUTO,
SessionInitializationBehavior.INITIALIZE_SERVER_SESSION: nifgen.SessionInitializationBehavior.INITIALIZE_SERVER_SESSION,
SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION: nifgen.SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION,
SessionInitializationBehavior.INITIALIZE_SESSION_THEN_DETACH: nifgen.SessionInitializationBehavior.INITIALIZE_SERVER_SESSION,
SessionInitializationBehavior.ATTACH_TO_SESSION_THEN_CLOSE: nifgen.SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION,
}


Expand Down
2 changes: 2 additions & 0 deletions ni_measurementlink_service/_drivers/_niswitch.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
SessionInitializationBehavior.AUTO: niswitch.SessionInitializationBehavior.AUTO,
SessionInitializationBehavior.INITIALIZE_SERVER_SESSION: niswitch.SessionInitializationBehavior.INITIALIZE_SERVER_SESSION,
SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION: niswitch.SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION,
SessionInitializationBehavior.INITIALIZE_SESSION_THEN_DETACH: niswitch.SessionInitializationBehavior.INITIALIZE_SERVER_SESSION,
SessionInitializationBehavior.ATTACH_TO_SESSION_THEN_CLOSE: niswitch.SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION,
}


Expand Down
28 changes: 24 additions & 4 deletions ni_measurementlink_service/session_management/_reservation.py
Original file line number Diff line number Diff line change
Expand Up @@ -1175,7 +1175,12 @@ def initialize_nifgen_session(
options,
initialization_behavior,
)
return self._initialize_session_core(session_constructor, INSTRUMENT_TYPE_NI_FGEN)
closing_function = functools.partial(
closing_session_with_ts_code_module_support, initialization_behavior
)
return self._initialize_session_core(
session_constructor, INSTRUMENT_TYPE_NI_FGEN, closing_function
)

@requires_feature(SESSION_MANAGEMENT_2024Q1)
def initialize_nifgen_sessions(
Expand Down Expand Up @@ -1219,7 +1224,12 @@ def initialize_nifgen_sessions(
options,
initialization_behavior,
)
return self._initialize_sessions_core(session_constructor, INSTRUMENT_TYPE_NI_FGEN)
closing_function = functools.partial(
closing_session_with_ts_code_module_support, initialization_behavior
)
return self._initialize_sessions_core(
session_constructor, INSTRUMENT_TYPE_NI_FGEN, closing_function
)

@requires_feature(SESSION_MANAGEMENT_2024Q1)
def get_nifgen_connection(
Expand Down Expand Up @@ -1480,7 +1490,12 @@ def initialize_niswitch_session(
reset_device,
initialization_behavior,
)
return self._initialize_session_core(session_constructor, INSTRUMENT_TYPE_NI_RELAY_DRIVER)
closing_function = functools.partial(
closing_session_with_ts_code_module_support, initialization_behavior
)
return self._initialize_session_core(
session_constructor, INSTRUMENT_TYPE_NI_RELAY_DRIVER, closing_function
)

@requires_feature(SESSION_MANAGEMENT_2024Q1)
def initialize_niswitch_sessions(
Expand Down Expand Up @@ -1531,7 +1546,12 @@ def initialize_niswitch_sessions(
reset_device,
initialization_behavior,
)
return self._initialize_sessions_core(session_constructor, INSTRUMENT_TYPE_NI_RELAY_DRIVER)
closing_function = functools.partial(
closing_session_with_ts_code_module_support, initialization_behavior
)
return self._initialize_sessions_core(
session_constructor, INSTRUMENT_TYPE_NI_RELAY_DRIVER, closing_function
)

@requires_feature(SESSION_MANAGEMENT_2024Q1)
def get_niswitch_connection(
Expand Down