FoundryNet / Canonical Data Model / Kepware

OPC · KEPWARE / KEPSERVEREX

Canonical Data Model for Kepware OPC

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

Kepware already gives you every tag in one place. What it does not give you is agreement about what the tags mean.

Try it on your tags →See pricing →

The problem

One server, one protocol, still fifteen vocabularies.

KEPServerEX solves transport: every device arrives over OPC UA in one namespace. It does not solve semantics. Channel1.Device1.S1Temp and Channel2.Device1.SPINDEL_AUSLASTUNG are neighbours in the same browse tree and still speak different languages, because the vendor underneath did.

OPC also carries quality out of band. A tag can return a perfectly well-formed number with quality Bad, and a client that reads only Value will average a stale or invalid reading into a KPI without ever knowing. Forge reads the wrapper: a Bad quality value is nulled with opc_quality_bad as the stated reason, and a Good one passes through unchanged.


The canonical data model

Leaf names in, canonical fields out.

Send the leaf browse name, the last segment of the path, and resolution is an exact corpus hit at full confidence, whichever vendor sits underneath the channel.

Raw vendor tagCanonical fieldISA-95 category
S1Temp→spindle_temperatureequipment_condition
SPINDLE_SPEED_ACT→spindle_speed_rpmequipment_performance
Betriebsstunden→operating_hoursequipment_state
AC_Power→inverter_output_kwenergy_consumption

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

Two limits worth stating before you find them yourself. A raw node-ID string (ns=2;s=Channel1.Device1.SpindleSpeed) is not parsed today. And a fully-qualified dotted path is resolved only by the signal layer, which is weaker than an exact match: Channel1.Device1.S1Temp does resolve, Channel1.Device1.ACTFEED does not. Split the path and send the leaf, a one-line client-side transform, and every tag above resolves exactly. Native node-ID and browse-path parsing is on the roadmap.

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

Next

Point KEPServerEX at it.

Export a tag list and send it as JSON. 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

OPC UA
Unified Namespace
Rockwell
Siemens PLC
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.