![](dotnetdiagramimages/OpcLabs_ServerOpcUA_OpcLabs_EasyOpc_UA_NodeSpace_UADataVariable.png)
'Declaration
<ExceptionContractAnnotationAttribute(True)> <TypeConverterAttribute(OpcLabs.EasyOpc.UA.NodeSpace.Implementation.UADataVariableConverter)> <DefaultMemberAttribute("Item")> <DefaultEventAttribute("Read")> <CLSCompliantAttribute(True)> <DesignerCategoryAttribute("Component")> <SerializableAttribute()> Public Class UADataVariable Inherits UAServerNode Implements OpcLabs.BaseLib.ComponentModel.IReadOnlyStartable, OpcLabs.BaseLib.ComponentModel.IStartableEvents, OpcLabs.BaseLib.Graphs.ITreeTraversable, OpcLabs.BaseLib.Graphs.ITreeTraversable(Of Node), OpcLabs.BaseLib.Graphs.ITreeTraversable(Of UAServerNode), OpcLabs.BaseLib.IValueEquatable, OpcLabs.BaseLib.Licensing.ILicensingContextHolder, OpcLabs.BaseLib.NodeSpace.INode, OpcLabs.BaseLib.Widgets.ComTypes._Widget, OpcLabs.BaseLib.Widgets.IWidget, IUAGenericServerEvents, System.Collections.Generic.IEnumerable(Of Node), System.Collections.IEnumerable, System.ComponentModel.IComponent, System.ComponentModel.INotifyPropertyChanged, System.ComponentModel.INotifyPropertyChanging, System.ICloneable, System.IDisposable, System.IServiceProvider, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
'Usage
Dim instance As UADataVariable
[ExceptionContractAnnotation(true)] [TypeConverter(OpcLabs.EasyOpc.UA.NodeSpace.Implementation.UADataVariableConverter)] [DefaultMember("Item")] [DefaultEvent("Read")] [CLSCompliant(true)] [DesignerCategory("Component")] [Serializable()] public class UADataVariable : UAServerNode, OpcLabs.BaseLib.ComponentModel.IReadOnlyStartable, OpcLabs.BaseLib.ComponentModel.IStartableEvents, OpcLabs.BaseLib.Graphs.ITreeTraversable, OpcLabs.BaseLib.Graphs.ITreeTraversable<Node>, OpcLabs.BaseLib.Graphs.ITreeTraversable<UAServerNode>, OpcLabs.BaseLib.IValueEquatable, OpcLabs.BaseLib.Licensing.ILicensingContextHolder, OpcLabs.BaseLib.NodeSpace.INode, OpcLabs.BaseLib.Widgets.ComTypes._Widget, OpcLabs.BaseLib.Widgets.IWidget, IUAGenericServerEvents, System.Collections.Generic.IEnumerable<Node>, System.Collections.IEnumerable, System.ComponentModel.IComponent, System.ComponentModel.INotifyPropertyChanged, System.ComponentModel.INotifyPropertyChanging, System.ICloneable, System.IDisposable, System.IServiceProvider, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
[ExceptionContractAnnotation(true)] [TypeConverter(OpcLabs.EasyOpc.UA.NodeSpace.Implementation.UADataVariableConverter)] [DefaultMember("Item")] [DefaultEvent("Read")] [CLSCompliant(true)] [DesignerCategory("Component")] [Serializable()] public ref class UADataVariable : public UAServerNode, OpcLabs.BaseLib.ComponentModel.IReadOnlyStartable, OpcLabs.BaseLib.ComponentModel.IStartableEvents, OpcLabs.BaseLib.Graphs.ITreeTraversable, OpcLabs.BaseLib.Graphs.ITreeTraversable<Node>, OpcLabs.BaseLib.Graphs.ITreeTraversable<UAServerNode>, OpcLabs.BaseLib.IValueEquatable, OpcLabs.BaseLib.Licensing.ILicensingContextHolder, OpcLabs.BaseLib.NodeSpace.INode, OpcLabs.BaseLib.Widgets.ComTypes._Widget, OpcLabs.BaseLib.Widgets.IWidget, IUAGenericServerEvents, System.Collections.Generic.IEnumerable<Node>, System.Collections.IEnumerable, System.ComponentModel.IComponent, System.ComponentModel.INotifyPropertyChanged, System.ComponentModel.INotifyPropertyChanging, System.ICloneable, System.IDisposable, System.IServiceProvider, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializable
UADataVariable nodes are used to represent variables in the OPC-UA address space that can contain data. These variables can be read from or written to by OPC-UA clients, and can represent various types of data, such as numeric values, strings, and arrays. The class provides properties and methods to manage the variable's metadata, access levels, data type, and value.
If you are doing client development as well, an instance of UADataVariable can be implicitly converted to a OpcLabs.EasyOpc.UA.UANodeDescriptor, which means that it can be directly used in place of OpcLabs.EasyOpc.UA.UANodeDescriptor parameters anywhere in the client code. If your language does not support implicit conversion operators, use the UAServerNode.EffectiveNodeDescriptor property instead.
// 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."); } } }
' 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 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.Timers Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.NodeSpace Namespace _UADataVariable Partial Friend Class ReadAttributeData 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 read-only data variable. Dim dataVariable = UADataVariable.CreateIn(server.Objects, "ReadThisVariable") _ .ValueType(Of Integer)() _ .Writable(False) ' 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 { .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. Dim random = New Random() AddHandler timer.Elapsed, Sub(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() Console.WriteLine("The server is stopped.") End Sub End Class End Namespace
// This example shows how to create data variables nested in folders or other data variables. // 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 OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.NodeSpace; namespace UAServerDocExamples._UADataVariable { class _Building { public static void Nested() { // Instantiate the server object. // By default, the server will run on endpoint URL "opc.tcp://localhost:48040/". var server = new EasyUAServer(); // Create a data variable, and another data variable nested inside it. server.Add(new UADataVariable("Constant") { new UADataVariable("NestedConstant").ConstantValue("abc") }.ConstantValue(42)); // Create a folder, and a data variable nested inside it. server.Add(new UAFolder("Folder") { new UADataVariable("ReadWrite").ReadWriteValue(0) // read-write register }); // 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."); } } }
' This example shows how to create data variables nested in folders or other data variables. ' 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 OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.NodeSpace Namespace _UADataVariable Partial Friend Class _Building Shared Sub Nested() ' Instantiate the server object. ' By default, the server will run on endpoint URL "opc.tcp://localhost:48040/". Dim server = New EasyUAServer() ' Create a data variable, and another data variable nested inside it. server.Add(New UADataVariable("Constant") From { New UADataVariable("NestedConstant").ConstantValue("abc") }.ConstantValue(42)) ' Create a folder, and a data variable nested inside it. server.Add(New UAFolder("Folder") From { New UADataVariable("ReadWrite").ReadWriteValue(0) ' read - Write() register }) ' 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
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
OpcLabs.BaseLib.Widgets.Widget
OpcLabs.BaseLib.NodeSpace.Node
OpcLabs.BaseLib.NodeSpace.NodeFrontEnd
OpcLabs.EasyOpc.UA.NodeSpace.UAServerNode
OpcLabs.EasyOpc.UA.NodeSpace.UADataVariable