OPC Studio User's Guide and Reference
ReadAttributeData Property
Example 



OpcLabs.ServerOpcUA Assembly > OpcLabs.EasyOpc.UA.NodeSpace Namespace > UADataVariable Class : ReadAttributeData Property
The variable data (value, timestamp, status code) seen by OPC reads.
Syntax
'Declaration
 
<NotNullAttribute()>
Public Overridable Property ReadAttributeData As UAAttributeData
'Usage
 
Dim instance As UADataVariable
Dim value As UAAttributeData
 
instance.ReadAttributeData = value
 
value = instance.ReadAttributeData
[NotNull()]
public virtual UAAttributeData ReadAttributeData {get; set;}
[NotNull()]
public:
virtual property UAAttributeData^ ReadAttributeData {
   UAAttributeData^ get();
   void set (    UAAttributeData^ value);
}

Property Value

The value of this property cannot be null (Nothing in Visual Basic).

Exceptions
ExceptionDescription

One of the arguments provided to a method is not valid.

This is a usage error, i.e. it will never occur (the exception will not be thrown) in a correctly written program. Your code should not catch this exception.

A null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument.

This is a usage error, i.e. it will never occur (the exception will not be thrown) in a correctly written program. Your code should not catch this exception.

Remarks

If the Read event is handled, the data from OpcLabs.EasyOpc.UA.OperationModel.UADataVariableReadEventArgs.Result is copied to this property. This the data from this property then becomes the final OPC read data. This means that if the Read event is not handled, the OPC read data is simply taken from this property.

Setting this property is the method used in the data provision push model. For convenience however, if your server is not providing source timestamps of its own, you do not have to construct the OpcLabs.EasyOpc.UA.UAAttributeData and set this property; instead, just call UpdateReadAttributeData(Object), UpdateReadAttributeData(Object,UAStatusCode) or UpdateReadAttributeData(UAStatusCode), and the source timestamp will be set to the current time.

Example
// This example shows how to set the attribute data in the push data provision model. In this model, your code pushes the
// data into the server, and the server then makes the data available to OPC clients.
// 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.Timers;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.NodeSpace;

namespace UAServerDocExamples._UADataVariable
{
    class ReadAttributeData
    {
        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 read-only data variable.
            var dataVariable = UADataVariable.CreateIn(server.Objects, "ReadThisVariable")
                .ValueType<int>()
                .Writable(false);

            // 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
            {
                Interval = 1000,
                AutoReset = true,
            };

            // Set the read attribute data of the data variable to a random value whenever the timer interval elapses.
            // Note that this example shows the basic concept, however there is also an UpdateReadAttributeData method that
            // can be used in most cases to achieve slightly more concise code.
            var random = new Random();
            timer.Elapsed += (sender, args) => 
                dataVariable.ReadAttributeData = new UAAttributeData(random.Next(), DateTime.UtcNow);
            timer.Start();

            // 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