NVision NV9000 Protocol implementation notes

NV9000 protocol for router control is supported in Helm, RouteMaster and RouteMaster VR.

RouteMaster uses the protocol for both outgoing and incoming connections, allowing third-party systems using NV9000 to control RouteMaster.  Helm uses it for outgoing connections to control routers.

NV9000 is only supported via TCP/IP. The standard port number for NV9000 protocol is 9193. However, Helm and RouteMaster can be configured for any port.

Levels

NV9000 protocol supports 32 levels. However, unlike other protocols, each level has separate source and destination mnemonics.  Rascular Products do not support this and currently show mnemonics from a single specified level (see the PrimaryLevel option).

Lock and Protect

NV900 supports per-level lock and protect – which RouteMaster does not fully support yet. When locking or unlocking an output with RouteMaster, all levels will be affected. RouteMaster 2.6.0.4 onwards allows selection of the level which RouteMaster considers the overall ‘lock’ for the output via the LockTallyLevels property. This defaults to the first level on the router.

Physical Ports vs. Device IDs

The NV9000 protocol has two modes of operation:

  • Physical Ports: Control is by port number, which directly corresponds to physical connectors on each router.
  • Device ID: NV9000 maintains a database which exposes numeric Device IDs, and hides the underlying mapping to ports.

Because Device IDs are not necessarily sequential, they’re a poor fit for RouteMaster and Helm’s matrix-based control model, so we strongly recommend that Port-based control (the default) is used. In Helm, setting the UsePhysicalPorts router property to false switches to using Device IDs.  In this mode it’s possible to create a mapping file which assigns specific IDs to RouteMaster’s matrix-based numbering.

When using NV9000 as a client protocol with RouteMaster, both Device ID and Port modes can be used. In this case, Device IDs map directly to port numbers.

Supported and Required Commands

This table details the commands used for outgoing connections, and the commands supported for incoming connections. If a command is not listed here, it’s not currently used or supported.

Physical Port control

Command Outgoing Incoming Notes
Take Input to Output (0x3001) Yes Yes
Lock/Protect  Port (0x3003) Yes Yes
Register for Port changes (0x3005) Yes Yes
Get Physical Crosspoint Status  (0x3007) Yes Yes
Get Physical LPR  status (0x3009) Yes
Execute System Salvo (0x300A) Yes Yes
Get Physical Levels (0x3014) Yes Yes
Get Mnemonics for Ports (0x3015) Yes Yes Mnemonics for the Primary Level (typ. Level 0) are always requested. For incoming commands, the level ID is ignored.
Get Extended Mnemonics for Ports (0x3025) Yes Yes Only if ExtendedNames is set true.

Device ID control

Command Outgoing Incoming Notes
Take Source to Destination (0x3000) Yes Yes
Lock/Protect Device (0x3002) Yes
Register For Changes to Device (0x3004) Yes Yes
Fire Salvo (0x300A) Yes Yes
Get Mnemonics (0x3012) Yes Yes
Get Physical Levels (0x3014) Yes Yes
Get Simple Device Status (0x3017) Yes Yes

Special Properties

For outgoing TCP/IP connections, the following properties can be set directly in Helm Designer, or in the RouteMaster configuration file.

UsePhysicalPorts Boolean, defaults to True Use Port-base control if true, ID-based control if false.
UserID Defaults to zero Indicates the ID of the controlling device to NV9000.
PortIDOffset Defaults to one Allows an offset to be applied to input/output Port IDs used by the protocol.
Some NV9000 implementations (including GV Orbit) number ports from zero rather than one. 
ExtendedNames Boolean, Defaults to True Uses full names from NV9000. If false, names are restricted to 8-character mnemonics.
IgnoreDisconnects Boolean, Defaults to True When true, ignore any tallies with negative source or destination, which typically corresponds to a disconnected output, as RouteMaster does not support this directly.
LockTallyLevels String, defaults to All Levels Determine which level(s) are used to determine lock/unlock status of an output. e.g. “L2” would mean lock tallies other than from Level 2 will be ignored.