OPC Studio User's Guide and Reference
SamplingInterval Property (UADataVariable)
Example 



OpcLabs.ServerOpcUA Assembly > OpcLabs.EasyOpc.UA.NodeSpace Namespace > UADataVariable Class : SamplingInterval Property
The current sampling interval, computed as the shortest of the sampling intervals of current data subscriptions. In milliseconds.
Syntax
'Declaration
 
<BrowsableAttribute(False)>
<UnitAttribute("ms")>
Public ReadOnly Property SamplingInterval As Integer
'Usage
 
Dim instance As UADataVariable
Dim value As Integer
 
instance.SamplingInterval = value
 
value = instance.SamplingInterval
[Browsable(false)]
[Unit("ms")]
public int SamplingInterval {get;}
[Browsable(false)]
[Unit("ms")]
public:
property int SamplingInterval {
   int get();
}

Property Value

The sampling interval in milliseconds. A value of System.Threading.Timeout.Infinite indicates that the variable is not being sampled.

Unit of measurement is ms.

The default value of this property is -1.

Remarks

The sampling interval determines how frequently the server checks the variable's value for changes (in the data provision pull model), or how frequently your code should provide the variable's value (in the data provision push model), which is crucial for subscription updates. A shorter interval means more frequent checks and potentially more updates to subscribers, but at the cost of higher resource utilization.

When the value of this property changes, the SamplingIntervalChanged event is raised.

This method or property does not throw any exceptions, aside from execution exceptions such as System.Threading.ThreadAbortException or System.OutOfMemoryException.

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.");
        }
    }
}
' 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 and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' 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.

Imports System
Imports System.Threading
Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.NodeSpace
Imports Timer = System.Timers.Timer

Namespace _UAServerNode
    Partial Friend Class SamplingIntervalChanged
        Shared Sub Main1()
            ' Instantiate the server object.
            ' By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            Dim 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.
            Dim timer = New Timer With {.AutoReset = True}

            ' Create a read-only data variable.
            Dim dataVariable = UADataVariable.CreateIn(server.Objects, "SubscribeToThisVariable") _
                .ValueType(Of Integer)() _
                .Writable(False)

            AddHandler dataVariable.SamplingIntervalChanged, Sub(sender, args)
                                                                 ' Obtain and display the new sampling interval.
                                                                 Dim samplingInterval As Integer = 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 Then
                                                                     timer.Enabled = False
                                                                 Else
                                                                     timer.Interval = Math.Max(samplingInterval / 2, 1)
                                                                     timer.Enabled = True
                                                                 End If
                                                                 args.Handled = True
                                                             End Sub

            ' Set the read attribute data of the data variable to a random value whenever the timer interval elapses.
            Dim random = New Random()
            AddHandler timer.Elapsed, Sub(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()

            Console.WriteLine("The server is stopped.")
        End Sub
    End Class
End Namespace
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