FoundryNet / Canonical Data Model / OPC UA

ARCHITECTURE · OPC UA

Canonical Data Model for OPC UA

2,461 mappings·1,027-field schema·ISA-95 categorized·deterministic

OPC UA standardised how industrial data moves and left what it means to companion specifications that most devices do not implement.

Try it on your tags →See pricing →

The problem

Interoperable transport, incompatible meaning.

OPC UA is an excellent transport standard. Companion specifications were meant to supply the semantics on top, and in practice most deployed servers expose vendor browse names in a flat namespace, not a companion-spec-conformant model. You get a beautifully typed value under a name only the integrator understands.

Quality is the subtler failure. A UA read returns a value, a status code and a timestamp; clients routinely take the value and discard the rest. A Bad-quality reading is a well-formed number that is not a measurement, and averaged into a KPI it is indistinguishable from a real one.


The canonical data model

Browse names resolved, quality respected.

Send the wrapper as-is. A Good value passes through; a Bad one is nulled and labelled opc_quality_bad rather than being quietly averaged. Browse names resolve exactly; a fully-qualified dotted path falls to the weaker signal layer, so send the leaf where you can.

Raw vendor tagCanonical fieldISA-95 category
Channel1.Device1.S1Temp→spindle_temperatureequipment_condition
S1Temp→spindle_temperatureequipment_condition
SPINDELDREHZAHL→spindle_speed_rpmequipment_performance
SPINDLE_SPEED_ACT→spindle_speed_rpmequipment_performance

Every row above is produced by the shipping engine, not written by hand. This page fails to build if any of them stops resolving to the field shown.


How it works

Deterministic resolution, in layers, with the answer shown.

Resolution is a lookup, not an inference. A tag is matched against a curated corpus of 2,461 confirmed vendor mappings; only if that misses does it fall to weaker layers: a normalized fold that strips unit suffixes and separators, then a signal classifier that reads structure and unit evidence. Each layer carries a lower confidence, and the layer that answered is named in the response. A mapping you disagree with is visible rather than buried.

Below a confidence threshold the engine abstains. An evidence gate refuses a match it cannot justify and reports the tag unresolved, by name, with the score and the reasons, because a wrong field at high confidence is far more expensive than an honest miss. Six read-time validators then check what survives: sentinel detection, physics bounds, stuck sensors, dropout, operating mode and correlation.

Units are converted to SI where the source unit is known, and every conversion is reported with its factor. A value that fails a physics bound is nulled with the bound it violated attached, not silently dropped.


Limits

What it will not do.

It does not invent fields. A tag outside the corpus that the signal layer cannot justify comes back unresolved and counted, and those names feed the roadmap for the next pack rather than a plausible guess in your data. It is a translation layer, not a historian: it holds no time series and replaces no SCADA system. And the container is a sandbox: it ships the deterministic layers and the canonical schema, not the production embedding, research and corpus-learning layers.


The proof

Pull the container. Send your own tags.

No key, no account, no sales call. The sandbox runs locally and answers with the same canonical schema production does.

docker pull ghcr.io/foundrynet/forge-sandbox

Raw node-ID strings (ns=2;s=…) are not parsed today. Send the browse name. That limit is stated here rather than discovered by you in the container, which is also why the table above shows the same tag both ways: the dotted form resolves through the signal layer at lower confidence, the leaf form is an exact corpus hit.

1,027-field schema
2,461vendor mappings
47vendor packs
12protocols

Next

Send a UA payload with its quality codes.

Then send one with quality Bad and watch what happens. See platform licensing for embedding the canonical data model in your own product, or pricing for usage-based API access.

Try it on your tags →See pricing →

Related

Other canonical data model pages

Kepware OPC
Unified Namespace
Siemens PLC
ISA-95
Why does a cross-vendor canonical data model matter? The Machine Agent breaks it down weekly. Read it →
Get the thesis behind this infrastructure: The Machine Agent, weekly.