Glossary · Alarms

ConditionClassId

ConditionClassId is a Property on every OPC UA Condition holding the NodeId of a ConditionClassType that says what kind of problem this is, independently of vendor wording. MachineTool defines classes such as ToolBreakage, ToolChange, ProcessIrregularity, PartMissing, Clamping and Operator, giving you standardised, machine-readable downtime reason codes.

The field that makes downtime reasons portable

Message is free text in the machine's configured locale and differs between two machines from the same vendor. ConditionClassId is a NodeId pointing at a type, so it is stable, language-independent and comparable across vendors. Every condition has one; if the server does not classify, it points at BaseConditionClassType. ConditionClassName carries the human-readable name of the same class, and ConditionSubClassId, where present, refines it.

The MachineTool classes are a reason-code taxonomy

MachineTool defines ToolBreakageConditionClassType, ToolChangeConditionClassType, ProcessIrregularityConditionClassType, PartMissingConditionClassType, ClampingConditionClassType, MeasurementConditionClassType, ManualProcessStepConditionClassType, OperatorConditionClassType and UtilityConditionClassType. Map those to your own downtime categories once and the mapping works on the next machine tool from a different vendor. AMB adds asset-health classes such as ConnectionFailureConditionClassType for root-cause attribution.

How to consume it

Put ConditionClassId in your EventFilter select clause alongside SourceNode, Time, Severity, Message and ActiveState, then key your downtime attribution on the class NodeId and keep Message only for the operator display. You can also filter server-side: a where clause on ConditionClassId lets one subscription deliver only tool-related stoppages to a tooling dashboard.

The limits of it

Classification is only as good as the vendor's modelling. Many servers classify everything as BaseConditionClassType, and some invent their own subtypes in a private namespace. Resolve the class NodeId to its BrowseName and namespace URI before you trust it, and never hardcode the numeric identifier: a class defined in a companion namespace has an index that can change between server restarts.

Example

Select clause fields for downtime attribution, and a class-based where clause

SelectClauses (SimpleAttributeOperand, typeDefinitionId = BaseEventType):
  /EventId
  /Time
  /SourceNode
  /Severity
  /Message
  /ConditionClassId       <- the reason code
  /ConditionClassName
Additionally with typeDefinitionId = AlarmConditionType:
  /ActiveState/Id
  /AckedState/Id

WhereClause: deliver only tooling stoppages
  OfType(ConditionType)
  AND ConditionClassId IN { ToolBreakageConditionClassType,
                            ToolChangeConditionClassType }
The mistake people make: Building downtime reports on the Message string because it is readable. Message is localised free text and changes with a firmware update or a language setting; ConditionClassId does not. Key on the class NodeId, resolved through NamespaceArray, and display Message only.

Defined in: Part 9 - Alarms and Conditions. Concrete condition classes come from companion specifications such as MachineTool.

Status codes you will meet

Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.

Free download
OPC UA Server Acceptance Test Pack
A 40-check acceptance test you run against a vendor's server before commissioning sign-off. Weighted scoring, three hard gates, and a one-page verdict for the supplier meeting.
Get the free test pack →
Free, no course, no login