Code:
Code: Select all
UaStatus SampleSubscription::createMonitoredItems()
{
......
// Select EventId (BaseEventType)
selectElement.setBrowsePathElement(0, UaQualifiedName("EventId", 0), 1);
eventFilter.setSelectClauseElement(0, selectElement, 15);
// Select EventType (BaseEventType)
selectElement.setBrowsePathElement(0, UaQualifiedName("EventType", 0), 1);
eventFilter.setSelectClauseElement(1, selectElement, 15);
// Select SourceName (BaseEventType)
selectElement.setBrowsePathElement(0, UaQualifiedName("SourceName", 0), 1);
eventFilter.setSelectClauseElement(2, selectElement, 15);
// Select Time (BaseEventType)
selectElement.setBrowsePathElement(0, UaQualifiedName("Time", 0), 1);
eventFilter.setSelectClauseElement(3, selectElement, 15);
// Select Message (BaseEventType)
selectElement.setBrowsePathElement(0, UaQualifiedName("Message", 0), 1);
eventFilter.setSelectClauseElement(4, selectElement, 15);
// Select Severity (BaseEventType)
selectElement.setBrowsePathElement(0, UaQualifiedName("Severity", 0), 1);
eventFilter.setSelectClauseElement(5, selectElement, 15);
// Select BranchId (ConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("BranchId", 0), 1);
eventFilter.setSelectClauseElement(6, selectElement, 15);
// Select ConditionName (ConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("ConditionName", 0), 1);
eventFilter.setSelectClauseElement(7, selectElement, 15);
// Select Retain (ConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("Retain", 0), 1);
eventFilter.setSelectClauseElement(8, selectElement, 15);
// Select AckedState -> Id (AcknowledgableConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("AckedState", 0), 1);
selectElement.setBrowsePathElement(1, UaQualifiedName("Id", 0), 2);
eventFilter.setSelectClauseElement(9, selectElement, 15);
// Select ConfirmedState -> Id (AcknowledgableConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("ConfirmedState", 0), 1);
selectElement.setBrowsePathElement(1, UaQualifiedName("Id", 0), 2);
eventFilter.setSelectClauseElement(10, selectElement, 15);
selectElement.clearBrowsePath();
// Select ActiveState (AlarmConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("ActiveState", 0), 1);
eventFilter.setSelectClauseElement(11, selectElement, 15);
// Select ActiveState -> Id (AlarmConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("ActiveState", 0), 2);
selectElement.setBrowsePathElement(1, UaQualifiedName("Id", 0), 2);
eventFilter.setSelectClauseElement(12, selectElement, 15);
// Select ActiveState -> EffectiveDisplayName (AlarmConditionType)
selectElement.setBrowsePathElement(0, UaQualifiedName("ActiveState", 0), 2);
selectElement.setBrowsePathElement(1, UaQualifiedName("EffectiveDisplayName", 0), 2);
eventFilter.setSelectClauseElement(13, selectElement, 15);
// Select Condition NodeId
// This is special - the path is empty and the requested Attribute is NodeId
selectElement.setTypeId(UaNodeId(OpcUaId_ConditionType));
selectElement.setAttributeId(OpcUa_Attributes_NodeId);
selectElement.clearBrowsePath();
eventFilter.setSelectClauseElement(14, selectElement, 15);
......
}
void SampleSubscription::newEvents(
OpcUa_UInt32 clientSubscriptionHandle, //!< [in] Client defined handle of the affected subscription
UaEventFieldLists& eventFieldList) //!< [in] List of event notifications sent by the server
{
OpcUa_UInt32 i = 0;
printf("-- Event newEvents -----------------------------------------\n");
printf("clientSubscriptionHandle %d \n", clientSubscriptionHandle);
for (i = 0; i < eventFieldList.length(); i++)
{
EventObject newEvent;
UaVariant(eventFieldList[i].EventFields[1]).toNodeId(newEvent.eventType);
if (newEvent.eventType.identifierNumeric() == OpcUaId_RefreshStartEventType || newEvent.eventType.identifierNumeric() == OpcUaId_RefreshEndEventType)
continue;
// check if eventType and conditionNodeId is set
if (OpcUa_IsGood(UaVariant(eventFieldList[i].EventFields[1]).toNodeId(newEvent.eventType)) && OpcUa_IsGood(UaVariant(eventFieldList[i].EventFields[14]).toNodeId(newEvent.conditionNodeId)))
{
// get rest of the event fields
UaVariant(eventFieldList[i].EventFields[0]).toByteString(newEvent.eventId);
UaVariant(eventFieldList[i].EventFields[1]).toNodeId(newEvent.eventType);
newEvent.sourceName = UaVariant(eventFieldList[i].EventFields[2]).toString();
UaVariant(eventFieldList[i].EventFields[3]).toDateTime(newEvent.time);
UaVariant(eventFieldList[i].EventFields[4]).toLocalizedText(newEvent.message);
UaVariant(eventFieldList[i].EventFields[5]).toUInt16(newEvent.severity);
UaVariant(eventFieldList[i].EventFields[6]).toNodeId(newEvent.branchId);
newEvent.conditionName = UaVariant(eventFieldList[i].EventFields[7]).toString();
UaVariant(eventFieldList[i].EventFields[8]).toBool(newEvent.retain);
UaVariant(eventFieldList[i].EventFields[9]).toBool(newEvent.ackedStateId);
UaVariant(eventFieldList[i].EventFields[10]).toBool(newEvent.confirmedStateId);
UaVariant(eventFieldList[i].EventFields[11]).toLocalizedText(newEvent.activeState);
UaVariant(eventFieldList[i].EventFields[12]).toBool(newEvent.activeStateId);
UaVariant(eventFieldList[i].EventFields[13]).toLocalizedText(newEvent.activeStateEffectiveDisplayName);
UaVariant(eventFieldList[i].EventFields[14]).toNodeId(newEvent.conditionNodeId);
for (OpcUa_UInt32 n = 0; n < 15; n++)
{
printf("EventFields[%d] value: [%s] \n", n, UaVariant(eventFieldList[i].EventFields[n]).toString().toUtf8());
}
printf("Event[%d] Message=%s SourceName=%s Severity=%d uvActive=%s uvAcked=%d \n",
i,
newEvent.message.toFullString().toUtf8(),
newEvent.sourceName.toUtf8(),
newEvent.severity,
newEvent.activeState.toString().toUtf8(),
newEvent.ackedStateId);
}
}
printf("------------------------------------------------------------\n");
}
As shown in figure:
[img]/Users/mac/Downloads/img.png[/img]
Can you help me see what the problem is?
Thank you!