-
Notifications
You must be signed in to change notification settings - Fork 50
Sharing Driver Sessions Between Clients
The NI gRPC Device Server allows sharing driver sessions between multiple gRPC clients. This enables test architects to build applications, services, and systems that share driver sessions between multiple OS processes, network hosts, and/or programming languages.
Session names are user-specified names that identify driver sessions on the NI gRPC Device Server. Specifying a name for a session enables sharing the session between multiple gRPC clients. To specify a session name, set the session_name
field in the initialize request.
If you do not specify a session name, or you specify an empty string, the NI gRPC Device Server automatically chooses a unique name.
For example, niscope.proto
defines InitWithOptionsRequest
:
message InitWithOptionsRequest {
string session_name = 1;
string resource_name = 2;
bool id_query = 3;
bool reset_device = 4;
string option_string = 5;
nidevice_grpc.SessionInitializationBehavior initialization_behavior = 6;
}
This code from one of the Python example programs initializes an NI-SCOPE session, setting its session name to "demo":
init_result = niscope_client.InitWithOptions(
niscope_types.InitWithOptionsRequest(
session_name="demo",
resource_name=RESOURCE,
id_query=False,
option_string=OPTIONS,
)
)
When multiple clients execute this code:
- The first initialize call creates a session named "demo" on the server, with the specified resource name and option string.
- Subsequent initialize calls returns the same session as the first call, without creating a new session.
Note
The NI gRPC Device Server only uses the session name to identify sessions. If a session with the specified name already exists, the NI gRPC Device Server ignores the specified resource name, channel string, option string, etc.
The initialization_behavior
setting in the initialize request tells NI gRPC Device Server whether to create a new driver session or attach to an existing driver session.
The SessionInitializationBehavior
enum is defined in session.proto
:
enum SessionInitializationBehavior {
SESSION_INITIALIZATION_BEHAVIOR_UNSPECIFIED = 0;
SESSION_INITIALIZATION_BEHAVIOR_INITIALIZE_NEW = 1;
SESSION_INITIALIZATION_BEHAVIOR_ATTACH_TO_EXISTING = 2;
}
Possible settings:
-
UNSPECIFIED
(default): The NI gRPC Device Server will attach to an existing session with the specified name if it exists, otherwise the server will initialize a new session. -
INITIALIZE_NEW
: Require the NI gRPC Device Server to initialize a new session with the specified name. If a session with the specified name already exists, the initialize call fails with gRPC status codeALREADY_EXISTS
. -
ATTACH_TO_EXISTING
: Require the NI gRPC Device Server to attach to an existing session with the specified name. If a session with the specified name does not exist, the initialize call fails with gRPC status codeFAILED_PRECONDITION
.
For documentation on gRPC session naming/initialization in NI Modular Instruments LabVIEW APIs, see the appropriate Initialize for gRPC Session, Attach gRPC Session, and Detach gRPC Session VIs for the API you are using.
For documentation on gRPC session naming/initialization in NI Modular Instruments Python APIs, see the gRPC Support page for the API you are using.
Operation | LabVIEW | Python |
---|---|---|
Automatically create or attach | not supported | Specify SessionInitializationBehavior.AUTO (default) in gRPC options |
Automatically close or detach | not supported | Use context manager: with Session(...) as session:
|
Create a new session on the server | Call Initialize for gRPC Session VI |
Specify SessionInitializationBehavior.INITIALIZE_SERVER_SESSION in gRPC options |
Attach to an existing session on the server | Call Attach gRPC Session VI |
Specify SessionInitializationBehavior.ATTACH_TO_SERVER_SESSION in gRPC options |
Detach from the session on the server | Call Detach gRPC Session VI |
Discard session object without calling session.close()
|
Close the session on the server | Call close VI |
Call session.close()
|
Note
The
SessionInitializationBehavior
enum value names are different in Python vs.session.proto
.
Note
MeasurementLink measurement services in LabVIEW should use the
session exists
field in theReserveSessions
response to decide whether to create/close or attach/detach.
For NI gRPC Device Server, a NI-DAQmx task is considered to be a type of driver session. nidaqmx.proto
's equivalent of the session initialize request is CreateTaskRequest
:
message CreateTaskRequest {
string session_name = 1;
nidevice_grpc.SessionInitializationBehavior initialization_behavior = 2;
}
NI-DAQmx tasks have names (independent of NI gRPC Device Server), which are used to refer to saved tasks in NI MAX and LabVIEW projects. The NI gRPC Device Server uses the session name as the NI-DAQmx task name. If a saved task with the same name exists in NI MAX, CreateTaskRequest
will return an error, but you can use LoadTaskRequest
to load the saved task.
For documentation on gRPC session naming/initialization in the NI-DAQmx Python API, see the nidaqmx.grpc_session_options
page.
To enable gRPC remoting with NI-VISA 2024Q2 or later, pass grpc://{address}/{resource_name}?init_behavior={init_behavior}&session_name={session_name}
as the VISA resource name. Example: grpc://localhost:31756/GPIB::2::INSTR?init_behavior=0&session_name=MySession
.
Initialization Behavior | Close Behavior |
init_behavior Value |
---|---|---|
Automatically create or attach | Automatically close or detach server session | 0 |
Create a new session on the server | Close server session | 1 |
Attach to an existing session on the server | Detach server session | 2 |
Create a new session on the server | Detach server session | 3 |
Attach to an existing session on the server | Close server session | 4 |
In LabVIEW, you can use VISA Open for gRPC Session.vi
or VISA Format gRPC URI.vi
to build a grpc://
URI.
Creating and Setting Up a gRPC Server
Session Utilities API Reference
gRPC API Differences From C API
Sharing Driver Sessions Between Clients
C API Docs
NI-DAQmx
- gRPC API Differences From C API
- Task Configuration And Control
- Channel Configuration And Creation
- Timing
- Triggering
- Read Functions
- Write Functions
- Export Hardware Signals
- Scale Configuration
- Internal Buffer Configuration
- Advanced Functions
- System Configuration
- Error Handling
- Buffer Attributes
- Calibration Info Attributes
- Channel Attributes
- Device Attributes
- Export Signal Attributes
- Persisted Channel Attributes
- Persisted Scale Attributes
- Persisted Task Attributes
- Physical Channel Attributes
- Read Attributes
- Scale Attributes
- System Attributes
- Task Attributes
- Timing Attributes
- Trigger Attributes
- Watchdog Attributes
- Write Attributes
NI-DCPOWER
- Setup Functions
- Configure Functions
- Measurement Functions
- Control Functions
- Trigger And Event
- Attribute Functions
- Query Functions
- Calibration Functions
- Utility Functions
- Supported Device
- Source Attributes
- Transient Attributes
- Voltage Attributes
- Current Attributes
- Pulse Voltage Attributes
- Pulse Current Attributes
- Cutoff Attributes
- Measurement Attributes
- Trigger Attributes Functions
- Event Attributes
- Advanced Attributes
- Inherent Ivi Attributes
- Supported Device Attributes
NI-DIGITAL PATTERN DRIVER
- Init And Close Functions
- Session Locking Functions
- Utility Functions
- Error Handling Functions
- Calibration Functions
- Attributes Functions
- Pin Map Functions
- Low Level Functions
- Low Level Action Functions
- Pin Control Functions
- Static IO Functions
- Clock Generator Functions
- Levels And Timing Functions
- TDR Functions
- PPMU Configuration Functions
- DC Voltage Functions
- DC Current Functions
- PPMU Action Functions
- Pattern Configuration Functions
- Pattern Action Functions
- History Ram Functions
- Source Memory Functions
- Capture Memory Functions
- Triggers And Events Functions
- Conditional Jump Trigger Functions
- Sequencer Flag Functions
- Sequencer Register Functions
- Match Fail Combination Functions
- Pattern Results Functions
- Sort Results Functions
- Frequency Measurement Functions
- IVI Inherent Attributes
- Specific Driver Information Attributes, Read Only
- Driver Setup Information Attributes
- Device Attributes
- Pin Control Attributes
- Level Configuration Attributes
- Trigger Configuration Attributes
- PPMU Attributes
- Patterns Attributes
- Pattern Opcode Event Attributes
- Timing Offset Attributes
- Keep Alive Attributes
- Frequency Measurement Attributes
- Clock Generator Attributes
- History RAM
- Synchronization Attributes
- TDR Endpoint Termination Attributes
NI-FGEN
- Setup Functions
- Configuration Functions
- Standard Output Functions
- Arbitrary Waveform Output Functions
- Arbitrary Sequence Output Functions
- Incremental Waveform Write Functions
- Configure Clock Functions
- Trigger And Syncronizations Functions
- 5404 Routing Functions
- Script Output Functions
- Configure Onboard Signal Processing Functions
- Configure Peer To Peer Functions
- Attribute Functions
- Waveform Control Functions
- Error Functions
- Output Attributes
- Arbitrary Waveform Attributes
- Data Transfer Attributes
- Onboard Signal Processing Attributes
- Peer To Peer Attributes
- Standard Function Attributes
- Clock Attributes
- Event Attributes
- Triggering Attributes
- Instrument Specific Attributes
- Inherent IVI Attributes
- 5401 5411 5431
NI-RFmx Bluetooth
- gRPC API Differences From C API
- General Functions
- Configuration Functions
- Set And Get Attribute Functions
- Fetch Results Functions
- Utility Functions
- Build String Functions
- Advanced Functions
- General Attributes
- Trigger Attributes
- Packet Attributes
- Auto Detect Signal Attributes
- Modacc Attributes
- ACP Attributes
- Twenty dB Attributes
- Frequency Range Attributes
- TXP Attributes
- Advanced Attributes
NI-RFmx NR
- gRPC API Differences From C API
- General Functions
- Configuration Functions
- Set And Get Attributes Functions
- Fetch Results Functions
- Utility Functions
- Build String Functions
- Advanced Functions
- General Attributes
- Trigger Attributes
- Signal Detection Attributes
- Component Carrier Attributes
- List Attributes
- Modacc Attributes
- ACP Attributes
- CHP Attributes
- OBW Attributes
- SEM Attributes
- TXP Attributes
- Pvt Attributes
- Advanced Attributes
NI-RFmx LTE
- gRPC API Differences From C API
- General Functions
- Configuration Functions
- Ch Configuration Functions
- NB IoT Configuration Functions
- ModAcc Configuration Functions
- ACP Configuration Functions
- CHP Configuration Functions
- OBW Configuration Functions
- SEM Configuration Functions
- PVT Configuration Functions
- SlotPhase Configuration Functions
- SlotPower Configuration Functions
- Set And Get Attribute Functions
- ModAcc Fetch Functions
- ACP Fetch Functions
- CHP Fetch Functions
- OBW Fetch Functions
- SEM Fetch Functions
- PVT Fetch Functions
- SlotPhase Fetch Functions
- SlotPower Fetch Functions
- Utility Functions
- Build String Functions
- Advanced Functions
- General Attributes
- Trigger Attributes
- Component Carrier Attributes
- ModAcc Attributes
- ACP Attributes
- CHP Attributes
- OBW Attributes
- SEM Attributes
- PVT Attributes
- SlotPhase Attributes
- SlotPower Attributes
- Advanced Attributes
NI-RFmx SpecAn
- gRPC API Differences From C API
- General Functions
- Configuration Functions
- Set And Get Attribute Functions
- Read Functions
- Fetch Functions
- Utility Functions
- Marker Functions
- Build String Functions
- Advanced Functions
- General Attributes
- Trigger Attributes
- ACP Attributes
- Cdf Attributes
- CHP Attributes
- Fcnt Attributes
- Harm Attributes
- OBW Attributes
- SEM Attributes
- Spectrum Attributes
- Spur Attributes
- TXP Attributes
- AMPM Attributes
- Dpd Attributes
- IQ Attributes
- IM Attributes
- NF Attributes
- Phasenoise Attributes
- PAVT Attributes
- Advanced Attributes
NI-RFmx WLAN
- gRPC API Differences From C API
- General Functions
- Configuration Functions
- Set And Get Attribute Functions
- Fetch DSSS ModAcc Functions
- Fetch OFDM ModAcc Functions
- Fetch SEM Functions
- Fetch TXP Functions
- Fetch PowerRamp Functions
- Utility Functions
- Build String Functions
- Advanced Functions
- General Attributes
- Trigger Attributes
- OFDM Attributes
- Auto Detect Signal Attributes
- DSSS ModAcc Attributes
- OFDM ModAcc Attributes
- SEM Attributes
- TXP Attributes
- PowerRamp Attributes
- Advanced Attributes
NI-RFSA
- General Functions
- Configuration Functions
- Acquisition Functions
- Utility Functions
- Calibration Functions
- General Attributes
- Vertical Attributes
- Signal Path Attributes
- Acquisition Attributes
- Acquisition Attributes
- Triggers Attributes
- Events Attributes
- Device Characteristics Attributes
- Peer To Peer Streaming Attributes
- Configuration List Attributes
- Inherent IVI Properties Attributes
- De-embedding Attributes
- Self Calibration Attributes
- Factory Calibration Attributes
- External Alignment Attributes
- Device Specific Attributes
NI-RFSG
- General Functions
- Generation Configuration
- Utility Functions
- Calibration Functions
- Arb Attributes
- Clock Attributes
- Configuration List Attributes
- De-embedding Attributes
- Device Characteristics Attributes
- Device Specific Attributes
- Events Attributes
- External Calibration Attributes
- Inherent IVI Attributes Attributes
- IQ Impairment Attributes
- Load Configurations Attributes
- Modulation Attributes
- Obsolete Attributes
- Peer To Peer Attributes
- RF Attributes
- Self Calibration Attributes
- Triggers Attributes
NI-SCOPE
- Setup Functions
- Configure Functions
- Attribute Functions
- Acquisition Functions
- Measurement Functions
- Calibrate Functions
- Utility Funcitons
- Error Handling Functions
- IVI Compliance Or Obsolete Functions
- Vertical Attributes
- Horizontal Attributes
- Trigger Attributes
- Clocking Attributes
- Synchronization Attributes
- Acquisition Attributes
- Waveform Measurements Attributes
- Onboard Signal Processing Attributes
- Peer To Peer Streaming Attributes
- Device Attributes
- IVI Or Obsolete Attributes
- Instrument Capabilities Attributes
- If Digitizer Attributes
NI-XNET
- gRPC API differences from C APIs
- General Functions
- Cluster Properties
- Database Properties
- Device Properties
- ECU Properties
- Frame Properties
- Interface Properties
- LIN Schedule Entry Properties
- LIN Schedule Properties
- PDU Properties
- Session Ethernet Properties
- Session Frame Properties
- Session Interface Properties
- Session Properties
- Session SAE J1939 Properties
- Signal Properties
- Subframe Properties
- System Properties
- IP-Stack Functions
- Socket Options
- Socket Functions