Appearance
Devices and drivers
Every device Nexus talks to is one entry under deviceConnections in the configuration file, and one card under Devices in the configuration interface. The entry carries the connection settings and nothing else — which registers it reads comes from the tags bound to it, not from a list on the device.
What Nexus can talk to
driver | Talks to |
|---|---|
opc-ua | Any conformant OPC UA server. The default when driver is absent. |
ab-eip | Allen-Bradley over EtherNet/IP — ControlLogix, CompactLogix 5370 and later. |
siemens-s7 | Siemens S7 — see plcType below for the family. |
modbus-tcp | Modbus over TCP. |
modbus-rtu | Modbus over a serial line. |
click | AutomationDirect CLICK and CLICK PLUS over TCP. |
click-rtu | The same, over a serial line. |
omron-fins | Omron FINS over TCP. |
omron-fins-udp | Omron FINS over UDP. |
dnp3 | DNP3 outstations. |
bacnet-ip | BACnet/IP building plant and HVAC. |
Nexus is also an OPC UA server, which is a separate thing from the opc-ua driver: the driver connects out to someone else's server, while the server lets another system connect in to Nexus.
Settings every device has
json
{
"deviceConnections": [
{
"name": "PLC150",
"driver": "modbus-tcp",
"endpoint": "192.168.1.50",
"port": 502,
"enabled": true,
"pollRateMs": 1000,
"timeoutMs": 2000,
"reconnectDelayMs": 3000
}
]
}name is what tags refer to. Changing it after tags are bound to the device breaks those bindings, so rename in the configuration interface rather than by hand in the file.
pollRateMs is the fallback rate. A tag whose tag group sets a rate is scanned at the group's rate instead — see Tag groups below.
There is no address list on a device
Earlier development builds carried addresses[] and subscribeAll on the device. Both are gone. A device polls exactly the tags bound to it, so adding a tag in Studio starts it scanning without editing the device or restarting Nexus.
Allen-Bradley
json
{
"driver": "ab-eip",
"gateway": "192.168.1.10",
"path": "1,0",
"plcType": "ControlLogix"
}gateway is the controller's address and path is the CIP route to the processor — commonly 1,0 for a slot-0 processor in a single-rack chassis. slot is accepted as the simpler form of the same idea.
Siemens S7
plcType selects the family: s7-300, s7-400, s7-1200 or s7-1500. rack and slot locate the processor; a 1200 or 1500 is normally rack 0, slot 1, while a 300 or 400 depends on how the chassis is populated. pduSize caps the negotiated PDU if the processor needs it held down.
Modbus, and CLICK
Modbus registers are 16 bits, so anything wider — a 32-bit integer, a float — spans two of them, and the two ends have to agree on the order.
| Setting | Meaning |
|---|---|
wordOrder | big or little — which 16-bit word comes first. |
byteOrder | big or little — byte order inside each word. |
unitId | Modbus unit/slave id. |
The two are independent, which is what gives the four orderings a Modbus device might use. If a float reads as a wild number but its bytes look familiar, this is the setting to change.
CLICK addressing
CLICK is Modbus underneath, so click is the modbus-tcp driver with the CLICK address book on top: tags are addressed in CLICK notation — DS100, DF30, Y002, C15 — and Nexus translates them.
- The dialect is per device, not per address.
wordOrderdefaults tolittlefor CLICK, which is what the PLC expects.X,TandCTare read-only. Nexus refuses a write rather than silently dropping it.TXT(the half-register string packing) is refused, not approximated — a partial implementation would corrupt text rather than fail visibly.
DNP3
outstationAddress and masterAddress are the DNP3 link addresses. eventPollEveryNCycles controls how often an event poll is issued relative to ordinary integrity polls, and maxObjectsPerRequest caps request size for outstations that dislike large ones.
DNP3 outstations can supply their own sequence-of-events timestamps. Where one does, Nexus records that timestamp as the source time rather than the moment it received the value.
Omron FINS
localNode and remoteNode are the FINS node numbers for Nexus and the PLC. Use omron-fins over TCP where the network is reliable, and omron-fins-udp where the PLC or the intervening network expects UDP.
Tag groups and scan rates
A device does not have one rate. Each tag belongs to a tag group, and the group sets how often that tag is scanned:
| Mode | Scanned |
|---|---|
direct | At a fixed rateMs. |
leased | Quickly while something is watching that tag; slowly otherwise. |
driven | Quickly while an expression is true. |
A fresh gateway ships with default-fast (250 ms), default-slow (5000 ms) and default-historical (10 s). A tag naming no group falls back to a built-in default.
staleMultiplier decides when a tag with no fresh reading is marked Stale: the tag goes stale after rateMs × staleMultiplier without an update, and returns to Good as soon as it is being read again.
Choose a rate the link can actually keep up with
A scan class faster than the device can answer does not make data arrive sooner; it makes the poll fall behind. If tags flicker to Stale under load, the rate is too low for the number of tags on that device, not the other way round.
When a device drops
A device that stops answering is marked disconnected, and its tags follow the quality rules above rather than freezing at their last value as though nothing happened. Writes that were forwarded to a device that has since dropped are not silently discarded — see Troubleshooting for reading the device card and the log together.