Cumulative count of completed parts. A monotonic counter, which is exactly why it needs care: it resets on power cycle, on program change, and on operator command, so a naive difference produces a large negative spike several times a shift. Forge marks it cumulative so the read-time validators treat a decrease as a reset rather than as data.
part_countEach of these is a real tag as the device or controller emits it, taken from the Forge mapping corpus. This is the table that does not exist anywhere else — the reason cross-vendor telemetry is hard is visible in a single column.
| OEM / profile | Raw tag as the device emits it | Confidence |
|---|---|---|
| Fanuc | M30COUNTM30_CountM30COUNT(pcs)m30_count_pcsM30 Count(pcs)M30COUNT_parts+11 more spellings | 1.00 |
| Haas | PartsPART CNTPART_CNTPARTS(pcs)PARTS_partsPART_CNT_pcs+10 more spellings | 1.00 |
| Siemens | stueckzahl_pcsSTUECKZAHL (pcs)STUECKZAHL [pcs]STUECKZAHL (cycles)stueckzahl [cycles] | 1.00 |
| Bridgeport | part_ct | 1.00 |
| Brother | part_ct | 1.00 |
| Doosan | part_ct | 1.00 |
| Hitachi Seiki | part_ct | 1.00 |
| Hurco | part_ct | 1.00 |
| Kitamura | part_ct | 1.00 |
| Komatsu NTC | part_ct | 1.00 |
| Matsuura | part_ct | 1.00 |
| Mazak | partcount | 1.00 |
| Mikron | part_ct | 1.00 |
| Mitsubishi | part_ct | 1.00 |
| Okuma | PartsMachined | 1.00 |
| Tongtai | part_ct | 1.00 |
| Tormach | part_ct | 1.00 |
| Trumpf | part_ct | 1.00 |
Every row above is an exact match — a deterministic pack entry or a confirmed corpus mapping — so all of them carry confidence 1.00. That is not a rounding: these are the two exact-match layers, and a tag that resolves here never reaches the embedding or LLM layers. Mappings resolved by the LLM layer do carry sub-1.0 confidence, but those are per-tenant and are not published here.
The canonical field is not just a name. It is a contract about units, sign convention and plausible range, enforced on the way in and re-checked at read time.
| SI / canonical unit | unitless (identifier or enumeration) |
| Measurement type | cumulative — resets are expected; a decrease is a counter reset, not a negative reading |
| Distinct source tags in the corpus | 212 |
No mapping table to maintain, and no per-vendor branch in your code. The same request shape works for every OEM in the table above.
Read alongside this one.
spindle_speed_rpm spindle_load_pct program_name feed_rate robot.joint.position