diff --git a/Libraries/Opc.Ua.Client/Subscription/Subscription.cs b/Libraries/Opc.Ua.Client/Subscription/Subscription.cs
index 953f1fe857..7b449aa394 100644
--- a/Libraries/Opc.Ua.Client/Subscription/Subscription.cs
+++ b/Libraries/Opc.Ua.Client/Subscription/Subscription.cs
@@ -1663,6 +1663,33 @@ namespace Opc.Ua.Client
return false;
}
+ ///
+ /// Tells the server to refresh all conditions being monitored by the subscription for a specific
+ /// monitoredItem for events.
+ ///
+ public bool ConditionRefresh2(uint monitoredItemId)
+ {
+ VerifySubscriptionState(true);
+
+ try
+ {
+ object[] inputArguments = new object[] { m_id, monitoredItemId };
+
+ m_session.Call(
+ ObjectTypeIds.ConditionType,
+ MethodIds.ConditionType_ConditionRefresh2,
+ inputArguments);
+
+ return true;
+ }
+ catch (ServiceResultException sre)
+ {
+ Utils.LogError(sre, "SubscriptionId {0}: Item {1} Failed to call ConditionRefresh2 on server",
+ m_id, monitoredItemId);
+ }
+ return false;
+ }
+
///
/// Call the ResendData method on the server for this subscription.
///
diff --git a/Libraries/Opc.Ua.Client/Subscription/SubscriptionAsync.cs b/Libraries/Opc.Ua.Client/Subscription/SubscriptionAsync.cs
index 7b54124af0..c8381e34f2 100644
--- a/Libraries/Opc.Ua.Client/Subscription/SubscriptionAsync.cs
+++ b/Libraries/Opc.Ua.Client/Subscription/SubscriptionAsync.cs
@@ -454,6 +454,7 @@ namespace Opc.Ua.Client
var methodsToCall = new CallMethodRequestCollection();
methodsToCall.Add(new CallMethodRequest() {
+ ObjectId = ObjectTypeIds.ConditionType,
MethodId = MethodIds.ConditionType_ConditionRefresh,
InputArguments = new VariantCollection() { new Variant(m_id) }
});
@@ -464,6 +465,29 @@ namespace Opc.Ua.Client
ct).ConfigureAwait(false);
}
+ ///
+ /// Tells the server to refresh all conditions being monitored by the subscription for a specific
+ /// monitoredItem for events.
+ ///
+ public async Task ConditionRefresh2Async(uint monitoredItemId, CancellationToken ct = default)
+ {
+ VerifySubscriptionState(true);
+
+ var methodsToCall = new CallMethodRequestCollection();
+ methodsToCall.Add(new CallMethodRequest() {
+ ObjectId = ObjectTypeIds.ConditionType,
+ MethodId = MethodIds.ConditionType_ConditionRefresh2,
+ InputArguments = new VariantCollection() {
+ new Variant(m_id),
+ new Variant( monitoredItemId ) }
+ });
+
+ var response = await m_session.CallAsync(
+ null,
+ methodsToCall,
+ ct).ConfigureAwait(false);
+ }
+
#endregion
}
}
diff --git a/Stack/Opc.Ua.Core/Stack/State/ProgramStateMachineState.cs b/Stack/Opc.Ua.Core/Stack/State/ProgramStateMachineState.cs
index 460a735069..20668bc4e7 100644
--- a/Stack/Opc.Ua.Core/Stack/State/ProgramStateMachineState.cs
+++ b/Stack/Opc.Ua.Core/Stack/State/ProgramStateMachineState.cs
@@ -118,11 +118,11 @@ namespace Opc.Ua
{ Methods.ProgramStateMachineType_Reset, Objects.ProgramStateMachineType_Halted, Objects.ProgramStateMachineType_HaltedToReady },
{ Methods.ProgramStateMachineType_Start, Objects.ProgramStateMachineType_Ready, Objects.ProgramStateMachineType_ReadyToRunning },
{ Methods.ProgramStateMachineType_Suspend,Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_RunningToSuspended },
- { Methods.ProgramStateMachineType_Reset, Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_RunningToReady },
{ Methods.ProgramStateMachineType_Halt, Objects.ProgramStateMachineType_Running, Objects.ProgramStateMachineType_RunningToHalted },
{ Methods.ProgramStateMachineType_Resume, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_SuspendedToRunning },
{ Methods.ProgramStateMachineType_Reset, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_SuspendedToReady },
- { Methods.ProgramStateMachineType_Halt, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_SuspendedToHalted }
+ { Methods.ProgramStateMachineType_Halt, Objects.ProgramStateMachineType_Suspended, Objects.ProgramStateMachineType_SuspendedToHalted },
+ { Methods.ProgramStateMachineType_Halt, Objects.ProgramStateMachineType_Ready, Objects.ProgramStateMachineType_ReadyToHalted }
};