Machinery
| Document | OPC 40001-x |
|---|---|
| Version | 1.04.1 |
| Published | 2026-01-01 |
| Namespace | http://opcfoundation.org/UA/Machinery/ |
| Sector | Machinery base |
OPC UA for Machinery is the building-block layer that standardises how any machine publishes identity, state, operation mode and counters. It defines MachineIdentificationType, MachineryItemState_StateMachineType, MachineryOperationModeStateMachineType, the operation and lifetime counters, and the Machines folder where a server lists what it represents.
Where it sits in the stack
Machinery builds on DI and on the shared IA layer, and every machinery-side sector model builds on Machinery: MachineTool, Woodworking, Glass, MetalForming, PlasticsRubber, Mining, SurfaceTechnology and more. Its own family is split across separate namespaces with independent versions, one each for ProcessValues, Result, Jobs and Energy. For machine-data collection this is the single most important companion specification, because it is the one layer you can expect across vendors and sectors.
The types that matter
| Type | What it carries |
|---|---|
Machines | The standard folder under Objects where a server enumerates the machines it represents. This is the entry point for any discovery routine: browse it, then read HasTypeDefinition on each child. |
MachineIdentificationType | Machine-level identity: manufacturer, model, serial number, asset and location identifiers. Together with the vendor nameplate interfaces this is how machine data gets joined to an asset register. |
MachineryItemIdentificationType | The same identification pattern applied to any machinery item, including subordinate items that are not whole machines. |
MachineryItemState_StateMachineType | The coarse lifecycle state of the item: Executing, NotExecuting and OutOfService, with substates. This is the availability signal, and it is the state machine to insist on when writing a specification. |
MachineryOperationModeStateMachineType | The mode the machine is being operated in, covering Processing, Setup, Maintenance and without-load operation. It is what separates planned from unplanned non-production. |
MachineryOperationCounterType | Operation counters such as power-on and operating time since a defined reference, used both as a performance denominator and as a maintenance trigger. |
MachineryLifetimeCounterType | Lifetime and remaining-life counters for consumable or wear-limited items, with an indication of the limit rather than only the raw count. |
MonitoringType | The container for machine monitoring information, giving sector models a standard place to hang measured operating data. |
NotificationsType | The standard place for machine notifications, which is where Part 9 conditions and events surface in the Machinery structure. |
MachineComponentsType | Enumerates the components a machine is made of, so a client can walk from the machine to its subordinate identified items. |
IMachineryItemVendorNameplateType | The vendor nameplate interface applied to machinery items, extending the DI identification pattern with machine-specific properties. |
IMachineTagNameplateType | Carries the plant-side tag and location, which is usually the identifier an operator and an MES actually recognise. |
Using it on a real machine
- Find the Machinery namespaceRead NamespaceArray and locate http://opcfoundation.org/UA/Machinery/. Record the index at runtime; never hard-code it, because it moves when the vendor changes the loaded model set.
- Browse the Machines folderEvery child is a candidate machine. Read HasTypeDefinition and compare it against MachineToolType, WSMachineType or a sector type. A match means most of your OEE mapping is already done and portable to the next vendor.
- Take state before valuesSubscribe to CurrentState on MachineryItemState and on MachineryOperationMode. Availability comes from a state machine, not from inferring motion from a spindle speed.
- Read the counters, do not edge-detectUse MachineryOperationCounter and any sector counter type instead of counting rising edges on a boolean. Handle resets and rollovers explicitly, and store the raw counter value alongside your delta.
- Add a heartbeatA machine that is idle produces no data changes, which looks exactly like a dead connection. Subscribe to a fast-changing node or the server's CurrentTime so silence is distinguishable from failure.
- Pin the version you tested againstRecord the Machinery version from the nodeset's Model element per machine. Between 1.02, 1.03 and 1.04.x the optional node set changed, and a client that assumed one will quietly read nothing on another.
What it gives you for OEE
This is the availability layer, and the most valuable single model for OEE work. MachineryItemState_StateMachineType gives Executing, NotExecuting and OutOfService as a real state machine with transitions, so state duration is derivable instead of sampled. MachineryOperationModeStateMachineType is the field most projects skip and the one that decides whether the number is right: without it you cannot separate a planned changeover or maintenance window from unplanned downtime, and the resulting OEE is wrong in a way nobody can debug afterwards. MachineryOperationCounterType and MachineryLifetimeCounterType give performance denominators and maintenance triggers. What Machinery does not give you is a reason code (take those from MachineTool condition classes or Part 9 events), a good and scrap split (Machinery Result), order context (Machinery Jobs), or planned production time, which is not in the machine at all.
Gotchas
- Version churn is real: Machinery moved 1.03 to 1.04.0 in July 2025 and to 1.04.1 in January 2026. Optional nodes and substates differ, so a client written against the newest nodeset will find nodes missing on installed machines.
- MachineryItemState substates are largely optional. Many implementations expose only Executing and NotExecuting, which is enough for uptime but not enough to distinguish blocked from starved.
- Operation mode is the most commonly omitted node in the whole model, and it is the one that decides whether planned downtime is separable. Confirm it exists before quoting an OEE scope.
- Machinery is five namespaces, not one. ProcessValues, Result, Jobs and Energy each version independently, so a machine claiming Machinery support may implement only the base namespace.
Once the machine speaks a companion spec, the OEE mapping is portable across vendors, which is the point at which analytics stops being a per-machine project.
See Jemba →Last verified 7 September 2026 against OPC UA 1.05.07. Version and publication date read from the released nodeset. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.