// This example shows how to unsubscribe from changes of multiple items.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in Object Pascal (Delphi) on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-OP .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
type
TClientEventHandlers127 = class
procedure OnDataChangeNotification(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyUADataChangeNotificationEventArgs);
end;
procedure TClientEventHandlers127.OnDataChangeNotification(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyUADataChangeNotificationEventArgs);
begin
// Display the data
if eventArgs.Succeeded then
WriteLn(eventArgs.Arguments.NodeDescriptor.ToString, ': ',
eventArgs.AttributeData.ToString)
else
WriteLn(eventArgs.Arguments.NodeDescriptor.ToString, ' *** Failure: ',
eventArgs.ErrorMessageBrief);
end;
class procedure UnsubscribeMultipleMonitoredItems.Main;
var
Arguments: OleVariant;
Client: TEasyUAClient;
ClientEventHandlers: TClientEventHandlers127;
Handle: Cardinal;
HandleArray: OleVariant;
HandleSafeArray: PSafeArray;
I: Cardinal;
MonitoredItemArguments1, MonitoredItemArguments2, MonitoredItemArguments3:
_EasyUAMonitoredItemArguments;
MonitoringParameters: _UAMonitoringParameters;
begin
// Instantiate the client object and hook events
Client := TEasyUAClient.Create(nil);
ClientEventHandlers := TClientEventHandlers127.Create;
Client.OnDataChangeNotification := ClientEventHandlers.OnDataChangeNotification;
WriteLn('Subscribing...');
MonitoringParameters := CoUAMonitoringParameters.Create;
MonitoringParameters.SamplingInterval := 1000;
MonitoredItemArguments1 := CoEasyUAMonitoredItemArguments.Create;
MonitoredItemArguments1.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
//'https://opcua.demo-this.com:51212/UA/SampleServer/';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
MonitoredItemArguments1.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10845';
MonitoredItemArguments1.MonitoringParameters := MonitoringParameters;
MonitoredItemArguments2 := CoEasyUAMonitoredItemArguments.Create;
MonitoredItemArguments2.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
//'https://opcua.demo-this.com:51212/UA/SampleServer/';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
MonitoredItemArguments2.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10853';
MonitoredItemArguments2.MonitoringParameters := MonitoringParameters;
MonitoredItemArguments3 := CoEasyUAMonitoredItemArguments.Create;
MonitoredItemArguments3.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
//'https://opcua.demo-this.com:51212/UA/SampleServer/';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
MonitoredItemArguments3.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10855';
MonitoredItemArguments3.MonitoringParameters := MonitoringParameters;
Arguments := VarArrayCreate([0, 2], varVariant);
Arguments[0] := MonitoredItemArguments1;
Arguments[1] := MonitoredItemArguments2;
Arguments[2] := MonitoredItemArguments3;
HandleSafeArray := Client.SubscribeMultipleMonitoredItems(Arguments);
TVarData(HandleArray).VType := varArray or varVariant;
TVarData(HandleArray).VArray := PVarArray(HandleSafeArray);
for I := VarArrayLowBound(HandleArray, 1) to VarArrayHighBound(HandleArray, 1) do
begin
Handle := Cardinal(HandleArray[I]);
WriteLn('HandleArray[', I, ']: ', Handle);
end;
WriteLn('Processing monitored item changed events for 10 seconds...');
PumpSleep(10*1000);
WriteLn('Unsubscribing...');
Client.UnsubscribeMultipleMonitoredItems(HandleArray);
WriteLn('Waiting for 5 seconds...');
Sleep(5*1000);
WriteLn('Finished.');
VarClear(HandleArray);
VarClear(Arguments);
FreeAndNil(Client);
FreeAndNil(ClientEventHandlers);
end;
Rem This example shows how to unsubscribe from changes of multiple items.
Rem
Rem Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
Rem OPC client and subscriber examples in VBScript on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBScript .
Rem Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
Rem a commercial license in order to use Online Forums, and we reply to every post.
Option Explicit
' Instantiate the client object and hook events
Dim Client: Set Client= CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient")
WScript.ConnectObject Client, "Client_"
WScript.Echo "Subscribing..."
Dim MonitoringParameters: Set MonitoringParameters = CreateObject("OpcLabs.EasyOpc.UA.UAMonitoringParameters")
MonitoringParameters.SamplingInterval = 1000
Dim MonitoredItemArguments1: Set MonitoredItemArguments1 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.EasyUAMonitoredItemArguments")
MonitoredItemArguments1.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
MonitoredItemArguments1.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10845"
MonitoredItemArguments1.MonitoringParameters = MonitoringParameters
Dim MonitoredItemArguments2: Set MonitoredItemArguments2 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.EasyUAMonitoredItemArguments")
MonitoredItemArguments2.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
MonitoredItemArguments2.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10853"
MonitoredItemArguments2.MonitoringParameters = MonitoringParameters
Dim MonitoredItemArguments3: Set MonitoredItemArguments3 = CreateObject("OpcLabs.EasyOpc.UA.OperationModel.EasyUAMonitoredItemArguments")
MonitoredItemArguments3.EndpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
MonitoredItemArguments3.NodeDescriptor.NodeId.ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10855"
MonitoredItemArguments3.MonitoringParameters = MonitoringParameters
Dim arguments(2)
Set arguments(0) = MonitoredItemArguments1
Set arguments(1) = MonitoredItemArguments2
Set arguments(2) = MonitoredItemArguments3
Dim handleArray: handleArray = Client.SubscribeMultipleMonitoredItems(arguments)
Dim i: For i = LBound(handleArray) To UBound(handleArray)
WScript.Echo "handleArray(" & i & "): " & handleArray(i)
Next
WScript.Echo "Processing monitored item changed events for 10 seconds..."
WScript.Sleep 10 * 1000
WScript.Echo "Unsubscribing from two monitored items..."
Dim handles1(1)
handles1(0) = handleArray(1)
handles1(1) = handleArray(2)
Client.UnsubscribeMultipleMonitoredItems handles1
WScript.Echo "Processing monitored item changed events for 10 seconds..."
WScript.Sleep 10 * 1000
WScript.Echo "Unsubscribing from all remaining items..."
Client.UnsubscribeAllMonitoredItems
WScript.Echo "Waiting for 5 seconds..."
WScript.Sleep 5 * 1000
Sub Client_DataChangeNotification(Sender, e)
' Display the data
Dim display: If e.Exception Is Nothing Then display = e.AttributeData Else display = e.ErrorMessageBrief
WScript.Echo e.Arguments.NodeDescriptor & ":" & display
End Sub
// This example shows how to unsubscribe from changes of just some monitored
// items.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in Object Pascal (Delphi) on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-OP .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
type
TClientEventHandlers128 = class
procedure OnDataChangeNotification(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyUADataChangeNotificationEventArgs);
end;
procedure TClientEventHandlers128.OnDataChangeNotification(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyUADataChangeNotificationEventArgs);
begin
// Display the data
if eventArgs.Succeeded then
WriteLn(eventArgs.Arguments.NodeDescriptor.ToString, ': ',
eventArgs.AttributeData.ToString)
else
WriteLn(eventArgs.Arguments.NodeDescriptor.ToString, ' *** Failure: ',
eventArgs.ErrorMessageBrief);
end;
class procedure UnsubscribeMultipleMonitoredItems.Some;
var
Arguments: OleVariant;
Client: TEasyUAClient;
ClientEventHandlers: TClientEventHandlers128;
Handle: Cardinal;
HandleArray: OleVariant;
HandleSafeArray: PSafeArray;
I: Cardinal;
MonitoredItemArguments1, MonitoredItemArguments2, MonitoredItemArguments3:
_EasyUAMonitoredItemArguments;
MonitoringParameters: _UAMonitoringParameters;
SelectedHandles: OleVariant;
begin
// Instantiate the client object and hook events
Client := TEasyUAClient.Create(nil);
ClientEventHandlers := TClientEventHandlers128.Create;
Client.OnDataChangeNotification := ClientEventHandlers.OnDataChangeNotification;
WriteLn;
WriteLn('Subscribing...');
MonitoringParameters := CoUAMonitoringParameters.Create;
MonitoringParameters.SamplingInterval := 1000;
MonitoredItemArguments1 := CoEasyUAMonitoredItemArguments.Create;
MonitoredItemArguments1.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
//'https://opcua.demo-this.com:51212/UA/SampleServer/';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
MonitoredItemArguments1.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10845';
MonitoredItemArguments1.MonitoringParameters := MonitoringParameters;
MonitoredItemArguments2 := CoEasyUAMonitoredItemArguments.Create;
MonitoredItemArguments2.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
//'https://opcua.demo-this.com:51212/UA/SampleServer/';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
MonitoredItemArguments2.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10853';
MonitoredItemArguments2.MonitoringParameters := MonitoringParameters;
MonitoredItemArguments3 := CoEasyUAMonitoredItemArguments.Create;
MonitoredItemArguments3.EndpointDescriptor.UrlString :=
//'http://opcua.demo-this.com:51211/UA/SampleServer';
//'https://opcua.demo-this.com:51212/UA/SampleServer/';
'opc.tcp://opcua.demo-this.com:51210/UA/SampleServer';
MonitoredItemArguments3.NodeDescriptor.NodeId.ExpandedText := 'nsu=http://test.org/UA/Data/ ;i=10855';
MonitoredItemArguments3.MonitoringParameters := MonitoringParameters;
Arguments := VarArrayCreate([0, 2], varVariant);
Arguments[0] := MonitoredItemArguments1;
Arguments[1] := MonitoredItemArguments2;
Arguments[2] := MonitoredItemArguments3;
HandleSafeArray := Client.SubscribeMultipleMonitoredItems(Arguments);
TVarData(HandleArray).VType := varArray or varVariant;
TVarData(HandleArray).VArray := PVarArray(HandleSafeArray);
for I := VarArrayLowBound(HandleArray, 1) to VarArrayHighBound(HandleArray, 1) do
begin
Handle := Cardinal(HandleArray[I]);
WriteLn('HandleArray[', I, ']: ', Handle);
end;
WriteLn;
WriteLn('Processing monitored item changed events for 10 seconds...');
PumpSleep(10*1000);
WriteLn;
WriteLn('Unsubscribing from 2 monitored items...');
SelectedHandles := VarArrayCreate([0, 1], varVariant);
// We will unsubscribe from the first and third monitored item we have
// previously subscribed to.
SelectedHandles[0] := HandleArray[0];
SelectedHandles[1] := HandleArray[2];
Client.UnsubscribeMultipleMonitoredItems(SelectedHandles);
WriteLn;
WriteLn('Processing monitored item changed events for 10 seconds...');
PumpSleep(10*1000);
WriteLn;
WriteLn('Unsubscribing from all remaining monitored items...');
Client.UnsubscribeAllMonitoredItems;
WriteLn;
WriteLn('Waiting for 5 seconds...');
Sleep(5*1000);
WriteLn;
WriteLn('Finished.');
VarClear(HandleArray);
VarClear(Arguments);
FreeAndNil(Client);
FreeAndNil(ClientEventHandlers);
end;
// This example shows how to unsubscribe from changes of just some monitored
// items.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client and subscriber examples in PHP on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-PHP .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.
class ClientEvents {
function DataChangeNotification($Sender, $E)
{
// Display the data
if ($E->Succeeded)
printf(" s\n", $E->Arguments->NodeDescriptor, $E->AttributeData);
else
printf("s *** Failures\n", $E->Arguments->NodeDescriptor, $E->ErrorMessageBrief);
}
}
// Instantiate the client object and hook events
$Client = new COM("OpcLabs.EasyOpc.UA.EasyUAClient");
$ClientEvents = new ClientEvents();
com_event_sink($Client, $ClientEvents, "DEasyUAClientEvents");
printf("\n");
printf("Subscribing...\n");
$MonitoringParameters = new COM("OpcLabs.EasyOpc.UA.UAMonitoringParameters");
$MonitoringParameters->SamplingInterval = 1000;
$MonitoredItemArguments1 = new COM("OpcLabs.EasyOpc.UA.OperationModel.EasyUAMonitoredItemArguments");
$MonitoredItemArguments1->EndpointDescriptor->UrlString =
//"http://opcua.demo-this.com:51211/UA/SampleServer";
//"https://opcua.demo-this.com:51212/UA/SampleServer/";
"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
$MonitoredItemArguments1->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10845";
$MonitoredItemArguments1->MonitoringParameters = $MonitoringParameters;
$MonitoredItemArguments2 = new COM("OpcLabs.EasyOpc.UA.OperationModel.EasyUAMonitoredItemArguments");
$MonitoredItemArguments2->EndpointDescriptor->UrlString =
//"http://opcua.demo-this.com:51211/UA/SampleServer";
//"https://opcua.demo-this.com:51212/UA/SampleServer/";
"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
$MonitoredItemArguments2->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10853";
$MonitoredItemArguments2->MonitoringParameters = $MonitoringParameters;
$MonitoredItemArguments3 = new COM("OpcLabs.EasyOpc.UA.OperationModel.EasyUAMonitoredItemArguments");
$MonitoredItemArguments3->EndpointDescriptor->UrlString =
//"http://opcua.demo-this.com:51211/UA/SampleServer";
//"https://opcua.demo-this.com:51212/UA/SampleServer/";
"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
$MonitoredItemArguments3->NodeDescriptor->NodeId->ExpandedText = "nsu=http://test.org/UA/Data/ ;i=10855";
$MonitoredItemArguments3->MonitoringParameters = $MonitoringParameters;
$arguments[0] = $MonitoredItemArguments1;
$arguments[1] = $MonitoredItemArguments2;
$arguments[2] = $MonitoredItemArguments3;
$handleArray = $Client->SubscribeMultipleMonitoredItems($arguments);
for ($i = 0; $i < count($handleArray); $i++)
{
printf("handleArray[d]d\n", $i, $handleArray[$i]);
}
printf("\n");
printf("Processing monitored item changed events for 10 seconds...\n");
$startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 10);
printf("\n");
printf("Unsubscribing from 2 monitored items...\n");
$SelectedHandles[0] = $handleArray[0];
$SelectedHandles[1] = $handleArray[2];
$Client->UnsubscribeMultipleMonitoredItems($SelectedHandles);
printf("\n");
printf("Processing monitored item changed events for 10 seconds...\n");
$startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 10);
printf("\n");
printf("Unsubscribing from all remaining monitored items...\n");
$Client->UnsubscribeAllMonitoredItems;
printf("\n");
printf("Waiting for 5 seconds...\n");
$startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 5);
REM This example shows how to unsubscribe from changes of just some monitored
REM items.
REM
REM Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
REM OPC client and subscriber examples in Visual Basic on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VB .
REM Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
REM a commercial license in order to use Online Forums, and we reply to every post.
' The client object, with events
'Public WithEvents Client8 As EasyUAClient
Public Sub UnsubscribeMultipleMonitoredItems_Some_Command_Click()
OutputText = ""
Set Client8 = New EasyUAClient
OutputText = OutputText & "Subscribing..." & vbCrLf
Dim MonitoringParameters As New UAMonitoringParameters
MonitoringParameters.SamplingInterval = 1000
Dim MonitoredItemArguments1 As New EasyUAMonitoredItemArguments
MonitoredItemArguments1.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
MonitoredItemArguments1.nodeDescriptor.NodeId.expandedText = "nsu=http://test.org/UA/Data/ ;i=10845"
Set MonitoredItemArguments1.MonitoringParameters = MonitoringParameters
MonitoredItemArguments1.SetState ("Item1")
Dim MonitoredItemArguments2 As New EasyUAMonitoredItemArguments
MonitoredItemArguments2.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
MonitoredItemArguments2.nodeDescriptor.NodeId.expandedText = "nsu=http://test.org/UA/Data/ ;i=10853"
Set MonitoredItemArguments2.MonitoringParameters = MonitoringParameters
MonitoredItemArguments2.SetState ("Item2")
Dim MonitoredItemArguments3 As New EasyUAMonitoredItemArguments
MonitoredItemArguments3.endpointDescriptor.UrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
MonitoredItemArguments3.nodeDescriptor.NodeId.expandedText = "nsu=http://test.org/UA/Data/ ;i=10855"
Set MonitoredItemArguments3.MonitoringParameters = MonitoringParameters
MonitoredItemArguments3.SetState ("Item3")
Dim arguments(2) As Variant
Set arguments(0) = MonitoredItemArguments1
Set arguments(1) = MonitoredItemArguments2
Set arguments(2) = MonitoredItemArguments3
Dim handleArray As Variant
handleArray = Client8.SubscribeMultipleMonitoredItems(arguments)
Dim i As Long: For i = LBound(handleArray) To UBound(handleArray)
OutputText = OutputText & "handleArray(" & i & "): " & handleArray(i) & vbCrLf
Next
OutputText = OutputText & vbCrLf
OutputText = OutputText & "Processing monitored item changed events for 10 seconds..." & vbCrLf
Pause 10000
OutputText = OutputText & vbCrLf
OutputText = OutputText & "Unsubscribing from 2 monitored items..." & vbCrLf
Dim SelectedHandles(1) As Variant
' We will unsubscribe from the first and third monitored item we have
' previously subscribed to.
SelectedHandles(0) = handleArray(0)
SelectedHandles(1) = handleArray(2)
Client8.UnsubscribeMultipleMonitoredItems (SelectedHandles)
OutputText = OutputText & vbCrLf
OutputText = OutputText & "Processing monitored item changed events for 10 seconds..." & vbCrLf
Pause 10000
OutputText = OutputText & vbCrLf
OutputText = OutputText & "Unsubscribing from all remaining monitored items..." & vbCrLf
Call Client8.UnsubscribeAllMonitoredItems
OutputText = OutputText & "Waiting for 5 seconds..." & vbCrLf
Pause 5000
Set Client8 = Nothing
OutputText = OutputText & "Finished." & vbCrLf
End Sub
Public Sub Client8_DataChangeNotification(ByVal sender As Variant, ByVal eventArgs As EasyUADataChangeNotificationEventArgs)
' Display the data
If eventArgs.Succeeded Then
OutputText = OutputText & eventArgs.arguments.nodeDescriptor & ": " & eventArgs.AttributeData & vbCrLf
Else
OutputText = OutputText & eventArgs.arguments.nodeDescriptor & ": " & eventArgs.ErrorMessageBrief & vbCrLf
End If
End Sub