In OPC Alarms and Events, information is usually provided in form of event notifications, especially for transient (simple and tracking) events. For condition-related events, however, it is also possible to get (upon request) information about the current state of a specified condition.
If you want to obtain the current state information for the condition instance in an OPC Alarms and Events sever, call the GetConditionState method. You pass in individual arguments for machine name, server class, fully qualified source name, condition name, and optionally an array of event attributes to be returned. You will receive back an AEConditionState object holding the current state information about an OPC condition instance.
.NET
// This example shows how to obtain current state information for the condition instance corresponding to a Source and
// certain ConditionName.
using System;
using OpcLabs.EasyOpc.AlarmsAndEvents;
using OpcLabs.EasyOpc.OperationModel;
namespace DocExamples.AlarmsAndEvents._EasyAEClient
{
class GetConditionState
{
public static void Main1()
{
// Instantiate the client object.
var client = new EasyAEClient();
AEConditionState conditionState;
try
{
conditionState = client.GetConditionState("", "OPCLabs.KitEventServer.2",
"Simulation.ConditionState1", "Simulated");
}
catch (OpcException opcException)
{
Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message);
return;
}
Console.WriteLine("ConditionState:");
Console.WriteLine(" .ActiveSubcondition: {0}", conditionState.ActiveSubcondition);
Console.WriteLine(" .Enabled: {0}", conditionState.Enabled);
Console.WriteLine(" .Active: {0}", conditionState.Active);
Console.WriteLine(" .Acknowledged: {0}", conditionState.Acknowledged);
Console.WriteLine(" .Quality: {0}", conditionState.Quality);
// Remark: IAEConditionState has many more properties
}
}
}
# This example shows how to obtain current state information for the condition instance corresponding to a Source and
# certain ConditionName.
# The QuickOPC package is needed. Install it using "pip install opclabs_quickopc".
import opclabs_quickopc
# Import .NET namespaces.
from OpcLabs.EasyOpc import *
from OpcLabs.EasyOpc.AlarmsAndEvents import *
from OpcLabs.EasyOpc.OperationModel import *
# Instantiate the client object
client = EasyAEClient()
print('Getting condition state...')
try:
conditionState = IEasyAEClientExtension.GetConditionState(client,
'', 'OPCLabs.KitEventServer.2', 'Simulation.ConditionState1', 'Simulated')
except OpcException as opcException:
print('*** Failure: ' + opcException.GetBaseException().Message)
exit()
print('ConditionState:')
print(' .ActiveSubcondition: ', conditionState.ActiveSubcondition)
print(' .Enabled: ', conditionState.Enabled)
print(' .Active: ', conditionState.Active)
print(' .Acknowledged: ', conditionState.Acknowledged)
print(' .Quality: ', conditionState.Quality)
# Note that IAEConditionState has many more properties
print()
print('Finished.')
' This example shows how to obtain current state information for the condition instance corresponding to a Source and
' certain ConditionName.
Imports OpcLabs.EasyOpc.AlarmsAndEvents
Imports OpcLabs.EasyOpc.OperationModel
Namespace AlarmsAndEvents._EasyAEClient
Friend Class GetConditionState
Public Shared Sub Main1()
Dim client = New EasyAEClient()
Dim conditionState As AEConditionState
Try
conditionState = client.GetConditionState("", "OPCLabs.KitEventServer.2", "Simulation.ConditionState1", "Simulated")
Catch opcException As OpcException
Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message)
Exit Sub
End Try
Console.WriteLine("ConditionState:")
Console.WriteLine(" .ActiveSubcondition: {0}", conditionState.ActiveSubcondition)
Console.WriteLine(" .Enabled: {0}", conditionState.Enabled)
Console.WriteLine(" .Active: {0}", conditionState.Active)
Console.WriteLine(" .Acknowledged: {0}", conditionState.Acknowledged)
Console.WriteLine(" .Quality: {0}", conditionState.Quality)
' Remark: IAEConditionState has many more properties
End Sub
End Class
End Namespace
COM
# This example shows how to obtain current state information for the condition instance corresponding to a Source and
# certain ConditionName.
# The Python for Windows (pywin32) extensions package is needed. Install it using "pip install pypiwin32".
# CAUTION: We now recommend using Python.NET package instead. Full set of examples with Python.NET is available!
import time
import win32com.client
from pywintypes import com_error
serverDescriptor = win32com.client.Dispatch('OpcLabs.EasyOpc.ServerDescriptor')
serverDescriptor.UrlString = 'opcae://localhost/OPCLabs.KitEventServer.2'
#serverDescriptor.ServerClass = 'OPCLabs.KitEventServer.2'
sourceDescriptor = win32com.client.Dispatch('OpcLabs.EasyOpc.AlarmsAndEvents.AENodeDescriptor')
sourceDescriptor.QualifiedName = "Simulation.ConditionState1"
# Instantiate the client object
client = win32com.client.Dispatch('OpcLabs.EasyOpc.AlarmsAndEvents.EasyAEClient')
print('Getting condition state...')
try:
conditionState = client.GetConditionState(serverDescriptor, sourceDescriptor, 'Simulated', [])
except com_error as e:
print('*** Failure: ' + e.args[2][1] + ': ' + e.args[2][2])
exit()
print('ConditionState:')
print(' .ActiveSubcondition: ', conditionState.ActiveSubcondition)
print(' .Enabled: ', conditionState.Enabled)
print(' .Active: ', conditionState.Active)
print(' .Acknowledged: ', conditionState.Acknowledged)
print(' .Quality: ', conditionState.Quality)
# Note that IAEConditionState has many more properties
print()
print('Finished.')
Rem This example shows how to obtain current state information for the condition instance corresponding to a Source and
Rem certain ConditionName.
Option Explicit
Dim ServerDescriptor: Set ServerDescriptor = CreateObject("OpcLabs.EasyOpc.ServerDescriptor")
ServerDescriptor.ServerClass = "OPCLabs.KitEventServer.2"
Dim SourceDescriptor: Set SourceDescriptor = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AENodeDescriptor")
SourceDescriptor.QualifiedName = "Simulation.ConditionState1"
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.EasyAEClient")
On Error Resume Next
Dim ConditionState: Set ConditionState = Client.GetConditionState(ServerDescriptor, SourceDescriptor, "Simulated", Array())
If Err.Number <> 0 Then
WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description
WScript.Quit
End If
On Error Goto 0
WScript.Echo "ConditionState:"
With ConditionState
WScript.Echo Space(4) & ".ActiveSubcondition: " & .ActiveSubcondition
WScript.Echo Space(4) & ".Enabled: " & .Enabled
WScript.Echo Space(4) & ".Active: " & .Active
WScript.Echo Space(4) & ".Acknowledged: " & .Acknowledged
WScript.Echo Space(4) & ".Quality: " & .Quality
Rem Note that IAEConditionState has many more properties
End With
In QuickOPC.NET, you can alternatively pass in a ServerDescriptor in place of machine name and server class arguments.
See Also