ISA-5.1 Tag Naming vs. Explicit OPC UA Modelling

Companion to TL;DR β€” OPC UA Part 17: Alias Names. Part 17 Aliases are the technical bridge between the two worlds described here.

Sections 1 and 2 are neutral background. Sections 3 to 6 are an engineering opinion β€” Sterfive's position, not a specification summary.

What ISA-5.1 Actually Is

ISA-5.1 is the roughly fifty-year-old convention that produced every TI101, FIT-101A, and PIC-301 painted on a P&ID in the process industries. A tag is a compressed record, not a name:

FIT - 101 A
β”‚β”‚β”‚   β”‚β”‚β”‚ β”‚
β”‚β”‚β”‚   β”‚β”‚β”‚ └── Redundancy suffix   (A/B/C = parallel instruments; -1/-2 = sub-elements)
β”‚β”‚β”‚   └────── Loop number         (area-encoded: 101 = loop 1 in area 1; 2034 = loop 34 in area 20)
││└────────── Function: Transmitter
│└─────────── Function: Indicating
└──────────── Measured variable: Flow
FieldCarriesExamples
1st letterwhat is measuredFlow Β· Pressure Β· Temperature Β· Level Β· Analysis Β· Weight Β· Z position
Succeeding letterswhat the device doesTransmitter Β· Controller Β· Switch Β· Valve Β· Element Β· Y relay Β· Indicate Β· H/L high/low
Loop numberwhere, by area convention101, 301, 2034
Suffixredundancy / sub-elementA, B, -1, -2

Worked examples:

TagDecodes toSignal (by the "last functional letter" rule)
FIT-101Flow Indicating TransmitterAI
PIC-301Pressure Indicating ControllerAO
LSH-201Level Switch, HighDI
TCV-401Temperature Control ValveAO (modulating)
FCV-101Flow Control ValveAO β€” not DO; a frequent mis-classification

The genius of ISA-5.1: a trained engineer reads LSH-201 and instantly knows it is a high-level trip in area 2, with no database lookup. The whole plant speaks one dense language, and it has worked across vendors, decades, and continents.


What "Explicit Modelling" Means in OPC UA

OPC UA best practice β€” and every serious companion specification (Machinery, Machine Vision, PA-DIM) β€” pushes the opposite philosophy: put the semantics in the model, not in the string. The same flow transmitter becomes:

Objects/
  Reactor1/
    FeedFlow            ← BrowseName: human-readable, no cryptic code needed
      Value             ← DataType: Float
      EngineeringUnits  ← EUInformation: "mΒ³/h"        (Part 8 / Part 5)
      EURange           ← 0 … 250
      HasTypeDefinition β†’ AnalogSensorType             (companion-spec type)
      HasComponent      β†’ Sensor, Transmitter …        (explicit structure via References)

Everything ISA-5.1 packs into FIT-101 is here too β€” but each fact lives in its own attribute, type, or reference, machine-readable without parsing:

ISA-5.1 packs into the string…OPC UA puts it in…
F = flowEngineeringUnits + a companion AnalogSensorType / PA-DIM signal type
I / T = indicating transmitterHasTypeDefinition, the node's Variable and Method structure
Loop / areaAddress-space hierarchy (Area20/Loop34/…) plus References
A / B redundancyExplicit redundant nodes; AliasFor returning multiple ExpandedNodeIds
Signal type (AI/AO/DI/DO)DataType + AccessLevel + node structure

The Dilemma

The issue is real and it is not "legacy versus modern". It is a genuine trade-off between two correct but opposing design principles:

An ISA-5.1 tag is a semantic descriptor masquerading as an identifier.

That single sentence is the whole problem. Good identifiers should be opaque and stable. ISA-5.1 tags are neither:

  • They are overloaded. FIT-101A encodes five independent facts (variable, two functions, location, redundancy) in one string. That is a database row with no schema β€” parseable only by a human who knows the convention, and the convention drifts plant to plant.
  • They are unstable by construction. Swap a transmitter for a controller and the "name" must change (FIT β†’ FIC) β€” because the name is the function. An identifier that changes when the thing's role changes is, by definition, a bad identifier. Part 17 even bakes this in: a rename is delete plus re-add, which mints a new NodeId.
  • They do not survive machines. A historian, an MES, or an AI agent cannot reliably parse LSH-201 into {level, switch, high, area 2} without an out-of-band decoder ring β€” and the moment two sites disagree on the convention, the parse silently produces garbage. That is exactly the class of problem OPC UA was invented to kill.
flowchart LR
    subgraph isa["🏷️ ISA-5.1 tag β€” 'LSH-201'"]
        direction TB
        P1["βœ… Compact and universal"]
        P2["βœ… Human-instant to decode"]
        P3["βœ… 50 years of tooling and P&IDs"]
        N1["❌ Semantics locked in a string"]
        N2["❌ Name changes when function changes"]
        N3["❌ Not machine-parseable across sites"]
        P1 ~~~ P2 ~~~ P3 ~~~ N1 ~~~ N2 ~~~ N3
    end

    subgraph ua["🧩 Explicit OPC UA model"]
        direction TB
        Q1["βœ… Machine-readable, no parsing"]
        Q2["βœ… Typed and self-describing"]
        Q3["βœ… Stable opaque NodeId"]
        M1["❌ Verbose β€” not radio-friendly"]
        M2["❌ Millions of ISA tags in brownfield"]
        M3["❌ Operators think in tags, not paths"]
        Q1 ~~~ Q2 ~~~ Q3 ~~~ M1 ~~~ M2 ~~~ M3
    end

    isa <-. "the tension" .-> ua

    style isa fill:#6a040f,color:#fff
    style ua fill:#2d6a4f,color:#fff

Neither side is wrong β€” which is what makes it a dilemma rather than a mistake. You cannot tell a plant with 200,000 ISA tags in its DCS, historian, work orders, and operators' heads to "just model it explicitly". And you cannot tell a fleet-scale analytics platform to parse cryptic strings it cannot trust.


The Resolution β€” This Is Exactly What Part 17 Is For

Here is the punchline: you do not have to choose. Part 17 dissolves the dilemma instead of resolving it.

  • Model explicitly β€” the address space is typed, self-describing, machine-readable. The NodeId is opaque and stable. This is what the machines consume.
  • Expose the ISA tag as an Alias β€” publish LSH-201 under TagVariables, with AliasFor pointing at the explicit node. This is what the humans and legacy tools consume.
  • A client calls FindAlias("LSH-201") and gets back the ExpandedNodeId of a fully modelled, self-describing node β€” the human name resolves to the machine truth.
flowchart LR
    H["πŸ‘· Human / legacy DCS<br/>knows 'LSH-201'"] -->|FindAlias| AL["🏷️ Alias 'LSH-201'"]
    AL -->|AliasFor| M["🌑️ Reactor2/HighLevelTrip<br/>typed · units · range · references"]
    AI["πŸ€– Analytics / AI agent"] -->|Browse types & attributes| M
    style AL fill:#6a040f,color:#fff
    style M fill:#2d6a4f,color:#fff

The alias becomes the stable human contract; the model carries the machine semantics. When you swap the transmitter and the ISA tag "should" change, you add a new alias and retire the old one β€” the model node and its NodeId never move. The instability of ISA naming is quarantined at the alias layer, where it belongs.


Our Take β€” Where the Industry Should Head

Push the semantics out of the identifier and into the model β€” but keep the identifier as an alias, forever.

Concretely, for anyone building or modernising an OPC UA system:

  1. Never make the ISA tag the BrowseName or NodeId of the real node. The moment you do, you have re-imported the overloading problem into OPC UA and gained nothing. Model the node properly; the ISA tag is metadata, not identity.
  2. Always publish the ISA tags as Part 17 aliases β€” TagVariables for points, Topics for PubSub datasets. This is the cheapest possible bridge to fifty years of brownfield reality, operators, and P&IDs. It costs a folder of alias objects and buys universal backward compatibility.
  3. Let the GDS aggregate them (Annex C) so FindAlias("FIT-101") works plant-wide from one endpoint, with redundancy and failover for free β€” the exact thing ISA-5.1's A/B suffix was hand-rolling.
  4. Treat the identifier as opaque going forward. New systems should stop encoding meaning into strings at all. A NodeId should mean nothing; the model should mean everything. ISA-5.1 becomes a human-facing view, not the source of truth.

The 20th-century constraint β€” a tag had to be short enough to paint on a pipe and decode in your head, because there was no machine to ask β€” is gone. We now have a machine to ask. So:

  • Short term (brownfield): explicit model underneath, ISA aliases on top. Coexistence, not migration. Achievable today with Part 17.
  • Long term (greenfield, digital twin, AI-native): semantics live entirely in typed, companion-spec-conformant models; identifiers are opaque and stable; human-readable names (ISA or otherwise) are aliases and display metadata layered on top, swappable per site or per language without touching the truth.

The dilemma only exists if you insist a tag be both the name a human shouts over a radio and the schema a machine reasons over. Part 17's quiet contribution is letting you stop insisting on that.


One-Line Summary

ISA-5.1 crammed a database into a string because it had to. OPC UA gives every field its own home so machines can read it. The right architecture keeps both β€” the explicit model as the source of truth, the ISA tag as a Part 17 alias β€” so nobody has to choose between the operator's muscle memory and the machine's need for meaning.


Background on ISA-5.1 instrument identification per ANSI/ISA-5.1, Instrumentation Symbols and Identification. For the specification mechanics, see TL;DR β€” OPC UA Part 17: Alias Names.