// This example shows how change the update rate of an existing OPC XML-DA subscription. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using System.Threading; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.OperationModel; namespace DocExamples.DataAccess.Xml { class ChangeItemSubscription { public static void Main1Xml() { // Instantiate the client object. using (var client = new EasyDAClient()) { client.ItemChanged += client_ItemChanged; Console.WriteLine("Subscribing..."); int handle = client.SubscribeItem( "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx", "Dynamic/Analog Types/Int", 2000, state: null); Console.WriteLine("Waiting for 20 seconds..."); Thread.Sleep(20 * 1000); Console.WriteLine("Changing subscription..."); client.ChangeItemSubscription(handle, new DAGroupParameters(500)); Console.WriteLine("Waiting for 10 seconds..."); Thread.Sleep(10 * 1000); Console.WriteLine("Unsubscribing..."); client.UnsubscribeAllItems(); Console.WriteLine("Waiting for 10 seconds..."); Thread.Sleep(10 * 1000); } } // Item changed event handler static void client_ItemChanged(object sender, EasyDAItemChangedEventArgs e) { if (e.Succeeded) Console.WriteLine(e.Vtq); else Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief); } } }
# This example shows how change the update rate of an existing OPC XML-DA subscription. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . # OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python . # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.DataAccess import * # Item changed event handler def itemChanged(sender, e): if e.Succeeded: print(e.Vtq) else: print('*** Failure: ', e.ErrorMessageBrief, sep='') # Instantiate the client object. client = EasyDAClient() client.ItemChanged += itemChanged print('Subscribing item...') handle = IEasyDAClientExtension.SubscribeItem(client, ServerDescriptor('http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx'), DAItemDescriptor('Dynamic/Analog Types/Int'), DAGroupParameters(2000), None) # state print('Processing item change notifications for 20 seconds...') time.sleep(20) print('Changing item subscription...') IEasyDAClientExtension.ChangeItemSubscription(client, handle, DAGroupParameters(500)) print('Processing item change notifications for 10 seconds...') time.sleep(10) print('Unsubscribing item...') IEasyDAClientExtension.UnsubscribeItem(client, handle) print('Waiting for 10 seconds...') time.sleep(10) client.ItemChanged -= itemChanged print('Finished.')
' This example shows how change the update rate of an existing OPC XML-DA subscription. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports System.Threading Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.DataAccess.OperationModel Namespace DataAccess.Xml Partial Friend Class ChangeItemSubscription Public Shared Sub Main1Xml() Using client = New EasyDAClient() AddHandler client.ItemChanged, AddressOf client_ItemChanged Console.WriteLine("Subscribing...") Dim handle As Integer = client.SubscribeItem( "http://opcxml.demo-this.com/XmlDaSampleServer/Service.asmx", "Dynamic/Analog Types/Int", 2000, state:=Nothing) Console.WriteLine("Waiting for 20 seconds...") Thread.Sleep(20 * 1000) Console.WriteLine("Changing subscription...") client.ChangeItemSubscription(handle, New DAGroupParameters(500)) Console.WriteLine("Waiting for 10 seconds...") Thread.Sleep(10 * 1000) Console.WriteLine("Unsubscribing...") client.UnsubscribeAllItems() Console.WriteLine("Waiting for 10 seconds...") Thread.Sleep(10 * 1000) End Using End Sub ' Item changed event handler Private Shared Sub client_ItemChanged(ByVal sender As Object, ByVal e As EasyDAItemChangedEventArgs) If e.Succeeded Then Console.WriteLine(e.Vtq) Else Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief) End If End Sub End Class End Namespace
// This example shows how change the update rate of an existing OPC XML-DA subscription. // // Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . type TChangeItemSubscription_ClientEventHandlers = class // Item changed event handler procedure OnItemChanged( ASender: TObject; sender: OleVariant; const eventArgs: _EasyDAItemChangedEventArgs); end; procedure TChangeItemSubscription_ClientEventHandlers.OnItemChanged( ASender: TObject; sender: OleVariant; const eventArgs: _EasyDAItemChangedEventArgs); begin if Not eventArgs.Succeeded then begin WriteLn('*** Failure: ', eventArgs.ErrorMessageBrief); Exit; end; WriteLn(eventArgs.Vtq.ToString) end; class procedure ChangeItemSubscription.MainXml; var Arguments: OleVariant; Client: TEasyDAClient; ClientEventHandlers: TChangeItemSubscription_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 := 2000; Arguments := VarArrayCreate([0, 0], varVariant); Arguments[0] := ItemSubscriptionArguments1; // Instantiate the client object and hook events Client := TEasyDAClient.Create(nil); ClientEventHandlers := TChangeItemSubscription_ClientEventHandlers.Create; Client.OnItemChanged := ClientEventHandlers.OnItemChanged; WriteLn('Subscribing...'); TVarData(HandleArray).VType := varArray or varVariant; TVarData(HandleArray).VArray := PVarArray( Client.SubscribeMultipleItems(Arguments)); WriteLn('Waiting for 20 seconds...'); PumpSleep(20*1000); WriteLn('Changing subscription...'); Client.ChangeItemSubscription(HandleArray[0], 500); WriteLn('Waiting for 10 seconds...'); PumpSleep(10*1000); WriteLn('Unsubscribing...'); Client.UnsubscribeAllItems; WriteLn('Waiting for 10 seconds...'); PumpSleep(10*1000); VarClear(HandleArray); VarClear(Arguments); FreeAndNil(Client); FreeAndNil(ClientEventHandlers); end;
// This example shows how change the update rate of an existing OPC XML-DA subscription. // // 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 = 2000; $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 "Waiting for 20 seconds...\n"; $startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 20); print "Changing subscription..."; $Client->ChangeItemSubscription($handles[0], 500); print "Waiting for 10 seconds...\n"; $startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 10); print "Unsubscribing...\n"; $Client->UnsubscribeAllItems; print "Waiting for 10 seconds...\n"; $startTime = time(); do { com_message_pump(1000); } while (time() < $startTime + 10);
Rem This example shows how change the update rate of an existing OPC XML-DA subscription. 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 Client1 As EasyDAClient Private Sub ChangeItemSubscription_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 = 2000 Dim arguments(0) As Variant Set arguments(0) = ItemSubscriptionArguments1 ' Instantiate the client object and hook events Set Client1 = New EasyDAClient OutputText = OutputText & "Subscribing..." & vbCrLf Dim handles() As Variant handles = Client1.SubscribeMultipleItems(arguments) OutputText = OutputText & "Waiting for 20 seconds..." & vbCrLf Pause 20000 OutputText = OutputText & "Changing subscription..." & vbCrLf Call Client1.ChangeItemSubscription(handles(0), 500) OutputText = OutputText & "Waiting for 10 seconds..." & vbCrLf Pause 10000 OutputText = OutputText & "Unsubscribing..." & vbCrLf Client1.UnsubscribeAllItems OutputText = OutputText & "Waiting for 10 seconds..." & vbCrLf Pause 10000 Set Client1 = Nothing End Sub Public Sub Client1_ItemChanged(ByVal sender As Variant, ByVal eventArgs As EasyDAItemChangedEventArgs) If Not eventArgs.Succeeded Then OutputText = OutputText & "*** Failure: " & eventArgs.ErrorMessageBrief & vbCrLf Exit Sub End If OutputText = OutputText & eventArgs.vtq & vbCrLf End Sub
Rem This example shows how change the update rate of an existing OPC XML-DA subscription. 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 = 2000 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 "Waiting for 20 seconds..." WScript.Sleep 20*1000 WScript.Echo "Changing subscription..." Client.ChangeItemSubscription handles(0), 500 WScript.Echo "Waiting for 10 seconds..." WScript.Sleep 10*1000 WScript.Echo "Unsubscribing..." Client.UnsubscribeAllItems WScript.Echo "Waiting for 10 seconds..." WScript.Sleep 10*1000 WScript.DisconnectObject Client Set Client = Nothing ' Item changed event handler Sub Client_ItemChanged(Sender, e) If Not (e.Succeeded) Then WScript.Echo "*** Failure: " & e.ErrorMessageBrief Exit Sub End If WScript.Echo e.Vtq End Sub
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base, Product Downloads. Technical support: Online Forums, FAQ.Missing some example? Ask us for it on our Online Forums! You do not have to own a commercial license in order to use Online Forums, and we reply to every post.