The problem is caused by a combination of the IVI standard, IVI-specific switch driver behavior, and NI Switch Executive. This combination of requirements causes exclusions to be violated with SPDT relays. Due to the tradeoffs involved, "Exclusions with SPDTs" is not an implemented feature of NI Switch Executive.
What is an Exclusion?
Exclusions are connection rules used to prevent specific channels from connecting to one another - primarily used for safety purposes. Let's say an exclusion is set up to prevent NO0 from connecting to NO1. A real world example would be that NO0 and NO1 are both connected to different power supplies, and we don't want to connect the supply outputs together. Once set up, before every Connect call, NI Switch Executive must verify this route will not occur. If it will, then NI Switch Executive will return an error citing the proposed connection will result in the creation of an excluded route.
Background On IVI Switch Class Driver
Switch Executive calls into the IVI Switch class driver. IVI requires all relay connections to be disconnected before a new, different connection can be made. This doesn't make much sense with SPDT relays, where there is no disconnected state. As shown below, an SPDT relay is always connected to either the Normally Closed terminal (NC) or the Normally Open terminal (NO). It cannot be disconnected from both!
To make software work with SPDTs and IVI requirements, IVI-compliant driver software typically stores the state of SPDT relays in a unique and potentially confusing manner. The example below is comprised of two relays with their COMs connected together (hardwired together). On the left are the default physical relay states in hardware. On the right is how IVI-compliant drivers typically characterize the default relay states in software.
As shown above, the default state in software is characterized by no connection. Although this might be confusing to a user, this characterization is recommended and is done so either the Normally Closed or Normally Open terminals can be initially connected to COM upon the first function call (without first requiring a disconnect call).
The "ability to connect initially without disconnect" feature of IVI-specific driver software (i.e. NI-Switch) results in an inability for NI Switch Executive to determine SPDT hardware states in certain circumstances. In the end, there exist the exclusion caveats with SPDTs that are discussed in this document.
The Issue: Exclusions can be violated when using SPDTs
We can violate the exclusions by performing the following sequence:
- Starting from our default state
- Connecting NO0 to COM0
- Disconnecting NO0 from COM0
- Connecting NO1 to COM1
This creates the following hardware and software states.
As shown above, on Step 4 the software state does not detect the excluded route is created, but the hardware state is now in the undesired state! This sequence of connections has violated the exclusion. Note that step 3, disconnecting NO0 from COM0, is the step where NI Switch Executive loses the required hardware state.
- The Solution
Note that if a step in inserted between step 3 and 4, connecting NC0 to COM0, then NI Switch Executive does not lose the required hardware state and the exclusion is caught (not violated).
This is the cautionary use case that is required to prevent problems when using SPDTs: Always Connect a SPDT relay immediately after a Disconnect.
To summarize, the problem is caused by a combination of the IVI standard, IVI-specific switch driver behavior, and NI Switch Executive. This combination of requirements causes exclusions to be violated with SPDT relays. Due to the tradeoffs involved, "Exclusions with SPDTs" is not an implemented feature of NI Switch Executive. Once again, to avoid any and all issues: Always Connect a SPDT relay immediately after a Disconnect.