Skip to main content
Version: 1.0.8

Protocol Bindings

A protocol binding is the link between a tag and its data source: which connection, which address, how to acquire it.

Tag Site1/Line1/Filler/Motor1/Speed (float · RPM · scaled 0–3000)
Binding PLC1 · opcua · ns=2;s=Motor1.Speed · subscribed · 1000 ms

The tag is the contract; the binding is the wiring. Swapping the wiring never changes the contract.

A binding is edited on the tag's Binding tab: switch on Enable Binding, pick the Protocol, then the Connection, then the address. The fields that follow depend on the protocol.

What a binding holds​

FieldDescription
Enable BindingA disabled binding stops acquiring without being deleted.
ProtocolOPC UA, MQTT, Modbus (TCP / RTU-over-TCP), Allen-Bradley (EtherNet/IP), Siemens S7, SNMP (v1 / v2c), TCP / UDP. Sparkplug B is not a protocol of its own: it is an MQTT connection whose payload format is Sparkplug.
ConnectionWhich connection of that protocol to use.
AddressProtocol-specific: a NodeId, a topic, a register, a symbolic tag, an absolute S7 address, an OID, a generated TCP/UDP tag. See address formats.
Stale after (ms) 1.0.8Optional. How long the value may go without a reading before it is marked Uncertain. See stale after.
Protocol settingsMQTT QoS, JSON path, retain and the device-read settings; Modbus byte/word order and poll rate; SNMP poll rate.

The deadband is not a binding setting: it belongs to the tag, on its History tab, because it decides what is stored and sent, not what is read.

How each protocol acquires its value​

The protocol decides how a value arrives. There is no mode to choose on the Binding tab.

ProtocolAcquisitionRate
OPC UASubscription: the server sends a value when it changes.1000 ms publishing interval. A binding imported with a rate of its own keeps it; anything below 100 ms is raised to 1000 ms.
MQTT, Sparkplug BSubscription to the topic: the value arrives when the device publishes.Whatever the device publishes.
ModbusPolled.Poll Rate (ms) on the Binding tab, 1000 by default.
SNMPPolled with SNMP GET. OIDs sharing a rate are batched into one request.Poll Rate (ms) on the Binding tab, 1000 by default, at least 100.
Siemens S7, Allen-BradleyPolled in scan groups, one per rate.1000 ms, unless the import that created the tag set another.
TCP / UDPPushed: every message the device sends updates the tag.Whatever the device sends.

A subscription moves change detection to the device, cuts network traffic and carries the source's own timestamps. A polled protocol reads on its own schedule whether or not anything changed.

Choosing a poll rate​

The most common performance mistake is polling everything at 100 ms because it is possible.

Kind of valueReasonable rate
Fast process values driving a live trend250–1000 ms
Normal process values1000 ms
Temperatures, levels, slow analogues2000–5000 ms
Counters, totals, shift data5000–30000 ms
Infrastructure (SNMP)30000–60000 ms

The value on screen is only as fresh as the slowest link in the chain — the device's own scan time. Polling a PLC with a 500 ms scan every 100 ms yields four identical reads.

One binding per tag​

A tag has at most one protocol binding. There is no precedence to reason about and no "which source won" to debug, because there is only ever one.

That shapes how you build the patterns people usually reach for:

What you wantHow to build it
Read here, write thereTwo tags, one bound to the source and one to the destination, joined by a pipeline.
Protocol bridgeA pipeline: Industrial I/O subscribe on the source tag, then a write to the destination.
Redundant sourceA tag per source, plus an expression tag that picks the first with Good quality.

The pipeline is not a workaround here — it is where the logic belongs. "Republish Modbus to MQTT" is a decision with failure modes and ordering, and a pipeline makes both visible.

The reverse does hold: several tags may bind to the same address. Two tags reading different JSON fields of one MQTT payload is the normal case, and each gets its own field. 1.0.8 Before 1.0.8 only the tag subscribed last received data from a shared topic. → MQTT

Address formats by protocol​

ProtocolAddressExample
OPC UANodeIdns=2;s=Motor1.Speed, ns=3;i=1042
MQTT (classic)Topic, plus an optional JSON Path (dot path) into the payloadplant/line1/motor1/speed, JSON Path data.rpm
MQTT (Sparkplug B)Group/edge node/device/metric — the device segment is omitted for a node-level metricPlant1/Edge1/Filler/Speed
ModbusRegister space, protocol (0-based) address, optional bitHR:100, IR:10, HR:100.3
Allen-BradleyThe controller's symbolic tag referencePartsMade, Program:MainProgram.Step
Siemens S7Absolute address, built by the address fieldsDB10.DBD20, M0.1, DB1.STRING0.32
SNMPNumeric OID1.3.6.1.2.1.1.3.0
TCP / UDPOne of the connection's generated tagsfield2, message, writeable

Use the browse button beside the address rather than typing it. It removes typos and fills in the data type the source reports.

ProtocolBeside the address
OPC UABrowse the server's address space
Allen-BradleyBrowse the controller's tags, and Read now to confirm a value
Siemens S7Read now, showing the decoded value and the raw bytes
SNMP 1.0.8Walk the agent from a start OID (prefilled from the address) and pick an OID; the walk runs only when you ask for it
Sparkplug B 1.0.8The metric tree observed from birth certificates, rooted at the real group id
Classic MQTTNothing to browse — no broker lists its topics. Type the topic.
ModbusA live preview of the register as the tag will decode it

The Sparkplug picker writes group/node/device/metric — the key data is routed by, which is not always the name shown in the tree. It leaves the data type alone when the edge node announced one QUBIQ cannot map, so you choose it rather than inherit a guess.

Stale after New in 1.0.8​

Stale after (ms) on the Binding tab is the longest the value may go without a reading. When a tag whose last reading was Good stays silent past it, the gateway re-publishes its last value as Uncertain, with a status such as Stale: no update for 45s (limit 30s). The next reading restores the tag with its own quality.

Everything downstream sees it: the historian stores the change of quality, so history shows when the signal went quiet; alarms and broker publishers receive it; screens stop presenting the value as current.

  • It works for every protocol, and is off when blank or 0.
  • The shortest window is 1000 ms; the watchdog checks once a second and a shorter value is refused when you save.
  • A tag that is already Bad — connection down, quarantined — stays Bad. Stale never upgrades it.
  • A tag that has never had a reading is left alone.
Only for a source that sends periodically

An OPC UA subscription, and an MQTT device that publishes on change, send nothing while the value holds steady. A setpoint that does not move would be marked stale while it is perfectly fine. Use stale after on a device that reports on a cycle — a heartbeat topic, a polled register — and set it to a few times that cycle.

This is the tag's own check. It is separate from a connection's health, and from the age shading a screen draws from when a value last arrived.

Enabling and disabling​

Creating, editing, enabling, disabling and deleting a binding all require Bind Protocol. Reading bindings and their statistics requires View Namespace.

Disabling is the right way to take equipment out of service: the tag stays, its history stays, its screens stay, and acquisition stops. Deleting the binding leaves the tag unbound, which is what happens automatically if the connection is deleted.

Unbound tags​

A tag with no binding is not an error:

  • Internal tags never have one by design.
  • Tags whose connection was deleted are left unbound deliberately, so you can re-point them at a replacement instead of losing the model.
  • Tags created ahead of the equipment during commissioning are unbound until the device arrives.

The namespace panel's binding statistics list them, which is worth a look before a commissioning review.

Reading an unbound device tag says so: quality Unknown, with the reason no enabled protocol binding — not NotFound, which is kept for a path that names no tag. 1.0.7 → A tag with no value yet

Rebinding after an equipment change​

Old: PLC1 · ns=2;s=Motor1.Speed
New: PLC2 · ns=4;s=Drive_M1.ActualSpeed

Edit the binding. Nothing else changes — not the tag path, not the screens, not the alarms, not the history. The historian keeps the same tag identity, so trends span the changeover.

This is the whole reason the namespace layer exists.

When a connection comes back Changed in 1.0.8​

A reconnect no longer writes values nobody measured:

  • A tag waiting for its first reading is Bad, with the status waiting for initial data. It used to be a Good 0, written to history and handed to alarms on every subscribe and every reconnect of a PLC tag.
  • A polled connection that reconnects leaves its live tags alone. Each one used to be reloaded and stamped Bad while it waited, so a 50,000-tag PLC wrote 50,000 Bad rows on every reconnect, though its driver never stopped polling. Only bindings that are genuinely missing are subscribed again.
  • A tag is not announced offline when it is only being re-subscribed. It is announced offline only if it does not come back: disabled, unbound, deleted, or its subscribe failed.
  • Only a Good reading proves a link is up. A placeholder, or a server's own comm-failure status, no longer flips a disconnected connection back to connected.

A connection's recovery also no longer waits on another's: subscriptions are queued per connection, so a dead OPC UA server delays only its own tags, and a tag write, read or unsubscribe never waits behind a different connection.

Diagnosing a binding​

SymptomCheck
Quality NotFoundThe address does not exist — typo, or the device program changed. Browse to confirm.
Quality Unknown, no value 1.0.7The tag exists and has not reported yet. Read the reason that comes with it: not yet reported means wait for the next poll or update; no enabled protocol binding means the binding is missing or disabled.
Quality Bad, waiting for initial data 1.0.8Subscribed, first value not here yet. If it persists, the address is not being served.
Quality Uncertain, Stale: no update for … 1.0.8Stale after expired. The device stopped sending — or the window is set on an on-change source.
Quality Bad, Device offline (…) 1.0.8An MQTT device's own status topic reported it offline.
Quality Uncertain, retained message; original time unknown 1.0.8An MQTT broker replayed an old retained value. See retained messages.
Quality Bad, connection healthyData-type mismatch, or the address is out of a readable range.
Quality Bad, connection downFix the connection first; bindings recover automatically.
Value never changesThe source really is constant, or the device is not publishing. A tag's deadband affects what is stored and sent to brokers, not the live value.
Value updates far slower than expectedThe server is clamping the requested interval, or the device scan is slower.
Some tags on a connection are bad, most fineOPC UA node quarantine, or an out-of-range Modbus block.

Next​

→ User-defined types