PackML
| Document | OPC 30050 |
|---|---|
| Version | 1.01 |
| Published | 2020-10-08 |
| Namespace | http://opcfoundation.org/UA/PackML/ |
| Sector | Packaging / CPG |
OPC UA for PackML maps the ISA-88 TR88 packaging machine model into OPC UA: the 17-state machine, the unit and mode structure, and the Status and Admin objects with PackMLCountDataType counters and alarm history. It is the canonical machine-state model for packaging, filling and CPG lines.
Where it sits in the stack
PackML is not built on Machinery: it is a direct mapping of the ISA-88 TR88 interface that packaging PLCs have implemented for years, which is both its strength and its limitation. Machines on a modern line often expose both, PackML for state and counts and Machinery for identification. Weihenstephan is structurally a PackML-lineage model for brewing and beverage. The nodeset has been unchanged since 1.01 in October 2020, and PACKML is a registered server capability code, so you can detect it before browsing.
The types that matter
| Type | What it carries |
|---|---|
PackMLMachineStateMachineType | The 17-state machine: Idle, Starting, Execute, Completing, Complete, Suspending, Suspended, Unsuspending, Holding, Held, Unholding, Stopping, Stopped, Aborting, Aborted, Clearing and Resetting. This single state machine is the most reusable availability model in industry. |
PackMLBaseStateMachineType | The base from which the machine and execute state machines derive, carrying the Part 16 CurrentState and LastTransition structure and the transition events. |
PackMLExecuteStateMachineType | The substate machine inside Execute, where a vendor can expose what the machine is doing while it is nominally running. |
PackMLStatusObjectType | The live view: current state, mode, machine speed, current product and the active alarm information. This is what you subscribe to for real-time monitoring. |
PackMLAdminObjectType | The accumulated view: time in each state and mode, counters per product, and alarm history. Effectively a pre-built OEE dataset maintained by the machine itself. |
PackMLCountDataType | The counter structure, with produced, defective and processed counts plus their identification and units. The good and bad split is in the model rather than left to you. |
PackMLAlarmDataType | One alarm entry with identifier, value, message and timestamps, used both for the current alarm and for the alarm history in Admin. |
PackMLProductDataType | The product currently being run, which is what lets counts and state times be attributed to a SKU. |
PackMLIngredientsDataType | Ingredient or material parameters for the current product, the recipe-facing side of the model. |
PackMLDescriptorDataType | The generic name, value and unit descriptor used throughout the model where a vendor needs to publish a machine-specific parameter in a standard shape. |
PackMLRemoteInterfaceDataType | The line-coordination interface, used where an upstream or downstream unit commands or reports to this one. |
ProductionMaintenanceModeEnum | The mode enumeration, which is what separates production from maintenance and manual operation. Without mode, state alone cannot distinguish planned from unplanned downtime. |
Using it on a real machine
- Detect PackML before browsingRead the ServerCapabilities codes and look for PACKML, then check NamespaceArray for http://opcfoundation.org/UA/PackML/. This takes thirty seconds and tells you whether the line is a semantic integration or a tag-scraping job.
- Subscribe to state and mode togetherMonitor CurrentState on the machine state machine and the current mode. Held and Suspended are the two states that carry the most OEE meaning, and both are meaningless without mode.
- Read the Admin object once per shiftAdmin holds accumulated time per state and counts per product. Reading it at shift boundaries gives you an OEE dataset that the machine has already computed, which is far cheaper than reconstructing durations from samples.
- Take counts from PackMLCountDataTypeUse the produced and defective counts rather than edge-detecting a photocell. Store the raw counter values so a job reset is visible, because Admin counters are typically cleared per job or shift.
- Reconcile Admin against your own accumulationAccumulate state durations yourself from the transition events as well, and compare with Admin. A persistent divergence usually exposes a lost connection window or a counter reset you were not told about.
What it gives you for OEE
PackML lines are the easiest OEE wins in manufacturing, and the reason is the Admin object: the machine already maintains accumulated time in each of the 17 states, accumulated time per mode, and counts per product, which is essentially a pre-built OEE dataset. Availability falls out of the state machine, and it is unusually good because the states encode the cause structure: Held versus Suspended is the standard distinction between the machine's own problem and an upstream or downstream problem, which is exactly the blocked-versus-starved split most plants pay consultants to reconstruct. Performance comes from PackMLCountDataType against machine speed and Execute time. Quality comes free, because the count structure carries produced and defective separately rather than leaving you to infer scrap. The gaps are the usual ones: no planned production time or shift calendar, and reason codes only as far as the alarm identifiers the vendor chose, since PackML alarms are not a standardised class taxonomy the way MachineTool condition classes are.
Gotchas
- The nodeset is frozen at 1.01 (2020-10-08). That is stability rather than neglect, but it means PackML has none of the newer Machinery conveniences and will not grow to cover them.
- Most PackML machines implement the state machine in the PLC and expose it as raw tags, not as the OPC UA types. A line that is PackML in the ISA-88 sense may still be a tag-mapping job in OPC UA.
- The 17 state names are standard; vendor behaviour within them is not. Which conditions push a machine into Held rather than Suspended, and whether Completing is used at all, vary by builder. Validate against the machine, not the standard.
- Admin counters are cumulative and are reset on job or shift boundaries, sometimes silently. Always persist the raw value alongside your computed delta so a reset is distinguishable from a production burst.
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.