How to subscribe to OPC UA data changes in FSharp
From OPC Labs Knowledge Base
// 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.