How to subscribe to OPC UA data changes in FSharp
From OPC Labs Knowledge Base
This article shows how to subscribe to data changes of an OPC UA node value, using F#.
// This example shows how to subscribe to changes of a single monitored item, and display the value of the item with each change
// using a callback method that is provided as a function delegate.
module _EasyUAClient.SubscribeDataChange
open OpcLabs.EasyOpc.UA
open OpcLabs.EasyOpc.UA.OperationModel
open System
let CallbackFunction =
// Instantiate the client object
let easyUAClient = new EasyUAClient()
Console.WriteLine("Subscribing...");
// The callback is a delegate that displays the value
let handle =
easyUAClient.SubscribeDataChange(
new UAEndpointDescriptor("http://opcua.demo-this.com:51211/UA/SampleServer"), // or "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
new UANodeDescriptor("nsu=http://test.org/UA/Data/;i=10853"),
1000,
new EasyUADataChangeNotificationEventHandler(fun sender eventArgs -> Console.WriteLine(eventArgs.AttributeData.Value:obj)))
// Remark: Production code would check eventArgs.Exception before accessing eventArgs.AttributeData.
Console.WriteLine("Processing data change events for 10 seconds...")
System.Threading.Thread.Sleep(10 * 1000)
Console.WriteLine("Unsubscribing...")
easyUAClient.UnsubscribeAllMonitoredItems()
Console.WriteLine("Waiting for 2 seconds...")
System.Threading.Thread.Sleep(2 * 1000)
Usage:
_EasyUAClient.SubscribeDataChange.CallbackFunction
Ships as part of the UADocExamples project in the F# examples solution with QuickOPC since version 5.41. Use the example from the product for an up-to-date code.
