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 } };