The DataVariable or Object that has Annotation data will add the Annotations Property as shown in Table 2.

Table 2 – Annotations Property



Data Type





The Annotations Property is used to indicate that the history collection exposed by a HistoricalDataNode supports Annotation data. Annotation DataType is defined in 6.6.6.


Historical Access Annotations

Since it is not allowed for Properties to have Properties, the Annotations Property is only available for DataVariables or Objects.

The Annotations Property shall be present on every HistoricalDataNode that supports modifications, deletions, or additions of Annotations whether or not Annotations currently exist. Annotation data is accessed using the standard HistoryRead functions. Annotations are modified, inserted or deleted using the standard HistoryUpdate functions and the UpdateStructuredDataDetails structure. The presence of the Annotations Property does not indicate the presence of Annotations on the HistoricalDataNode.

A Server shall add the Annotations Property to a HistoricalDataNode only if it will also support Annotations on that HistoricalDataNode. See OPC 10000-4 for adding Properties to Nodes. A Server shall remove all Annotation data if it removes the Annotations Property from an existing HistoricalDataNode.

An Annotation can be accessed in two manners. It can be accessed via ReadAnnotationDataDetails or ReadRawModifiedDetails structure in the HistoryRead service.

The ReadAnnotationDataDetails is described in section 6.5.6. The ReadAnnotationDataDetails contains an element reqTimes that is a list of Timestamps. These Timestamps can be obtained from an invocation of the HistoryRead service call with a ReadRawModifiedDetails parameter for the HistoricalDataNode of the Annotations Property. In the returned dataValues array, values with the ExtraData flag set provide the SourceTimestamp.

The ReadRawModifiedDetails structure is described in 6.5.3. For the ReadRawModifiedDetails, Annotation is returned by passing an instance of the Annotation Property NodeId as the NodeId in the NodesToRead parameter.

Annotation data does not have a separate HistoricalDataConfigurationType object instance. The historical configuration defined on the parent node applies to the Annotations Property.

As with all HistoricalNodes, modifications, deletions or additions of Annotations will raise the appropriate historical audit Event with the corresponding NodeId.