# Tags

> The tag page card by card: the header and verbs, General, Source with the fields of every driver, Conversion, Live value with the write field, and Used by with Replace all.

A **tag** is one addressable point on a device: an address on the wire, a data type, and the conversion that turns the raw reading into the engineering value. Select a tag row under a device, or press Open on a row of the device's Tags grid, to open its page. View connector reads it; Configure connector edits it; Calibrate tags edits the Calibration stage alone.

## The header {#the-header}

A live dot (green while the tag has a value, amber when the value is a stand-in or the Limits stage raised a fault, grey otherwise), the tag's name, and under it the tag's address, `Connector.<Driver>.<Folders…>.<Device>.<Tag>`, which is what Logic and dashboards type. Below, when they apply: a caution note with the validation hint (a blank name, a missing address, a factor of 0) and the last error in red.

## The command bar {#the-command-bar}

| Command | What it does | Greyed when (situation) | Not drawn when (role) |
| --- | --- | --- | --- |
| **Copy value** | Copies the engineering value as displayed to the clipboard ("Copied value of 'Temperature' to the clipboard."). | Never. | Never. |
| **Enable** | Puts the tag back into acquisition and the live address space. | Already enabled, or the station refuses mutations. | Without Configure connector. |
| **Disable** | Withdraws the tag from acquisition and the live address space; the device keeps polling its other tags. | Already disabled, or the station refuses mutations. | Without Configure connector. |
| **Delete tag** (danger ink, on the right) | Asks "Delete 'Temperature'? This removes it from 'Furnace'. This cannot be undone.", deletes, and selects the device. | The station refuses mutations. | Without Configure connector. |

Every card autosaves as described on [Connector](connector#the-detail-panel). The General and Source cards are held inert for a role without Configure connector, with the note "Changing the Connector requires the “Configure connector” permission." on top.

## The General card {#the-general-card}

| Field | What it is | Values / default | Effect |
| --- | --- | --- | --- |
| **Tag name** | The point's name; the last segment of both the wire key and the address. | Required. | Typing previews how many references the rename carries; committing rewrites them: "Tag renamed and 2 references updated." Blank is refused: "Tag name is required." OCPP tags must end in Meter or Status: "OCPP tag names must end in 'Meter' or 'Status' (e.g. Connector1Meter)." |
| **Data type** | The OPC UA scalar type the embedded server exposes. | Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Float, Double, String, DateTime, Guid, ByteString, narrowed to what the driver marshals; Float by default where the driver has it, else the first type it offers. | Changing it snaps what depends on it: a NaN limit action becomes Null on a type that cannot hold NaN, the NaN policy resets to pass-through on a non-numeric type, a simulated signal kind incompatible with the type is replaced by the type's default, and a Modbus register class crosses the bit/register boundary with the type. The Conversion card changes shape with it. |
| **Access** | Whether the station reads, writes, or both. | Read only, Write only, Read and write; Read only. OCPP, Matter and LoRaWAN offer Read only alone. | Read and write and Write only draw the write field on the Live value card; a Write only tag is not polled and does not count toward device health. |
| **Unit** | The engineering unit, free text. | Empty. | Shown beside every stage result and the engineering value, and wherever the value is displayed. |
| **Poll interval (ms)** | A per-tag override of the device's poll interval. | 0 (use the device default); a negative value is saved as 0. | Hidden for Mitsubishi MC, BACnet, IEC 61850, OCPP and LoRaWAN, which ignore it. |

## The Source card {#the-source-card}

"Where this tag's value comes from, and the latest raw reading." The fields depend on the driver; the driver pages explain the semantics, this is the inventory as the panel draws it.

### Free-text address {#free-text-address}

Drivers addressed by a token you type show one field, labelled per driver: **Node id** (OPC UA), **Symbol** (Beckhoff ADS), **Device address** (Mitsubishi MC), **MMS path** (IEC 61850), **Controller tag** (Rockwell), **Resource path** (Redfish), **PI path** (AVEVA PI), **Path** (HTTP), with the driver's hint under it. The field is required for these drivers: "Node id is required for this driver."

### Typed fields per driver {#typed-fields-per-driver}

| Driver | Fields |
| --- | --- |
| Modbus TCP, Modbus RTU | **Register class** (HoldingRegister, InputRegister, Coil, DiscreteInput; the default follows type and access: a read-only Boolean is a DiscreteInput, a writable one a Coil, a read-only number an InputRegister, a writable one a HoldingRegister) and **Register number (0-based)**. |
| Siemens S7 | **Area** (DataBlock, Merker, ProcessInput, ProcessOutput, Timer, Counter), **DB number** (DataBlock only), **Start byte**, **Bit (0-7)** (Boolean tags), **Max length (blank = 254)** (String tags). |
| Rockwell | **Offset in tag (bytes, bits for BOOL)**, after the Controller tag field; 0 is the start of the tag. |
| BACnet | **Object type** (AnalogInput, AnalogOutput, AnalogValue, BinaryInput, BinaryOutput, BinaryValue, MultiStateInput, MultiStateOutput, MultiStateValue) and **Instance**. The present value is what is read. |
| OCPP | **Connector** (the connector number, 1 by default), with the note "Name the tag …Meter (energy reading) or …Status (connector state)." |
| Redfish | **JSON pointer (blank = whole document)**, "e.g. /Temperatures/0/ReadingCelsius", after the Resource path. |
| Matter | **Output (endpoint)** and **Attribute**, two numbers; the tag name is the cluster to read, spelled as the catalog spells it (On/Off, Level Control, Temperature Measurement), and carries no colon. |
| LoRaWAN | **Address by Cayenne LPP channel/type** (checkbox), **Channel / payload offset**, **LPP type code** (with LPP on), **Bitmask (hex, blank = none)**, **Multiplier (blank = none)**. |

### Wire length and byte order {#wire-length-and-byte-order}

| Field | Shown for | What it is |
| --- | --- | --- |
| **Quantity (registers, blank = auto)** | Modbus, String tags only | How many 16-bit registers to read; blank reads 4. Other Modbus types take a fixed width (one register for Boolean, two for Int32 and Float), so the field is not drawn for them. |
| **Read length (bytes, blank = auto)** | Beckhoff, Mitsubishi, IEC 61850, LoRaWAN | The byte count; blank derives it from the type: 1 for Boolean, Byte and SByte; 2 for Int16 and UInt16; 4 for Int32, UInt32 and Float; 8 for Int64, UInt64 and Double; 16 for String; 4 otherwise. |
| **Most significant byte first** | Modbus (numeric tags), LoRaWAN | Which end of the value comes first on the wire. On by default for Modbus, off for LoRaWAN. Modbus defines no byte order for text, so a Modbus String tag is not offered it. |
| **Most significant word first** | Modbus | Which 16-bit half leads in a two-register value. On by default. Not offered for LoRaWAN, whose payload has no word to put first. |

### Source address (wire) {#source-address-wire}

Every non-simulated tag ends the field group with a read-only preview of the address the driver actually receives, assembled from the fields above and the device's connection fields: `0?quantity=2` for a Modbus register, `DB1?0` for an S7 byte, `Program:Main.Counter?0` for a Rockwell tag, `MAIN.fValue?4` for an ADS symbol, `0,3` for a BACnet object, `ocpp://<charge point>/<connector>`, `<resource>#/Temperatures/0/ReadingCelsius` for Redfish, `<DevEUI>/<channel>/<lpp>?quantity=<n>` for LoRaWAN, `<endpoint>/<attribute>` for Matter, and the token itself for OPC UA, AVEVA PI and HTTP (prefixed with the device's resource path).

### Simulated signal parameters {#simulated-signal-parameters}

A Simulated tag has no address field: its name is the point. Instead: **Signal kind**, a list narrowed to the shapes the data type can drive, each with a small picture of the shape beside its name (Sine, Ramp, Random walk and Counter for numbers; Toggling boolean for Boolean; Enumerated text for String; Clock for DateTime; Random GUID for Guid; Random bytes for ByteString; Setpoint hold and Pulse for any type). **Default value** appears for Random walk, Counter and Setpoint hold, as a text field, a "Default is on (true)" checkbox for Boolean, or a date field for DateTime. **States (semicolon-separated)** appears for Enumerated text: "e.g. Run;Stop;Pause (cycles one step every 3 s)." Shape parameters the panel does not edit (a sine's band and period, a pulse's hold) travel with the tag unchanged. The [Simulated](driver-simulated) page lists every parameter.

### Raw value {#raw-value}

The card closes with the latest raw reading as the driver delivered it, before any conversion; a dash when there is none.

## The Conversion card {#the-conversion-card}

"How the raw value is turned into the engineering value." The card is drawn for numeric, Boolean and String types; DateTime, Guid and ByteString pass through unchanged and show no card.

For a **numeric** tag the card is the staged pipeline, top to bottom: **Raw value**, then **Scale** (Angular (×), Linear (+), a **Two-point** button), **Calibration** (the same three), **Invalid reading** (two policies), **Limits** (Min, Max, Action), **Decimals** (Decimals) and **Engineering value** with the unit. Each stage from Scale on carries a checkbox in its head that turns the stage on or off, and a result on the right: `= value` when the stage applies, `→ value` when it is bypassed. A limit fault turns the Limits stage red and prints "Value 130 is outside the limits [0, 100]." under the card. The math, the defaults and the policies are on [The value pipeline](connector-value-pipeline); the two-point assistant and the permission split between Scale and Calibration are on [Calibration](connector-calibration).

A **Boolean** tag shows **Invert (report the negation of the raw value)**, the **Result**, and the Invalid reading policies. A **String** tag shows **Substring start** and **Length (blank = to end)**, the **Result**, and the Invalid reading policies.

Past Scale and Calibration, the numeric stages and the Boolean and String transforms are ordinary configuration: Configure connector edits them, everyone else reads them.

## The Live value card {#the-live-value-card}

| Item | What it shows |
| --- | --- |
| **Current value** | The engineering value, formatted with the tag's decimals and unit; a dash when there is none. |
| Stand-in note | When the value is not a measurement: "Replacing a missing measurement.", "Last good value, held while the device is not answering." or "Replacing a failed read.", per the Invalid reading policies. |
| **Source timestamp** | When the equipment took the reading. While a read is failing the label turns to **Last attempt** and the stamp is the attempt's; while the last good value is held, the stamp stays that reading's. |
| **Application timestamp** | When the embedded server received it. |
| **Write value** | For a Read and write or Write only tag, and Configure connector only: a text field (a checkbox "On (true)" for Boolean, a date field for DateTime) and **Write**. "Enter the engineering value; scaling and invert are reversed before writing." The status line reads "Value written.", "Write failed.", "Enter a value to write." or "Value could not be converted." |

Write is greyed with its reason while a run holds the station or the runtime is stopped. A write is refused as "Write failed." when a Logic source lock holds the tag, when the driver rejects it, or when the device is not connected. What is reversed before the raw value leaves is on [The value pipeline](connector-value-pipeline#writes-reverse-the-pipeline).

## The Used by card {#the-used-by-card}

"Channel bindings, Logic definitions and dashboard components that reference this tag." The table lists every reference with **Kind** (Channel, Stop interlock, Automation, Variable, Action, Alarm, Dashboard), **Location** (the model or dashboard that holds it; empty for the top-level Logic kinds) and **Name**. With none, "Not referenced by any channel or property." The lookup is advisory: a failure leaves the grid empty.

For Configure connector the card adds the replace apparatus: a picker listing every other tag in the live address space by address, a **Replace all** button, and a per-row replace action. Replace all rewrites every listed reference to the picked tag in one all-or-nothing batch ("4 reference(s) now use Connector.Simulated.Air.Pump.Flow."; "No references to replace."); the row action rewrites that one ("'Furnace temperature' now references Connector.Simulated.Air.Pump.Flow.", or "The reference changed in the meantime. Refresh and retry." when it moved under you). A Stop interlock or Automation reference is Process structure, so replacing it needs Manage process on top: "Replacing a Unit interlock source requires Process manage permission." and "Replace all includes a Unit interlock source and requires Process manage permission."

## What the tag page does not do {#what-the-tag-page-does-not-do}

The tag's device and driver are fixed; move a point by creating it on the other device and using Replace all. Only one tag's stages are edited at a time here; multi-row edits are the device grid's mass edit, described on [Devices](connector-devices#mass-edit). There is no history or trend on the page: the live dot, value and timestamps are the current sample, refreshed once a second.
