// This example shows how to subscribe to changes of a single OPC XML-DA item and display the value of the item with each change.
//
// 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
TSubscribeItem_ClientEventHandlers = class
// Item changed event handler
procedure OnItemChanged(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyDAItemChangedEventArgs);
end;
procedure TSubscribeItem_ClientEventHandlers.OnItemChanged(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyDAItemChangedEventArgs);
begin
if eventArgs.Succeeded then
WriteLn(eventArgs.Vtq.ToString)
else
WriteLn('*** Failure: ', eventArgs.ErrorMessageBrief);
end;
class procedure SubscribeItem.MainXml;
var
Arguments: OleVariant;
Client: TEasyDAClient;
ClientEventHandlers: TSubscribeItem_ClientEventHandlers;
HandleArray: OleVariant;
ItemSubscriptionArguments1: _EasyDAItemSubscriptionArguments;
begin
ItemSubscriptionArguments1 := CoEasyDAItemSubscriptionArguments.Create;
ItemSubscriptionArguments1.ServerDescriptor.UrlString := 'http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx';
ItemSubscriptionArguments1.ItemDescriptor.ItemID := 'Dynamic/Analog Types/Int';
ItemSubscriptionArguments1.GroupParameters.RequestedUpdateRate := 1000;
Arguments := VarArrayCreate([0, 0], varVariant);
Arguments[0] := ItemSubscriptionArguments1;
// Instantiate the client object and hook events
Client := TEasyDAClient.Create(nil);
ClientEventHandlers := TSubscribeItem_ClientEventHandlers.Create;
Client.OnItemChanged := ClientEventHandlers.OnItemChanged;
WriteLn('Subscribing...');
TVarData(HandleArray).VType := varArray or varVariant;
TVarData(HandleArray).VArray := PVarArray(
Client.SubscribeMultipleItems(Arguments));
WriteLn('Processing item changed events for 1 minute...');
PumpSleep(60*1000);
WriteLn('Unsubscribing...');
Client.UnsubscribeAllItems;
WriteLn('Waiting for 5 seconds...');
PumpSleep(5*1000);
VarClear(HandleArray);
VarClear(Arguments);
FreeAndNil(Client);
FreeAndNil(ClientEventHandlers);
end;
// This example shows how to subscribe to changes of a single OPC XML-DA item and display the value of the item with each change.
//
// Some related documentation: http://php.net/manual/en/function.com-event-sink.php . Pay attention to the comment that says
// "Be careful how you use this feature; if you are doing something similar to the example below, then it doesn't really make
// sense to run it in a web server context.". What they are trying to say is that processing a web request should be
// a short-lived code, which does not fit well with the idea of being subscribed to events and received them over longer time.
// It is possible to write such code, but it is only useful when processing the request is allowed to take relatively long. Or,
// when you are using PHP from command-line, or otherwise - not to serve a web page directly.
//
// Subscribing to QuickOPC-COM events in the context of PHP Web application, while not imposing the limitations to the request
// processing time, has to be "worked around", e.g. using the "event pull" mechanism.
//
// 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 DEasyDAClientEvents {
function ItemChanged($varSender, $varE)
{
if ($varE->Succeeded)
{
print $varE->Vtq->ToString();
print "\n";
}
else
{
printf("*** Failure: %s\n", $varE->ErrorMessageBrief);
}
}
}
$ItemSubscriptionArguments1 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments");
$ItemSubscriptionArguments1->ServerDescriptor->UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx";
$ItemSubscriptionArguments1->ItemDescriptor->ItemID = "Dynamic/Analog Types/Int";
$ItemSubscriptionArguments1->GroupParameters->RequestedUpdateRate = 1000;
$arguments[0] = $ItemSubscriptionArguments1;
// Instantiate the client object.
$Client = new COM("OpcLabs.EasyOpc.DataAccess.EasyDAClient");
$Events = new DEasyDAClientEvents();
com_event_sink($Client, $Events, "DEasyDAClientEvents");
print "Subscribing...\n";
$handles = $Client->SubscribeMultipleItems($arguments);
print "Processing item changed events for 1 minute...\n";
$startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 60);
print "Unsubscribing...\n";
$Client->UnsubscribeAllItems;
print "Waiting for 5 seconds...\n";
$startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 5);
Rem This example shows how to subscribe to changes of a single OPC XML-DA item and display the value of the item with each change.
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 Client2 As EasyDAClient
Private Sub SubscribeItem_MainXml_Command_Click()
OutputText = ""
Dim ItemSubscriptionArguments1 As New EasyDAItemSubscriptionArguments
ItemSubscriptionArguments1.serverDescriptor.UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx"
ItemSubscriptionArguments1.ItemDescriptor.ItemId = "Dynamic/Analog Types/Int"
ItemSubscriptionArguments1.GroupParameters.RequestedUpdateRate = 1000
Dim arguments(0) As Variant
Set arguments(0) = ItemSubscriptionArguments1
' Instantiate the client object and hook events
Set Client2 = New EasyDAClient
OutputText = OutputText & "Subscribing..." & vbCrLf
Dim handleArray() As Variant
handleArray = Client2.SubscribeMultipleItems(arguments)
OutputText = OutputText & "Processing item changed events for 1 minute..." & vbCrLf
Pause 60000
OutputText = OutputText & "Unsubscribing..." & vbCrLf
Client2.UnsubscribeAllItems
OutputText = OutputText & "Waiting for 5 seconds..." & vbCrLf
Pause 5000
OutputText = OutputText & "Finished." & vbCrLf
Set Client2 = Nothing
End Sub
Public Sub Client2_ItemChanged(ByVal sender As Variant, ByVal eventArgs As EasyDAItemChangedEventArgs)
If eventArgs.Succeeded Then
OutputText = OutputText & eventArgs.vtq & vbCrLf
Else
OutputText = OutputText & "*** Failure: " & eventArgs.ErrorMessageBrief & vbCrLf
End If
End Sub
Rem This example shows how to subscribe to changes of a single OPC XML-DA item and display the value of the item with each change.
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
Dim ItemSubscriptionArguments1: Set ItemSubscriptionArguments1 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments")
ItemSubscriptionArguments1.ServerDescriptor.UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx"
ItemSubscriptionArguments1.ItemDescriptor.ItemID = "Dynamic/Analog Types/Int"
ItemSubscriptionArguments1.GroupParameters.RequestedUpdateRate = 1000
Dim arguments(0)
Set arguments(0) = ItemSubscriptionArguments1
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient")
WScript.ConnectObject Client, "Client_"
WScript.Echo "Subscribing..."
Dim handles: handles = Client.SubscribeMultipleItems(arguments)
WScript.Echo "Processing item changed events for 1 minute..."
WScript.Sleep 60*1000
WScript.Echo "Unsubscribing..."
Client.UnsubscribeAllItems
WScript.Echo "Waiting for 5 seconds..."
WScript.Sleep 5*1000
WScript.DisconnectObject Client
Set Client = Nothing
' Item changed event handler
Sub Client_ItemChanged(Sender, e)
If e.Succeeded Then
WScript.Echo e.Vtq
Else
WScript.Echo "*** Failure: " & e.ErrorMessageBrief
End If
End Sub
// This example shows how to subscribe to changes of multiple items and display the value of the item with each change.
//
// 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
TSubscribeMultipleItems_ClientEventHandlers = class
// Item changed event handler
procedure OnItemChanged(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyDAItemChangedEventArgs);
end;
procedure TSubscribeMultipleItems_ClientEventHandlers.OnItemChanged(
ASender: TObject;
sender: OleVariant;
const eventArgs: _EasyDAItemChangedEventArgs);
begin
if eventArgs.Succeeded then
WriteLn(eventArgs.Arguments.ItemDescriptor.ItemId, ': ', eventArgs.Vtq.ToString)
else
WriteLn(eventArgs.Arguments.ItemDescriptor.ItemId, ' *** Failure: ', eventArgs.ErrorMessageBrief);
end;
class procedure SubscribeMultipleItems.Main;
var
Arguments: OleVariant;
Client: TEasyDAClient;
ClientEventHandlers: TSubscribeMultipleItems_ClientEventHandlers;
HandleArray: OleVariant;
ItemSubscriptionArguments1: _EasyDAItemSubscriptionArguments;
ItemSubscriptionArguments2: _EasyDAItemSubscriptionArguments;
ItemSubscriptionArguments3: _EasyDAItemSubscriptionArguments;
ItemSubscriptionArguments4: _EasyDAItemSubscriptionArguments;
begin
ItemSubscriptionArguments1 := CoEasyDAItemSubscriptionArguments.Create;
ItemSubscriptionArguments1.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2';
ItemSubscriptionArguments1.ItemDescriptor.ItemID := 'Simulation.Random';
ItemSubscriptionArguments1.GroupParameters.RequestedUpdateRate := 1000;
ItemSubscriptionArguments2 := CoEasyDAItemSubscriptionArguments.Create;
ItemSubscriptionArguments2.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2';
ItemSubscriptionArguments2.ItemDescriptor.ItemID := 'Trends.Ramp (1 min)';
ItemSubscriptionArguments2.GroupParameters.RequestedUpdateRate := 1000;
ItemSubscriptionArguments3 := CoEasyDAItemSubscriptionArguments.Create;
ItemSubscriptionArguments3.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2';
ItemSubscriptionArguments3.ItemDescriptor.ItemID := 'Trends.Sine (1 min)';
ItemSubscriptionArguments3.GroupParameters.RequestedUpdateRate := 1000;
ItemSubscriptionArguments4 := CoEasyDAItemSubscriptionArguments.Create;
ItemSubscriptionArguments4.ServerDescriptor.ServerClass := 'OPCLabs.KitServer.2';
ItemSubscriptionArguments4.ItemDescriptor.ItemID := 'Simulation.Register_I4';
ItemSubscriptionArguments4.GroupParameters.RequestedUpdateRate := 1000;
Arguments := VarArrayCreate([0, 3], varVariant);
Arguments[0] := ItemSubscriptionArguments1;
Arguments[1] := ItemSubscriptionArguments2;
Arguments[2] := ItemSubscriptionArguments3;
Arguments[3] := ItemSubscriptionArguments4;
// Instantiate the client object and hook events
Client := TEasyDAClient.Create(nil);
ClientEventHandlers := TSubscribeMultipleItems_ClientEventHandlers.Create;
Client.OnItemChanged := ClientEventHandlers.OnItemChanged;
TVarData(HandleArray).VType := varArray or varVariant;
TVarData(HandleArray).VArray := PVarArray(
Client.SubscribeMultipleItems(Arguments));
WriteLn('Processing item changed events for 1 minute...');
PumpSleep(60*1000);
WriteLn('Unsubscribing...');
Client.UnsubscribeAllItems;
WriteLn('Waiting for 5 seconds...');
PumpSleep(5*1000);
WriteLn('Finished.');
VarClear(HandleArray);
VarClear(Arguments);
FreeAndNil(Client);
FreeAndNil(ClientEventHandlers);
end;
// This example shows how to subscribe to changes of multiple items and display the value of the item with each change.
//
// 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 DEasyDAClientEvents {
function ItemChanged($varSender, $varE)
{
if ($varE->Succeeded)
{
printf(" s\n", $varE->Arguments->ItemDescriptor->ItemId, $varE->Vtq->ToString());
}
else
{
printf("*** Failure: %s\n", $varE->ErrorMessageBrief);
}
}
}
$ItemSubscriptionArguments1 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments");
$ItemSubscriptionArguments1->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2";
$ItemSubscriptionArguments1->ItemDescriptor->ItemID = "Simulation.Random";
$ItemSubscriptionArguments1->GroupParameters->RequestedUpdateRate = 1000;
$ItemSubscriptionArguments2 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments");
$ItemSubscriptionArguments2->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2";
$ItemSubscriptionArguments2->ItemDescriptor->ItemID = "Trends.Ramp (1 min)";
$ItemSubscriptionArguments2->GroupParameters->RequestedUpdateRate = 1000;
$ItemSubscriptionArguments3 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments");
$ItemSubscriptionArguments3->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2";
$ItemSubscriptionArguments3->ItemDescriptor->ItemID = "Trends.Sine (1 min)";
$ItemSubscriptionArguments3->GroupParameters->RequestedUpdateRate = 1000;
$ItemSubscriptionArguments4 = new COM("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments");
$ItemSubscriptionArguments4->ServerDescriptor->ServerClass = "OPCLabs.KitServer.2";
$ItemSubscriptionArguments4->ItemDescriptor->ItemID = "Simulation.Register_I4";
$ItemSubscriptionArguments4->GroupParameters->RequestedUpdateRate = 1000;
$arguments[0] = $ItemSubscriptionArguments1;
$arguments[1] = $ItemSubscriptionArguments2;
$arguments[2] = $ItemSubscriptionArguments3;
$arguments[3] = $ItemSubscriptionArguments4;
$Client = new COM("OpcLabs.EasyOpc.DataAccess.EasyDAClient");
$Events = new DEasyDAClientEvents();
com_event_sink($Client, $Events, "DEasyDAClientEvents");
$Client->SubscribeMultipleItems($arguments);
print "Processing item changed events for 1 minute...\n";
$startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 60);
REM This example shows how to subscribe to changes of multiple items and display the value of the item with each change.
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 Client2 As EasyDAClient
Private Sub SubscribeMultipleItems_Main_Command_Click()
OutputText = ""
Dim itemSubscriptionArguments1 As New EasyDAItemSubscriptionArguments
itemSubscriptionArguments1.serverDescriptor.ServerClass = "OPCLabs.KitServer.2"
itemSubscriptionArguments1.ItemDescriptor.itemId = "Simulation.Random"
itemSubscriptionArguments1.GroupParameters.requestedUpdateRate = 1000
Dim itemSubscriptionArguments2 As New EasyDAItemSubscriptionArguments
itemSubscriptionArguments2.serverDescriptor.ServerClass = "OPCLabs.KitServer.2"
itemSubscriptionArguments2.ItemDescriptor.itemId = "Trends.Ramp (1 min)"
itemSubscriptionArguments2.GroupParameters.requestedUpdateRate = 1000
Dim itemSubscriptionArguments3 As New EasyDAItemSubscriptionArguments
itemSubscriptionArguments3.serverDescriptor.ServerClass = "OPCLabs.KitServer.2"
itemSubscriptionArguments3.ItemDescriptor.itemId = "Trends.Sine (1 min)"
itemSubscriptionArguments3.GroupParameters.requestedUpdateRate = 1000
' Intentionally specifying an unknown item here, to demonstrate its behavior.
Dim itemSubscriptionArguments4 As New EasyDAItemSubscriptionArguments
itemSubscriptionArguments4.serverDescriptor.ServerClass = "OPCLabs.KitServer.2"
itemSubscriptionArguments4.ItemDescriptor.itemId = "Simulation.Register_I4"
itemSubscriptionArguments4.GroupParameters.requestedUpdateRate = 1000
Dim arguments(3) As Variant
Set arguments(0) = itemSubscriptionArguments1
Set arguments(1) = itemSubscriptionArguments2
Set arguments(2) = itemSubscriptionArguments3
Set arguments(3) = itemSubscriptionArguments4
' Instantiate the client object
Set Client2 = New EasyDAClient
OutputText = OutputText & "Subscribing item changes..." & vbCrLf
Dim handleArray() As Variant
handleArray = Client2.SubscribeMultipleItems(arguments)
OutputText = OutputText & "Processing item changed events for 1 minute..." & vbCrLf
Pause 60000
OutputText = OutputText & "Unsubscribing..." & vbCrLf
Client2.UnsubscribeAllItems
OutputText = OutputText & "Waiting for 5 seconds..." & vbCrLf
Pause 5000
OutputText = OutputText & "Finished." & vbCrLf
Set Client2 = Nothing
End Sub
Public Sub Client2_ItemChanged(ByVal sender As Variant, ByVal eventArgs As EasyDAItemChangedEventArgs)
If eventArgs.Succeeded Then
OutputText = OutputText & eventArgs.arguments.ItemDescriptor.itemId & ": " & eventArgs.vtq & vbCrLf
Else
OutputText = OutputText & eventArgs.arguments.ItemDescriptor.itemId & " *** Failure: " & eventArgs.ErrorMessageBrief & vbCrLf
End If
End Sub
Rem This example shows how to subscribe to changes of multiple items and display the value of the item with each change.
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
Dim ItemSubscriptionArguments1: Set ItemSubscriptionArguments1 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments")
ItemSubscriptionArguments1.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2"
ItemSubscriptionArguments1.ItemDescriptor.ItemID = "Simulation.Random"
ItemSubscriptionArguments1.GroupParameters.RequestedUpdateRate = 1000
Dim ItemSubscriptionArguments2: Set ItemSubscriptionArguments2 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments")
ItemSubscriptionArguments2.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2"
ItemSubscriptionArguments2.ItemDescriptor.ItemID = "Trends.Ramp (1 min)"
ItemSubscriptionArguments2.GroupParameters.RequestedUpdateRate = 1000
Dim ItemSubscriptionArguments3: Set ItemSubscriptionArguments3 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments")
ItemSubscriptionArguments3.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2"
ItemSubscriptionArguments3.ItemDescriptor.ItemID = "Trends.Sine (1 min)"
ItemSubscriptionArguments3.GroupParameters.RequestedUpdateRate = 1000
Dim ItemSubscriptionArguments4: Set ItemSubscriptionArguments4 = CreateObject("OpcLabs.EasyOpc.DataAccess.OperationModel.EasyDAItemSubscriptionArguments")
ItemSubscriptionArguments4.ServerDescriptor.ServerClass = "OPCLabs.KitServer.2"
ItemSubscriptionArguments4.ItemDescriptor.ItemID = "Simulation.Register_I4"
ItemSubscriptionArguments4.GroupParameters.RequestedUpdateRate = 1000
Dim arguments(3)
Set arguments(0) = ItemSubscriptionArguments1
Set arguments(1) = ItemSubscriptionArguments2
Set arguments(2) = ItemSubscriptionArguments3
Set arguments(3) = ItemSubscriptionArguments4
Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient")
WScript.ConnectObject Client, "Client_"
Client.SubscribeMultipleItems arguments
WScript.Echo "Processing item changed events for 1 minute..."
WScript.Sleep 60*1000
Sub Client_ItemChanged(Sender, e)
If Not (e.Succeeded) Then
WScript.Echo "*** Failure: " & e.ErrorMessageBrief
Exit Sub
End If
WScript.Echo e.Arguments.ItemDescriptor.ItemId & ": " & e.Vtq
End Sub