# This example shows how subscribe to changes of a single item in an OPC XML-DA server and display the value of the item # with each change, using a callback method specified using lambda expression. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . #requires -Version 5.1 using namespace OpcLabs.EasyOpc using namespace OpcLabs.EasyOpc.DataAccess # The path below assumes that the current directory is [ProductDir]/Examples-NET/PowerShell/Windows . Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicCore.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassic.dll" Add-Type -Path "../../../Components/Opclabs.QuickOpc/net472/OpcLabs.EasyOpcClassicComponents.dll" # Instantiate the client object. $client = New-Object EasyDAClient $serverDescriptor = New-Object ServerDescriptor -Property @{ UrlString = "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx" } # Item changed event handler Register-ObjectEvent -InputObject $client -EventName ItemChanged -Action { if ($EventArgs.Succeeded) { Write-Host $EventArgs.Vtq } else { Write-Host "*** Failure: $($EventArgs.ErrorMessageBrief)" } } Write-Host "Subscribing item..." [IEasyDAClientExtension]::SubscribeItem($client, $serverDescriptor, "Dynamic/Analog Types/Int", 1000, $null) Write-Host "Processing item changes for 30 seconds..." $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() while ($stopwatch.Elapsed.TotalSeconds -lt 30) { Start-Sleep -Seconds 1 } Write-Host "Unsubscribing items..." $client.UnsubscribeAllItems() Write-Host "Waiting for 2 seconds..." Start-Sleep -Seconds 2 Write-Host "Finished."
// 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 . 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 . 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 . ' 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 . 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
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved.
Send Documentation Feedback. Technical Support