ANSI C Based OPC UA Client/Server/PubSub SDK  1.9.1.442
Data Types

ReadEventDetails

Selects a set of events from the history database by specifying a filter and a time domain for one or more objects or views.

The ReadEventDetails structure is used to read the events from the history database for the specified time domain for one or more HistoricalEventNodes. The events are filtered based on the filter structure provided. This filter includes the event fields that are to be returned.

The startTime and endTime are used to filter on the Time field for events.

The time domain of the request is defined by startTime, endTime, and numValuesPerNode; at least two of these must be specified. If endTime is less than startTime, or endTime and numValuesPerNode alone are specified, the data will be returned in reverse order with later/newer data provided first, as if time was flowing backward. If all three are specified, the call shall return up to numValuesPerNode results, going from startTime to endTime, in either ascending or descending order, depending on the relative values of startTime and endTime. If numValuesPerNode is 0, all of the values in the range are returned. The default value is used to indicate that startTime, endTime, or numValuesPerNode is not specified.

It is specifically allowed for the startTime and the endTime to be identical. This allows the Client to request the event at a single instance in time. If startTime and endTime are identical, time is presumed to be flowing forward. If no data exists at the time specified, the server must return the Good_NoData StatusCode.

If a startTime, endTime, and numValuesPerNode are all provided, and if more than numValuesPerNode events exist within that time range for a given node, then only numValuesPerNode events per node are returned along with a continuationPoint. When a continuationPoint is returned, a Client wanting the next numValuesPerNode values should call HistoryRead again with the continuationPoint.

For an interval in which no data exists, the corresponding StatusCode shall be Good_NoData.

The filter parameter is used to determine which historical events and their corresponding fields are returned. It is possible that the fields of an EventType are available for real time updating, but not available from the historian. In this case, a StatusCode value will be returned for any event field that cannot be returned. The value of the StatusCode must be Bad_NoData.

If the requested timestamp format is not supported for a node, the operation shall return the Bad_TimestampNotSupported StatusCode. When reading events, this only applies to Event fields that are of type DataValue.

Field DataType ValueRank Description
NumValuesPerNode UInt32 Scalar The maximum number of values returned for any node over the time range. More...
StartTime DateTime Scalar The beginning of the period to read. More...
EndTime DateTime Scalar The end of the period to read. More...
Filter EventFilter Scalar A filter used by the Server to determine which HistoricalEventNode should be included. More...

NumValuesPerNode

The maximum number of values returned for any node over the time range.

If only one time is specified, the time range must extend to return this number of values. The default value of 0 indicates that there is no maximum.

StartTime

The beginning of the period to read.

The default value of DateTime.MinValue indicates that the startTime is Unspecified.

EndTime

The end of the period to read.

The default value of DateTime.MinValue indicates that the endTime is Unspecified.

Filter

A filter used by the Server to determine which HistoricalEventNode should be included.

This parameter must be specified and at least one EventField is required. The EventFilter parameter type is an extensible parameter type. It is defined and used in the same manner as defined for monitored data items. This filter also specifies the EventFields that are to be returned as part of the request.

ReadRawModifiedDetails

Selects a set of raw or modified values from the history database by specifying a time domain for one or more variables.

Read raw functionality

When this structure is used for reading Raw Values, it reads the values, qualities, and timestamps from the history database for the specified time domain for one or more HistoricalDataNodes. This parameter is intended for use by a Client that wants the actual data saved within the historian. The actual data may be compressed or may be all raw data collected for the item depending on the historian and the storage rules invoked when the item values were saved. When returnBounds is TRUE, the bounding values for the time domain are returned. The optional bounding values are provided to allow the Client to interpolate values for the start and end times when trending the actual data on a display.

The time domain of the request is defined by startTime, endTime, and numValuesPerNode; at least two of these must be specified. If endTime is less than startTime, or endTime and numValuesPerNode alone are specified, the data will be returned in reverse order, with later data coming first, as if time was flowing backward. If all three are specified, the call shall return up to numValuesPerNode results going from startTime to endTime, in either ascending or descending order, depending on the relative values of startTime and endTime. If numValuesPerNode is 0, all the values in the range are returned. A default value of DateTime.MinValue is used to indicate that startTime or endTime are not specified.

It is specifically allowed for the startTime and the endTime to be identical. This allows the Client to request just one value. If startTime and endTime are identical, time is presumed to be flowing forward. It is specifically not allowed for the server to return a Bad_InvalidArgument StatusCode if the requested time domain is outside of the server’s range. Such a case shall be treated as an interval in which no data exists.

If startTime, endTime, and numValuesPerNode are all provided and if more than numValuesPerNode values exist within that time range for a given node, only numValuesPerNode values per node are returned along with a continuationPoint. When a continuationPoint is returned, a Client wanting the next numValuesPerNode values should call ReadRaw again with the continuationPoint set.

If Bounding Values are requested and a non-zero numValuesPerNode was specified, any bounding values returned are included in the numValuesPerNode count. If numValuesPerNode is 1, only the start bound is returned (the end bound if reverse order is needed). If numValuesPerNode is 2, the start bound and the first data point are returned (the end bound if reverse order is needed). When bounding values are requested and no bounding value is found, the corresponding StatusCode entry will be set to Bad_BoundNotFound, a timestamp equal to the start or end time as appropriate, and a value of null. How far back or forward to look in history for bounding values is server dependent.

For an interval in which no data exists, if bounding values are not requested, the corresponding StatusCode must be Good_NoData. If bounding values are requested and one or both exist, then the result code returned is Success and the bounding value(s) are returned.

For cases where there are multiple values for a given timestamp, all but the most recent are considered to be modified values and the server must return the most recent value. If the server returns a value which hides other values at a timestamp, it must set the ExtraData bit in the StatusCode associated with that value. If the Server contains additional information regarding a value, the ExtraData bit shall also be set. This indicates that ModifiedValues are available for retrieval.

If the requested timestamp format is not supported for a node, the operation shall return the Bad_TimestampNotSupported StatusCode.

Read modified functionality

When this structure is used for reading modified values, it reads the values, StatusCodes, timestamps, modification type, the user identifier, and the timestamp of the modification from the history database for the specified time domain for one or more HistoricalDataNodes. If there are multiple replaced values, the server must return all of them. The updateType specifies which value is returned in the modification record. If the updateType is INSERT, the value is the new value that was inserted. If the updateType is anything else, the value is the old value that was changed.

The purpose of this function is to read values from history that have been modified. The returnBounds parameter must be set to FALSE for this case, otherwise the server returns a Bad_InvalidArgument StatusCode.

The domain of the request is defined by startTime, endTime, and numValuesPerNode; at least two of these must be specified. If endTime is less than startTime, or endTime and numValuesPerNode alone are specified, the data shall be returned in reverse order with later data coming first. If all three are specified, the call shall return up to numValuesPerNode results going from StartTime to EndTime, in either ascending or descending order, depending on the relative values of StartTime and EndTime. If more than numValuesPerNode values exist within that time range for a given Node, only numValuesPerNode values per node are returned along with a continuationPoint. If a continuationPoint is returned, a Client wanting the next numValuesPerNode values should call ReadRaw again with the continuationPoint set. If numValuesPerNode is 0, all of the values in the range are returned. If the Server cannot return all modified values for a given timestamp in a single response, it shall return modified values with the same timestamp in subsequent calls.

If a value has been modified multiple times, all values for the time are returned. This means that a timestamp can appear in the array more than once. The order of the returned values with the same timestamp should be from the most recent to oldest modification timestamp if startTime is less than or equal to endTime. If endTime is less than startTime, the order of the returned values will be from the oldest modificfication timestamp to the most recent. It is server dependent whether multiple modifications are kept or only the most recent.

A server does not have to create a modification record for data when it is first added to the historical collection. If it does, it shall set the ExtraData bit and the Client can read the modification record using a ReadModified call. If the data is subsequently modified, the server shall create a second modification record, which is returned along with the original modification record whenever a Client uses the ReadModified call if the Server supports multiple modification records per timestamp.

If the requested timestamp format is not supported for a Node, the operation shall return the Bad_TimestampNotSupported StatusCode.

Field DataType ValueRank Description
IsReadModified Boolean Scalar TRUE for read modified functionality, FALSE for read raw functionality. More...
StartTime DateTime Scalar The beginning of the period to read. More...
EndTime DateTime Scalar The end of the period to read. More...
NumValuesPerNode UInt32 Scalar The maximum number of values returned for any node over the time range. More...
ReturnBounds Boolean Scalar A boolean parameter indicating whether bounding values should be returned. More...

IsReadModified

TRUE for read modified functionality, FALSE for read raw functionality.

The default value is FALSE.

StartTime

The beginning of the period to read.

Set to default value of DateTime.MinValue if no specific start time is specified.

EndTime

The end of the period to read.

Set to default value of DateTime.MinValue if no specific end time is specified.

NumValuesPerNode

The maximum number of values returned for any node over the time range.

If only one time is specified, the time range must extend to return this number of values. The default value 0 indicates that there is no maximum.

ReturnBounds

A boolean parameter indicating whether bounding values should be returned.

It has the following values

TRUE
bounding values should be returned
FALSE
all other cases

ReadProcessedDetails

Selects a set of aggregate values from the history database by specifying a time domain for one or more variables.

This structure is used to compute aggregate values, qualities, and timestamps from data in the history database for the specified time domain for one or more HistoricalDataNodes. The time domain is divided into intervals of duration ProcessingInterval. The specified AggregateType is calculated for each interval beginning with startTime by using the data within the next ProcessingInterval.

For example, this function can provide hourly statistics such as maximum, minimum, and average for each item during the specified time domain if ProcessingInterval is 1 hour.

The domain of the request is defined by startTime, endTime, and ProcessingInterval. All three must be specified. If endTime is less than startTime, the data shall be returned in reverse order with later data coming first. If startTime and endTime are the same, the server shall return Bad_InvalidArgument, as there is no meaningful way to interpret such a case.

The aggregateType[] parameter allows a Client to request multiple aggregate calculations per requested NodeId. If multiple aggregates are requested, a corresponding number of entries are required in the NodesToRead array.

For example, requesting Min aggregate for NodeId FIC101, FIC102 and both Min and Max aggregates for NodeId FIC103 would require NodeId FIC103 to appear twice in the NodesToRead array request parameter.

aggregateType[] NodesToRead[]
Min FIC101
Min FIC102
Min FIC103
Max FIC103

If the array of aggregates does not match the array of NodesToRead, the Server shall return a StatusCode of Bad_AggregateListMismatch. The aggregateConfiguration parameter allows a Client to override the aggregate configuration settings supplied by the AggregateConfiguration object on a per call basis. If the Server does not support the ability to override the aggregate configuration settings, it shall return a StatusCode of Bad_AggregateConfigurationRejected. If the aggregate is not valid for the node, the StatusCode shall be Bad_AggregateNotSupported.

The values used in computing the aggregate for each interval shall include any value that falls exactly on the timestamp at beginning of the interval, but shall not include any value that falls directly on the timestamp ending the interval. Thus, each value shall be included only once in the calculation. If the time domain is in reverse order, we consider the later timestamp to be the one beginning the subinterval, and the earlier timestamp to be the one ending it. Note that this means that simply swapping the start and end times will not result in getting the same values back in reverse order, as the interval being requested in the two cases are not the same.

If an aggregate is taking a long time to calculate, the Server can return partial results with a continuation point. This might be done if the calculation is going to take more time than the Client timeout hint. In some cases it may take longer than the Client timeout hint to calculate even one Aggregate result. Then the server may return zero results with a continuation point that allows the server to resume the calculation on the next Client read call.

Field DataType ValueRank Description
StartTime DateTime Scalar The beginning of the period to read.
EndTime DateTime Scalar The end of the period to read.
ProcessingInterval Double Scalar The interval between returned aggregate values. More...
AggregateType NodeId Array The NodeId of the HistoryAggregate object that indicates the list of aggregates to be used when retrieving processed history.
AggregateConfiguration AggregateConfiguration Scalar Allows a Client to override aggregate configuration settings ona per call basis.

ProcessingInterval

The interval between returned aggregate values.

The value 0 indicates that there is no ProcessingInterval defined.

ReadAtTimeDetails

Selects a set of raw or interpolated values from the history database by specifying a series of timestamps for one or more variables.

The ReadAtTimeDetails structure reads the values and qualities from the history database for the specified timestamps for one or more HistoricalDataNodes. This function is intended to provide values to correlate with other values with a known timestamp. For example, a Client may need to read the values of sensors when lab samples were collected.

The order of the values and qualities returned shall match the order of the timestamps supplied in the request.

If no value exists for a specified timestamp, a value shall be interpolated from the surrounding values to represent the value at the specified timestamp. The interpolation will follow the same rules as the standard interpolated aggregate as outlined in Part 13 of the OPC UA specification.

If the useSimpleBounds flag is True and interpolation is required, SimpleBounds will be used to calculate the data value.

If a value is found for the specified timestamp, the server will set the StatusCode InfoBits to be Raw. If the value is interpolated from the surrounding values, the server will set the StatusCode InfoBits to be Interpolated.

If the requested timestamp format is not supported for a node, the operation shall return the Bad_TimestampNotSupported StatusCode.

Field DataType ValueRank Description
ReqTimes DateTime Array Defines the specific timestamps for which values are to be read.
UseSimpleBounds Boolean Scalar Use simple bounds to determine the value at the specific timestamp.

HistoryEvent

A table structure that is used to return Event fields to a Historical Read.

The structure is in the form of a table consisting of one or more Events, each containing an array of one or more fields. The selection and order of the fields returned for each Event is identical to the selected parameter of the EventFilter.

Field DataType ValueRank Description
Events HistoryEventFieldList Array The list of Events being delivered

PerformUpdateType

Enum String Enum Value Description
Insert 1 Data was inserted
Replace 2 Data was replaced
Update 3 Data was inserted or replaced
Remove 4 Data was deleted

UpdateDataDetails

The details for insert, replace, and insert/replace history updates.

Insert data functionality
Setting performInsertReplace = INSERT_1 inserts entries into the history database at the specified timestamps for one or more HistoricalDataNodes. If an entry exists at the specified timestamp, the new entry shall not be inserted; instead the StatusCode shall indicate Bad_EntryExists.

This function is intended to insert new entries at the specified timestamps; e.g. the insertion of lab data to reflect the time of data collection.

Replace data functionality
Setting performInsertReplace = REPLACE_2 replaces entries in the history database at the specified timestamps for one or more HistoricalDataNodes. If no entry exists at the specified timestamp, the new entry shall not be inserted; otherwise the StatusCode shall indicate Bad_NoEntryExists.

This function is intended to replace existing entries at the specified timestamp; e.g., correct lab data that was improperly processed, but inserted into the history database.

Update data functionality
Setting performInsertReplace = UPDATE_3 inserts or replaces entries in the history database for the specified timestamps for one or more HistoricalDataNodes. If the item has an entry at the specified timestamp, the new entry will replace the old one. If there is no entry at that timestamp, the function will insert the new data.

A Server can create a modified value for a value being replaced or inserted, however it is not required.

This function is intended to unconditionally insert/replace values and qualities; e.g., correction of values for bad sensors.

Good as a StatusCode for an individual entry is allowed when the server is unable to say whether there was already a value at that timestamp. If the server can determine whether the new entry replaces an entry that was already there, it should use Good_EntryInserted or Good_EntryReplaced to return that information.

Field DataType ValueRank Description
NodeId NodeId Scalar Node ID of the object to be updated.
PerformInsertReplace PerformUpdateType Scalar Determines which action of insert, replace, or update is performed. More...
UpdateValues DataValue Array New values to be inserted or to replace.

PerformInsertReplace

Determines which action of insert, replace, or update is performed.

Possible values are INSERT_1, REPLACE_2, or UPDATE_3, see UpdateDataDetails

UpdateStructureDataDetails

This function inserts, replaces or removes structured history data or annotations into the history database at the specified timestamps for one or more HistoricalDataNodes.

Structured history data provides metadata describing an entry in the history database. The server shall define what uniqueness means for each structured history data structure type. For example, a server may only allow one annotation per timestamp, which means the timestamp is the unique key for the structure. Another server may allow for multiple annotations to exist per user, so a combination of a username, timestamp, and message may be used as the unique key for the structure. In the following sections the terms “Structured Histroy Data exists” and “at the specificed parameters” means a matching entry has been found at the specified timestamp using the Server’s criteria for uniqueness.

In the case where the Client wishes to replace a parameter that is part of the uniqueness criteria, the resulting StatusCode would be Bad_NoEntryExists. The Client must remove the existing structure and then insert the new structure.

Insert functionality
Setting performInsertReplace = INSERT_1 inserts structured history data, such as annotations, into the history database at the specified parameters for one or more properties of HistoricalDataNodes.

If a structured history data entry already exists at the specified parameters, the StatusCode shall indicate Bad_EntryExists.

Replace functionality
Setting performInsertReplace = REPLACE_2 replaces structured history data such as annotations in the history database at the specified parameters for one or more properties of HistoricalDataNodes.

If a structured history data entry does not already exist at the specified parameters, the StatusCode shall indicate Bad_NoEntryExists.

Update functionality
Setting performInsertReplace = UPDATE_3 inserts or replaces structured history data such as annotations in the history database at the specified parameters for one or more properties of HistoricalDataNodes.

If a structure history data entry already exists at the specified paramters, it is deleted and the value provided by the Client is inserted. If no existing entry exists, the new entry is inserted.

If an existing entry was replaced successfully, the StatusCode shall be Good_EntryReplaced. If a new entry was created, the StatusCode shall be Good_EntryInserted. If the server cannot determine whether it replaced or inserted an entry, the StatusCode shall be Good.

Remove functionality
Setting performInsertReplace = REMOVE_4 removes structured history data such as annotations from the history database at the specified parameters for one or more properties of HistoricalDataNodes.

If a structure history data entry exists at the specified parameters, it is deleted. If structured history data does not already exist at the specified parameters, the StatusCode shall indicate Bad_NoEntryExists.

Field DataType ValueRank Description
NodeId NodeId Scalar NodeId of the object to be updated.
PerformInsertReplace PerformUpdateType Scalar Determines which action of insert, replace, update, or remove is performed. More...
UpdateValues DataValue Array New values to be inserted, replaced, or removed.

PerformInsertReplace

Determines which action of insert, replace, update, or remove is performed.

Possible values are INSERT_1, REPLACE_2, UPDATE_3, or REMOVE_4.

UpdateEventDetails

This function inserts new events or replaces existing events in the history database for one or more HistoricalEventNodes.

Insert event functionality
This function is intended to insert new entries; e.g., backfilling of historical events.

Setting performInsertReplace = INSERT_1 inserts entries into the event history database for one or more HistoricalEventNodes. The whereClause parameter of the EventFilter shall be empty. The SelectClause must as a minimum provide the following event fields: EventType and Time. It is also recommended that the SourceNode and the SourceName fields are provided. If one of the required fields is not provided, the following error is returned: Bad_ArgumentsMissing. If the historian does not support archiving the specified EventType, the StatusCode shall indicate Bad_TypeDefinitionInvalid. If the SourceNode is not a valid source for Events, the StatusCode shall indicate Bad_SourceNodeIdInvalid. If the time does not fall within range that can be stored, the StatusCode shall indicate Bad_OutOfRange. If the selectClause does not include fields which are mandatory for the EventType, the StatusCode shall indicate Bad_ArgumentsMissing. If the selectClause specifies fields which are not valid for the EventType or cannot be saved by the historian, the StatusCode shall indicate Good_DataIgnored and the OperationResults array shall specify Bad_NotSupported for each ignored field.

The EventId is a server generated opaque value and a Client cannot assume that it knows how to create valid EventIds. A Server must be able to generate an appropriate default value for the EventId field. If a Client does specify the EventId in the selectClause and it matches an exitsting event, the StatusCode shall indicate Bad_EntryExists. A Client must use a HistoryRead to discover any automatically generated EventIds.

If any errors occur while processing individual fields, the StatusCode shall indicate Bad_InvalidArgument and the OperationResults array shall specify the exact error for each invalid field. The IndexRange parameter of the SimpleAttributeOperand is not valid for insert operations and the OperationResults shall specify Bad_IndexRangeInvalid if one is specified.

If no errors occur, the StatusCode shall indicate Good and the OperationResults array shall be empty. If errors do occur, the OperationResults array will have one element for each fiel d specified in the selectClause.

A Client may instruct the Server to choose a suitable default value for a field by specifying a value of null. If the server is not able to select a suitable default, the corresponding entry in the OperationResults array shall be Bad_InvalidArgument.

Replace event functionality
This function is intended to replace fields in existing event entries; e.g. correct event data that contained incorrect data due to a bad sensor.

Setting performInsertReplace = REPLACE_2 replaces entries in the event history database for the specified filter for one or more HistoricalEventNodes. The whereClause parameter of the EventFilter shall specify the EventId property. If no entry exists matching the specified filter, no updates will be performed; instead the StatusCode shall indicate Bad_NoEntryExists.

If the selectClause specifies fields which are not valid for the EventType or cannot be saved by the historian, the StatusCode shall indicate Good_DataIgnored and the OperationResults array shall specify Bad_NotSupported for each ignored field.

If a field is valid for the EventType but cannot be changed, then the StatusCode shall indicate Good_DataIgnored and the corresponding entry in the OperationResults array shall be Bad_NotWriteable.

If fatal errors occur while processing individual fields, the StatusCode shall indicate Bad_InvalidArgument and the OperationResults array shall specify the exact error.

If no errors occur, the StatusCode shall indicate Good and the OperationResults array shall be empty.If errors do occur, the OperationResults array will have one element for each field specified in the selectClause.

Update event functionality
This function is intended to unconditionally insert/replace events, e.g. synchronizing a backup event database.

Setting performInsertReplace = UPDATE_3 inserts or replaces entries in the event history database for the specified filter for one or more HistoricalEventNodes.

The server will, based on its own criteria, attempt to determine whether the event already exists. If it does exist, the event will be deleted and the new event will be inserted (retaining the EventId). If the EventID was provided, the EventID will be used to determine if the event already exists. If the event does not exist, a new event will be inserted, including the generation of a new EventId.

All of the restrictions, behaviours, and errors specified for the insert functionality also apply to this function.

If an existing entry was replaced successfully, the the StatusCode shall be Good_EntryReplaced. If a new entry was created, the StatusCode shall be Good_EntryInserted. If the server cannot determine whether it replaced or inserted an entry, the StatusCode shall be Good.

Field DataType ValueRank Description
NodeId NodeId Scalar NodeId of the object to be updated
PerformInsertReplace PerformUpdateType Scalar Determines which action of insert, replace, or update is performed. More...
Filter EventFilter Scalar If the history of the notification conforms to the EventFilter, the history of the notification is updated.
EventData HistoryEventFieldList Array Event notification data to be inserted or updated.

PerformInsertReplace

Determines which action of insert, replace, or update is performed.

Possible values are INSERT_1, REPLACE_2, or UPDATE_3 (see UpdateEventDetails).

DeleteRawModifiedDetails

The details for delete raw and delete modified history updates.

These functions are intended to be used to delete data that has been accidentally entered into the history database, e.g. deletion of data from a source with incorrect timestamps. Both startTime and endTime must be defined. The startTime must be less than the endTime, and values up to but not including the endTime are deleted. It is permissible for startTime = endTime, in which case the value at the startTime is deleted.

Delete raw functionality
Setting isDeleteModified = FALSE deletes all raw entries from the history database for the specified time domain for one more HistoricalDataNodes.

If no data is found in the time range for a particular HistoricalDataNode, the StatusCode for that item is Bad_NoData.

Delete modified functionality
Setting isDeleteModified = TRUE deletes all modified entries from the history database for the specified time domain for one or more HistoricalDataNodes. If no data is found in the time range for a particular HistoricalDataNode, the StatusCode for that item is Bad_NoData.

Field DataType ValueRank Description
NodeId NodeId Scalar NodeId of the object for which history values are to be deleted.
IsDeleteModified Boolean Scalar TRUE for MODIFIED, FALSE for RAW. More...
StartTime DateTime Scalar The beginning of the period to be deleted.
EndTime DateTime Scalar The end of the period to be deleted.

IsDeleteModified

TRUE for MODIFIED, FALSE for RAW.

Default value is FALSE.

DeleteAtTimeDetails

The DeleteAtTime structure deletes all entries in the history database for the specified timestamps for one or more HistoricalDataNodes.

This parameter is intended to be used to delete specific data from the history database, e.g. lab data that is incorrect and cannot be correctly reproduced.

Field DataType ValueRank Description
NodeId NodeId Scalar NodeId of the object for which history values are to be deleted.
ReqTimes DateTime Array The entries define the specific timestamps for which values are to be deleted.

DeleteEventDetails

Deletes all event entries from the history database matching the EventId for one or more HistoricalEventNodes.

If no events are found that match the specified filter for a HistoricalEventNode, the StatusCode for that Node is Bad_NoData.

Field DataType ValueRank Description
NodeId NodeId Scalar NodeId of the object for which history values are to be deleted.
EventIds ByteString Array An array of EventIds to identify which events are to be deleted.

HistoryEventFieldList

Field DataType ValueRank Description
EventFields Variant Array List of selected Event fields. More...

EventFields

List of selected Event fields.

This will be a one to one match with the fields selected in the EventFilter.

Annotation

Describes Annotation information for the history data items.

Field DataType ValueRank Description
Message String Scalar Annotation message or text
UserName String Scalar The user that added the Annotation, as supplied by underlying system.
AnnotationTime DateTime Scalar The time the Annotation was added. This will probably be different than the SourceTimestamp.