PLC · SIEMENS S7 / SINUMERIK
2,461 mappings·1,027-field schema·ISA-95 categorized·deterministic
Siemens controls are commissioned in the language of the plant that bought them. The canonical data model reads the German tag names and the German decimal comma.
A Sinumerik commissioned in Stuttgart emits SPINDEL_AUSLASTUNG, BETRIEBSSTUNDEN and SPINDELDREHZAHL. An English-trained model asked to compare that line against a Haas cell in Ohio is doing translation and unit reconciliation at the same time, and it will do at least one of them wrong.
The decimal separator is the sharper edge. 1200,5 is twelve hundred point five in Germany and a malformed number almost everywhere else. Parsed naively it becomes 12005, an order of magnitude off, with no error raised. Forge applies locale-aware coercion and reports that it did, rather than silently choosing.
440 Siemens tag spellings resolve deterministically. The bare SPINDEL_AUSLASTUNG resolves at 0.65 through the normalized-fold layer; the unit-qualified SPINDEL_AUSLASTUNG (%) is an exact corpus hit at 1.0: declaring the unit raises the confidence.
| Raw vendor tag | Canonical field | ISA-95 category | |
|---|---|---|---|
| SPINDEL_AUSLASTUNG | → | spindle_load_pct | equipment_performance |
| SPINDELDREHZAHL | → | spindle_speed_rpm | equipment_performance |
| VORSCHUB | → | feed_rate | equipment_performance |
| Betriebsstunden | → | operating_hours | equipment_state |
| OperatingHours | → | operating_hours | equipment_state |
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.
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.
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.
No key, no account, no sales call. The sandbox runs locally and answers with the same canonical schema production does.
Send a German payload with comma decimals and see both the resolution and the coercion reported explicitly in the response.
No key, no account, and it runs on your own machine. See platform licensing for embedding the canonical data model in your own product, or pricing for usage-based API access.