OPC Studio User's Guide and Reference
SamplingIntervalChanged Event (UAServerNode)
Example 



View with Navigation Tools
OpcLabs.ServerOpcUA Assembly > OpcLabs.EasyOpc.UA.NodeSpace Namespace > UAServerNode Class : SamplingIntervalChanged Event
Raised when the sampling interval of a data variable has changed.
Syntax
'Declaration
 
Public Event SamplingIntervalChanged As UADataVariableProcessedEventHandler
 
'Usage
 
Dim instance As UAServerNode
Dim handler As UADataVariableProcessedEventHandler
 
AddHandler instance.SamplingIntervalChanged, handler
Event Data

The event handler receives an argument of type UADataVariableProcessedEventArgs containing data related to this event. The following UADataVariableProcessedEventArgs properties provide information specific to this event.

PropertyDescription
The data variable being processed.  
(Inherited from System.ComponentModel.HandledEventArgs)
Example
// This example shows how to adjust to sampling interval changes in the push data provision model.
// You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-OPCStudio-CSharp .
// 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.

using System;
using System.Threading;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.NodeSpace;
using Timer = System.Timers.Timer;

namespace UAServerDocExamples._UAServerNode
{
    class SamplingIntervalChanged
    {
        public static void Main1()
        {
            // Instantiate the server object.
            // By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            var server = new EasyUAServer();

            // Create a timer for pushing the data for OPC reads. In a real server the activity may also come from other
            // sources.
            var timer = new Timer { AutoReset = true };

            // Create a read-only data variable.
            var dataVariable = UADataVariable.CreateIn(server.Objects, "SubscribeToThisVariable")
                .ValueType<int>()
                .Writable(false);
            dataVariable.SamplingIntervalChanged += (sender, args) =>
            {
                // Obtain and display the new sampling interval.
                int samplingInterval = dataVariable.SamplingInterval;
                Console.WriteLine($"Sampling interval changed to: {samplingInterval}");

                // Adjust the timer interval accordingly. If the sampling interval is infinite, stop the timer. Otherwise,
                // set the timer interval to half of the sampling interval, but at least 1 millisecond, and start the timer.
                if (samplingInterval == Timeout.Infinite)
                    timer.Enabled = false;
                else
                {
                    timer.Interval = Math.Max(samplingInterval/2, 1);
                    timer.Enabled = true;
                }
                args.Handled = true;
            };
            
            // Set the read attribute data of the data variable to a random value whenever the timer interval elapses.
            var random = new Random();
            timer.Elapsed += (sender, args) => dataVariable.UpdateReadAttributeData(random.Next());

            // Start the server.
            Console.WriteLine("The server is starting...");
            server.Start();

            Console.WriteLine("The server is started.");
            Console.WriteLine();

            // Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...");
            Console.ReadLine();

            // Stop the server.
            Console.WriteLine("The server is stopping...");
            server.Stop();

            // Stop the timer.
            timer.Stop();

            Console.WriteLine("The server is stopped.");
        }
    }
}
Requirements

Target Platforms: .NET Framework: Windows 10 (selected versions), Windows 11 (selected versions), Windows Server 2016, Windows Server 2022; .NET: Linux, macOS, Microsoft Windows

See Also