The remainder of 8 defines DataTypes. Their representation in the AddressSpace and the DataType hierarchy is specified in OPC 10000-5. Other parts of this series of standards may specify additional DataTypes.
This Built-in DataType is composed of three elements that identify a Node within a Server. They are defined in Table 21.
Name |
Type |
Description |
NodeId |
structure |
|
NamespaceIndex |
UInt16 |
The index for a namespace URI (see 8.2.2). |
IdType |
Enum |
The format and data type of the identifier (see 8.2.3). |
Identifier |
* |
The identifier for a Node in the AddressSpace of an OPC UA Server (see 8.2.4). |
See OPC 10000-6 for a description of the encoding of the identifier into OPC UA Messages.
The namespace is a URI that identifies the naming authority responsible for assigning the identifier element of the NodeId. Naming authorities include the local Server, the underlying system, standards bodies and consortia. It is expected that most Nodes will use the URI of the Server or of the underlying system.
Using a namespace URI allows multiple OPC UA Servers attached to the same underlying system to use the same identifier to identify the same Object. This enables Clients that connect to those Servers to recognise Objects that they have in common.
Namespace URIs, like Server names, are identified by numeric values in OPC UA Services to permit more efficient transfer and processing (e.g. table lookups). The numeric values used to identify namespaces correspond to the index into the NamespaceArray. The NamespaceArray is a Variable that is part of the Server Object in the AddressSpace (see OPC 10000-5 for its definition).
The URI for the OPC UA namespace is:
“http://opcfoundation.org/UA/”
Its corresponding index in the namespace table is 0.
The namespace URI is case sensitive.
The IdType element identifies the type of the NodeId, its format and its scope. Its values are defined in Table 22.
Name |
Value |
Description |
Numeric |
0 |
Numeric value |
String |
1 |
String value |
Guid |
2 |
Globally Unique Identifier |
Opaque |
3 |
Namespace specific format |
Normally the scope of NodeIds is the Server in which they are defined. For certain types of NodeIds, NodeIds can uniquely identify a Node within a system, or across systems (e.g. GUIDs). System-wide and globally-unique identifiers allow Clients to track Nodes, such as work orders, as they move between OPC UA Servers as they progress through the system.
Opaque identifiers are identifiers that are free-format byte strings that might or might not be human interpretable.
String identifiers are case sensitive. That is, Clients shall consider them case sensitive. Servers are allowed to provide alternative NodeIds (see 5.2.2) and using this mechanism Servers can handle NodeIds as case insensitive.
The Identifier value element is used within the context of the first three elements to identify the Node. Its data type and format is defined by the IdType.
Identifier values of IdType String are restricted to 4096 characters and shall not contain Unicode control characters. Unicode control characters are defined by Unicode C0 and Unicode C1. Identifier values of IdType Opaque are restricted to 4096 bytes.
A Node in the AddressSpace shall not have a null NodeId. However, many services defined in OPC 10000-4 define special behaviour if a null NodeId is passed as a parameter.
A canonical null NodeId has an IdType equal to Numeric, a NamespaceIndex equal to 0 and an Identifier equal to 0.
In addition to the canonical null NodeId the alternative values defined in Table 23 shall be considered a null NodeId.
Table 23 – NodeId Alternative Null Values
IdType |
NamespaceIndex |
Null Value |
String |
0 |
A null or Empty String (“”) |
Guid |
0 |
A Guid initialised with zeros (e.g. 00000000-0000-0000-0000-000000000000) |
Opaque |
0 |
A null or Empty ByteString |
This Built-in DataType contains a qualified name. It is, for example, used as BrowseName. Its elements are defined in Table 24. The name part of the QualifiedName is restricted to 512 characters and shall not contain Unicode control characters. Unicode control characters are defined by Unicode C0 and Unicode C1.
Table 24 – QualifiedName Definition
Name |
Type |
Description |
QualifiedName |
structure |
|
NamespaceIndex |
UInt16 |
Index that identifies the namespace that defines the name. This index is the index of that namespace in the local Server’s NamespaceArray. The Client may read the NamespaceArray Variable to access the string value of the namespace. |
Name |
String |
The text portion of the QualifiedName. |
This Simple DataType is specified as a string that is composed of a language component and a country/region component as specified by RFC 5646. The <country/region> component is always preceded by a hyphen. The format of the LocaleId string is shown below:
<language>[-<country/region>], where <language> is the two letter ISO 639 code for a language, <country/region> is the two letter ISO 3166 code for the country/region.
The rules for constructing LocaleIds defined by RFC 5646 are restricted as follows:
- this specification permits only zero or one <country/region> component to follow the <language> component;
- this specification also permits the “-CHS” and “-CHT” three-letter <country/region> codes for “Simplified” and “Traditional” Chinese locales;
- this specification also allows the use of other <country/region> codes as deemed necessary by the Client or the Server.
- This specification also allows the use of the “mul” and “qst” <country/region> codes for representing multiple languages and substitutable text. When using these locales, a specific format of the String is used. This format is defined in 8.5.
Table 25 shows examples of OPC UA LocaleIds. Clients and Servers always provide LocaleIds that explicitly identify the language and the country/region.
Locale |
OPC UA LocaleId |
English |
en |
English (US) |
en-US |
German |
de |
German (Germany) |
de-DE |
German (Austrian) |
de-AT |
An empty or null string indicates that the LocaleId is unknown.
This Built-in DataType defines a structure containing a String in a locale-specific translation specified in the identifier for the locale. Its elements are defined in Table 26.
Table 26 – LocalizedText Definition
Name |
Type |
Description |
LocalizedText |
structure |
|
Locale |
LocaleId |
The identifier for the locale (e.g. “en-US”). |
Text |
String |
The localized text. |
Two special locales may be used with LocalizedText to support multiple languages and text substitutions. When using the special locales the content of the Text element shall be a JSON encoded object. The JSON Text element should be in the JSON minified form.
Special locales shall never be used as a Server’s default locale.
The “mul” locale is used to provide multiple languages in the Text element. The JSON object shall include a key “t” which consists of an array of locale and text pairs with the locale being the first element of the pair array.
An example which provides 2 languages.
{
“t”:[
[“de-DE“, “Ich bin dein text 1,2345”],
[“en-US”, “I’m your text 1.2345”]
]
}
The “qst” locale is used to provide consumer substitutions of the Text element in a single or in multiple languages. This locale extends the “mul” locale defined in 8.5.2.2 and therefore shall include a key “t” which provides the text that replacements are applied to.
The JSON object shall also contain a key “r” which consists of an array of replacement key and replacement text pairs. These replacements shall be applied by the consumer to the “t” text strings by replacing any occurrence of the replacement key with the replacement text.
If there is only one replacement text, and the text is encoded as a scalar the text isapplied to all languages.
If separate languages are provided the replacement texts shall be encoded as an array. In this case the first replacement text shall be applied to the first language, the second to the second language and so on. If there are less replacement texts than languages due to an error, no replacement takes place for the remaining languages, leaving the replacement key. The last example below illustrates these rules.
A replacement key shall be unique and shall not be a substring of another replacement key. A consumer shall ensure replaced text shall not be replaced again by any subsequent replacement operation.
An example of a single language substitution.
{
“t”:[
[“en-US”, “I’m your text @1@”]
],
“r”:[
[“@1@”, 1.2345]
]
}
“en-US” text after substitution
“I’m your text 1.2345”
An example which provides 2 languages with a substitution that apply to both languages.
{
“t”:[
[“de-DE“, “Ich bin dein text @1@”],
[“en-US”, “I’m your text @1@”]
],
“r”:[
[“@1@”, 1.2345]
]
}
“de-DE” text after substitution
“Ich bin dein text 1,2345”
“en-US” text after substitution
“I’m your text 1.2345”
An example which provides 2 languages with a substitution that apply to both languages and substitutions that apply to specific languages.
{
“t”:[
[“de-DE”, “Dieses@2@ Ist eine @1@ Meldung: /2/ hat das Problem %d6 verursacht!”],
[“en-US”, “This@2@ is a @1@ Message: Problem %d6 was caused by /2/!”]
],
“r”:[
[“%d6”, 1.2345],
[“@1@”, [“gültige”, “valid”]],
[“/2/”, 42],
[“@2@”, [“@”]]
]
}
“de-DE” text after substitution
“Dieses@ Ist eine gültige Meldung: 42 hat das Problem 1,2345 verursacht!”
“en-US” text after substitution
“This@2@ is a valid Message: Problem 1.2345 was caused by 42!”
This Structured DataType defines a Method input or output argument specification. It is for example used in the input and output argument Properties for Methods. Its elements are described in Table 27.
Table 27 – Argument Definition
Name |
Type |
Description |
Argument |
structure |
|
Name |
String |
The name of the argument. |
DataType |
NodeId |
|
ValueRank |
Int32 |
Indicates whether the Datatype is an array and how many dimensions the array has. It may have the following values: n > 1: the Datatype is an array with the specified number of dimensions. OneDimension (1): The Datatype is an array with one dimension. OneOrMoreDimensions (0): The Datatype is an array with one or more dimensions. Scalar (−1): The Datatype is not an array. Any (−2): The Datatype can be a scalar or an array with any number of dimensions. ScalarOrOneDimension (−3): The Datatype can be a scalar or a one dimensional array. NOTE All DataTypes are considered to be scalar, even if they have array-like semantics like ByteString and String. |
ArrayDimensions |
UInt32[] |
This field specifies the maximum supported length of each dimension. If the maximum is unknown the value shall be 0. The number of elements shall be equal to the value of the valueRank field. This field shall be null if valueRank ≤ 0. The maximum number of elements of an array transferred on the wire is 2147483647 (max Int32). |
Description |
LocalizedText |
A localised description of the argument. |
This abstract DataType defines a value that can have any valid DataType.
It defines a special value null indicating that a value is not present. This abstract DataType does not have an encoding defined in OPC 10000-6. Any direct subtype shall only be defined in NamespaceIndex 0.
A BaseDataType is an abstract DataType which represents any possible value including arrays of values. When an array of BaseDataTypes is specified each element of the array can be a scalar or array of any DataType.
When a BaseDataType is used in conjunction with a ValueRank then the ValueRank specifies whether there is an array of BaseDataType values. The ValueRank does not restrict the content of each element.
This Built-in DataType defines a value that is either TRUE or FALSE.
This Built-in DataType defines a value in the range of 0 to 255.
This Built-in DataType defines a value that is a sequence of Byte values.
This Built-in DataType defines a Gregorian calendar date. Details about this DataType are defined in OPC 10000-6.
This Built-in DataType defines a value that adheres to the ISO/IEC/IEEE 60559:2020 double precision data type definition.
This Simple DataType is a Double that defines an interval of time in milliseconds (fractions can be used to define sub-millisecond values). Negative values are generally invalid but may have special meanings where the Duration is used.
This abstract DataType is the base DataType for all enumeration DataTypes like NodeClass defined in 8.29. All DataTypes inheriting from this DataType have special handling for the encoding as defined in OPC 10000-6. All enumeration DataTypes shall inherit from this DataType.
Some special rules apply when subtyping enumerations. Any enumeration DataType not directly inheriting from the Enumeration DataType can only restrict the enumeration values of its supertype. That is, it shall neither add enumeration values nor change the text associated to the enumeration value. As an example, the enumeration Days having {‘Mo’, ‘Tu’, ‘We’, ‘Th’, ‘Fr’, ‘Sa’, ‘Su’} as values can be subtyped to the enumeration Workdays having {‘Mo’, ‘Tu’, ‘We’, ‘Th’, ‘Fr’}. The other direction, subtyping Workdays to Days would not be allowed as Days has values not allowed by Workdays (‘Sa’ and ‘Su’).
This Built-in DataType defines a value that adheres to the ISO/IEC/IEEE 60559:2020 single precision data type definition.
This Built-in DataType defines a value that is a 128-bit Globally Unique Identifier. Details about this DataType are defined in OPC 10000-6.
This Built-in DataType defines a value that is a signed integer between −128 and 127 inclusive.
This DataType is an enumeration that identifies the IdType of a NodeId. Its values are defined in Table 22. See 8.2.3 for a description of the use of this DataType in NodeIds.
This abstract DataType defines a ByteString representing an image.
This Simple DataType defines a ByteString representing an image in BMP format.
This Simple DataType defines a ByteString representing an image in GIF format.
This Simple DataType defines a ByteString representing an image in JPG format.
This Simple DataType defines a ByteString representing an image in PNG format.
This abstract DataType defines an integer whose length is defined by its subtypes. This abstract DataType does not have an encoding defined in OPC 10000-6. Any direct subtype shall only be defined in NamespaceIndex 0.
This Built-in DataType defines a value that is a signed integer between −32 768 and 32 767 inclusive.
This Built-in DataType defines a value that is a signed integer between −2 147 483 648 and 2 147 483 647 inclusive.
This Built-in DataType defines a value that is a signed integer between −9 223 372 036 854 775 808 and 9 223 372 036 854 775 807 inclusive.
This Structured DataType defines the local time that may or may not take daylight saving time into account. Its elements are described in Table 28.
Table 28 – TimeZoneDataType Definition
Name |
Type |
Description |
TimeZoneDataType |
structure |
|
Offset |
Int16 |
The offset in minutes from UtcTime |
DaylightSavingInOffset |
Boolean |
If TRUE, then daylight saving time (DST) is in effect and offset includes the DST correction. If FALSE then the offset does not include the DST correction and DST may or may not have been in effect. |
This DataType is an enumeration that identifies a NodeClass. Its values are defined in Table 29.
Name |
Value |
Description |
Unspecified |
0 |
No value is specified. |
Object |
1 |
The Node is an Object. |
Variable |
2 |
The Node is a Variable. |
Method |
4 |
The Node is a Method. |
ObjectType |
8 |
The Node is an ObjectType. |
VariableType |
16 |
The Node is a VariableType. |
ReferenceType |
32 |
The Node is a ReferenceType. |
DataType |
64 |
The Node is a DataType. |
View |
128 |
The Node is a View. |
This abstract DataType defines a number. Details are defined by its subtypes. This abstract DataType does not have an encoding defined in OPC 10000-6. Any direct subtype shall only be defined in NamespaceIndex 0.
This Built-in DataType defines a Unicode character string that should exclude control characters. Unicode control characters are defined by Unicode C0 and Unicode C1
This abstract DataType is the base DataType for all Structured DataTypes like Argument defined in 8.6. While abstract Structures may be defined with no fields a non-abstract Structure shall have one or more fields defined directly or from a super type. All DataTypes inheriting from this DataType have special handling for the encoding as defined in OPC 10000-6.
This abstract DataType defines an unsigned integer whose length is defined by its subtypes. This abstract DataType does not have an encoding defined in OPC 10000-6. Any direct subtype shall only be defined in NamespaceIndex 0.
This Built-in DataType defines a value that is an unsigned integer between 0 and 65 535 inclusive.
This Built-in DataType defines a value that is an unsigned integer between 0 and 4 294 967 295 inclusive.
This Built-in DataType defines a value that is an unsigned integer between 0 and 18 446 744 073 709 551 615 inclusive.
This simple DataType is a DateTime used to define Coordinated Universal Time (UTC) values. All time values conveyed between OPC UA Servers and Clients are UTC values. Clients shall provide any conversions between UTC and local time.
It should be noted that the SourceTimestamp (see OPC 10000-4) and ServerTimestamp (see OPC 10000-4) may originate from different clocks that have no synchronization.
This Built-in DataType is used to define XML elements. OPC 10000-6 defines details about this DataType.
XML data can always be modelled as a subtype of the Structure DataType with a single DataTypeEncoding that represents the XML complexType that defines the XML element (it is not necessary to have access to the XML Schema to define a DataTypeEncoding). For this reason a Server should never define Variables that use the XmlElement DataType unless the Server has no information about the XML elements that might be in the Variable Value.
This Structured DataType is used to represent a human-readable representation of an Enumeration. Its elements are described in Table 30. When this type is used in an array representing human-readable representations of an enumeration, each Value shall be unique in that array.
Table 30 – EnumValueType Definition
Name |
Type |
Description |
EnumValueType |
structure |
|
Value |
Int64 |
The Integer representation of an Enumeration. |
DisplayName |
LocalizedText |
A human-readable representation of the Value of the Enumeration. |
Description |
LocalizedText |
A localized description of the enumeration value. This field can contain an empty string if no description is available. |
Note that the EnumValueType has been defined with an Int64 Value to meet a variety of usages. When it is used to define the string representation of an Enumeration DataType, the value range is limited to Int32, because the Enumeration DataType is a subtype of Int32. OPC 10000-8 specifies other usages where the actual value might be between 8 and 64 Bit.
This abstract DataType is the base DataType for all DataTypes representing a bit mask which is larger than 64 bits or where the validity of the bits within the set are to be identified. All OptionSet DataTypes representing bit masks shall inherit from this DataType. Its elements are described in Table 31.
Table 31 – OptionSet Definition
Name |
Type |
Description |
OptionSet |
structure |
|
Value |
ByteString |
Array of bytes representing the bits in the option set. The length of the ByteString depends on the number of bits. The number of bytes may be larger than needed for the valid bits in the case of a spare allocation. |
ValidBits |
ByteString |
Array of bytes shall be the same size as value representing the valid bits in the value parameter. A Server shall return the StateCode BadOutOfRange if it receives a different array size. When the Server returns the value to the Client, the validBits provides information of which bits in the bit mask have a meaning. If a bit is 1 then the corresponding bit in the value is used by the Server. If it is set to a 0 it should be ignored as it has no meaning. When the Client passes the OptionSet value to the Server, it sets the bits of validBits to 1 for each bit the Client expects the Server to apply to the value. The Server shall use the following logic when applying the requested change “new value = (value & validBits) | (current value & ~validBits)”. A Server shall return the StateCode BadOutOfRange if it receives validBits with a bit set to 1 which it does not consider a valid bit and shall not apply any bit changes. |
The DataType Nodes representing concrete subtypes of the OptionSet shall have an OptionSetValues Property defined in Table 16.
An OptionSet may be subtyped, however, any subtype shall not add any fields to the OptionSet Structure. The subtype may refine the semantics for the bits which are defined by the supertype and may add additional bits if the length of the OptionSet is not exceeded (see next paragraph). That requires, that each entry of the OptionSetValues Property of the supertype is repeated or refined by each subtype. Refining a bit shall not invalidate the original semantic. New OptionSetValues Properties may also be added to the subtype. For example, changing a bit from “Pump is off” to “First Pump is off” is allowed, but changing it to “Motor is on” is not allowed.
The DataType Nodes representing concrete or abstract subtypes of the OptionSet may have an OptionSetLength Property defined in Table 16. This Property defines the length in bytes of the OptionSet. If the Property is not defined, the length of a concrete OptionSet is defined by the number of defined bits (in the OptionSetValues Property) rounded up to whole bytes. For example, if there are two bits defined the length is one byte, if there are 10 bits defined, the length is two bytes. Once, the length has been defined by an OptionSet, subtypes shall not change the length. That is, if a supertype defines the length (either explicitly with OptionSetLength or implicitly by a concrete OptionSet with the OptionSetValues) each subtype shall have the same length. If the correct length is not implicitly provided by the length of the OptionSetValues the subtype shall provide the OptionSetLength Property with the same value as the supertype.
Defining the length explicitly in the OptionSetLength Property allows to reserve bits that can be used in subtypes of the OptionSet.
This abstract DataType is the base DataType for all union DataTypes. The DataType is a subtype of Structure DataType. All DataTypes inheriting from this DataType have special handling for the encoding as defined in OPC 10000-6. All union DataTypes shall inherit directly from this DataType.
This Simple DataType defines a value which is a day in the Gregorian calendar in string. Lexical representation of the string shall conform to calendar date defined in ISO 8601-1:2019.
NOTE: According to ISO 8601-1:2019, ‘calendar date representations are in the form [YYYY-MM-DD]. [YYYY] indicates a four-digit year, 0000 through 9999. [MM] indicates a two-digit month of the year, 01 through 12. [DD] indicates a two-digit day of that month, 01 through 31. For example, “the 5th of April 1981” may be represented as either “1981-04-05” in the extended format or “19810405” in the basic format.’
NOTE: ISO 8601-1:2019 also allows for calendar dates to be written with reduced precision. For example, one may write “1981-04” to mean “1981 April”, and one may simply write “1981” to refer to that year or “19” to refer to the century from 1900 to 1999 inclusive.
NOTE: Although ISO 8601-1:2019 allows both the YYYY-MM-DD and YYYYMMDD formats for complete calendar date representations, if the day [DD] is omitted then only the YYYY-MM format is allowed. By disallowing dates of the form YYYYMM, ISO 8601-1:2019 avoids confusion with the truncated representation YYMMDD (still often used).
This Simple DataType defines a value that represents a decimal number as a string. Lexical representation of the string shall conform to decimal type defined in W3C XML Schema Definition Language (XSD) 1.1 Part 2: DataTypes.
The DecimalString is a numeric string with an optional sign and decimal point.
This Simple DataType defines a value that represents a duration of time as a string. It shall conform to duration as defined in ISO 8601-1:2019.
NOTE: According to ISO 8601-1:2019 ‘Durations are represented by the format P[n]Y[n]M[n]DT[n]H[n]M[n]S or P[n]W as shown to the right. In these representations, the [n] is replaced by the value for each of the date and time elements that follow the [n]. Leading zeros are not required, but the maximum number of digits for each element should be agreed to by the communicating parties. The capital letters P, Y, M, W, D, T, H, M, and S are designators for each of the date and time elements and are not replaced.
P is the duration designator (historically called “period”) placed at the start of the duration representation.
Y is the year designator that follows the value for the number of years.
M is the month designator that follows the value for the number of months.
W is the week designator that follows the value for the number of weeks.
D is the day designator that follows the value for the number of days.
T is the time designator that precedes the time components of the representation.
H is the hour designator that follows the value for the number of hours.
M is the minute designator that follows the value for the number of minutes.
S is the second designator that follows the value for the number of seconds.
For example, “P3Y6M4DT12H30M5S” represents a duration of “three years, six months, four days, twelve hours, thirty minutes, and five seconds”. Date and time elements including their designator may be omitted if their value is zero, and lower order elements may also be omitted for reduced precision. For example, “P23DT23H” and “P4Y” are both acceptable duration representations.’
This Simple DataType defines a string value that shall be normalized according to Unicode Annex 15, Version 7.0.0, Normalization Form C.
NOTE: Some Unicode characters have multiple equivalent binary representations consisting of sets of combining and/or composite Unicode characters. Unicode defines a process called normalization that returns one binary representation when given any of the equivalent binary representations of a character. The Win32 and the .NET Framework currently support normalization forms C, D, KC, and KD, as defined in Annex 15 of Unicode. NormalizedString uses Normalization Form C for all content, because this form avoids potential interoperability problems caused by the use of canonically equivalent, yet different, character sequences in document formats.
This Simple DataType defines a value that represents a time as a string. It shall conform to time of day as defined in ISO 8601-1:2019.
NOTE: ISO 8601-1:2019 uses the 24-hour clock system. The basic format is [hh][mm][ss] and the extended format is [hh]:[mm]:[ss].
[hh] refers to a zero-padded hour between 00 and 24 (where 24 is only used to notate midnight at the end of a calendar day).
[mm] refers to a zero-padded minute between 00 and 59.
[ss] refers to a zero-padded second between 00 and 60 (where 60 is only used to notate an added leap second).
Thus a time might appear as either “134730” in the basic format or “13:47:30” in the extended format.
It is also acceptable to omit lower order time elements for reduced accuracy: [hh]:[mm], [hh][mm] and [hh] are all used.
Midnight is a special case and can be referred to as both “00:00” and “24:00”. The notation “00:00” is used at the beginning of a calendar day and is the more frequently used. At the end of a day use “24:00”
This abstract DataType is the base type for all DataTypes used to provide the meta data for custom DataTypes like Structures and Enumerations.
This Structured DataType is used to provide the meta data for a custom Structure DataType. It is derived from the DataType DataTypeDefinition. The StructureDefinition is formally defined in Table 32.
Table 32 – StructureDefinition Structure
Name |
Type |
Description |
StructureDefinition |
Structure |
|
DefaultEncodingId |
NodeId |
The NodeId of the default DataTypeEncoding for the DataType. The default shall always be Default Binary encoding. If the DataType is only used inside nested Structures and is not directly contained in an ExtensionObject, the encoding NodeId is null. The DefaultEncodingId in the StructureDefinition shall always be the Default Binary encoding for the DataType |
BaseDataType |
NodeId |
The NodeId of the direct supertype of the DataType. This might be the abstract Structure or the Union DataType. |
StructureType |
StructureType |
An enumeration that specifies the type of Structure defined by the DataType. The StructureType DataType is defined in 8.49. Only one of the fields defined for the data type is encoded into a value if the data type is a Union. |
Fields |
StructureField [] |
The list of fields that make up the data type. This definition assumes the structure has a sequential layout. The StructureField DataType is defined in 8.51. For Structures derived from another Structure DataType this list shall begin with the fields of the baseDataType followed by the fields of this StructureDefinition. |
This DataType is an enumeration that specifies type of Structure defined by a StructureDefinition. Its values are defined in Table 33.
Table 33 – StructureType Values
Name |
Value |
Description |
Structure |
0 |
A Structure without optional fields where none of the fields allow subtyping |
StructureWithOptionalFields |
1 |
A Structure with optional fields where none of the fields allow subtyping |
Union |
2 |
A Union DataType where none of the fields allow subtyping |
StructureWithSubtypedValues |
3 |
A Structure without optional fields where one or more of the fields allow subtyping |
UnionWithSubtypedValues |
4 |
A Union DataType where one or more of the fields allow subtyping |
This Structured DataType is used to provide the metadata for a custom Enumeration or OptionSet DataType. It is derived from the DataType DataTypeDefinition. The EnumDefinition is formally defined in Table 34.
Table 34 – EnumDefinition Structure
Name |
Type |
Description |
EnumDefinition |
Structure |
|
Fields |
EnumField [] |
The list of fields that make up the data type. The EnumField DataType is defined in 8.52. |
This Structured DataType is used to provide the metadata for a field of a custom Structure DataType. The StructureField is formally defined in Table 35.
Table 35 – StructureField Structure
Name |
Type |
Description |
StructureField |
Structure |
|
Name |
String |
A name for the field that is unique within the StructureDefinition. The name is restricted to 512 characters and shall not contain Unicode control characters.Unicode control characters are defined by Unicode C0 and Unicode C1. |
Description |
LocalizedText |
A localized description of the field |
DataType |
NodeId |
The NodeId of the DataType for the field. When used by a StructureDefinition with a structureType of Structure, StructureWithOptionalFields or Union then the datatype shall be a concrete DataType, BaseDataType DataType or Structure DataType If the structureType is StructureWithSubtypedValues, or UnionWithSubtypedValues and the isOptional field is TRUE then the encoding of the field shall be able to transport any subtype of the DataType. OPC 10000-6 provides more details of specific encodings. |
ValueRank |
Int32 |
The value rank for the field. It shall be Scalar (-1) or a fixed rank Array (>=1). |
ArrayDimensions |
UInt32[] |
This field specifies the maximum supported length of each dimension. If the maximum is unknown the value shall be 0. The number of elements shall be equal to the value of the valueRank field. This field shall be null if valueRank ≤ 0. The maximum number of elements of an array transferred on the wire is 2 147 483 647 (max Int32). |
MaxStringLength |
UInt32 |
If the dataType field is a String, LocalizedText (text field) or ByteString then this field specifies the maximum supported length in bytes. If the maximum is unknown the value shall be 0. If the dataType field is not a String or ByteString the value shall be 0. If the valueRank is greater than 0 this field applies to each element of the array. |
IsOptional |
Boolean |
If the structureType is StructureWithOptionalFields this field indicates if a data type field in a Structure is optional. In this case a value of FALSE means the StructureField is always present in all occurances of the Structure DataType and a value of TRUE means the StructureField may be present in an occurance of the Structure DataType. If the structureType is Structure or Union this field shall be FALSE and shall be ignored. If the structureType is StructureWithSubtypedValues, or UnionWithSubtypedValues this field is used to indicate if the data type field allows subtyping. Subtyping is allowed when set to TRUE. |
StructureFields can be exposed as DataVariables that are children of the Variable that contains the Structure Value. In this case the BrowseName of the DataVariable shall be the same as the StructureField name and the NamespaceIndex of the BrowseName shall be the same as the Structure DataType Node NamespaceIndex.
OPC 10000-6 defines a number of DataEncodings which specify how to serialize Structure DataTypes. Some of these DataEncodings are text based and make use of Name field. For this reason, the Name should be a String that starts with a letter and contains only letters, digits or the underscore (_). If a StructureField has a Name that does not meet these requirements it will be transformed using the Name encoding rules defined in OPC 10000-6 into a String that meets the requirements. This will result in text based DataEncodings with Names that are not friendly to human readers.
This Structured DataType is used to provide the metadata for a field of a custom Enumeration or OptionSet DataType. It is derived from the DataType EnumValueType. If used for an OptionSet DataType, the corresponding Value in the base type contains the number of the bit associated with the field. The EnumField is formally defined in Table 36.
Table 36 – EnumField Structure
Name |
Type |
Description |
EnumField |
Structure |
|
Name |
String |
A name for the field that is unique within the EnumDefinition. |
OPC 10000-6 defines a number of DataEncodings which specify how to serialize Enumeration DataTypes. Some of these DataEncodings are text based and make use of Name field. For this reason, the Name should be a String that starts with a letter and contain only letters, digits or the underscore (_). If an EnumField has a Name that does not meet these requirements it will be transformed using the Name encoding rules defined in OPC 10000-6 into a String that meets the requirements. This will result in text based DataEncodings with Names that are not friendly to human readers.
This abstract DataType defines a ByteString representing audio data. The audio stored in the ByteString could be formats like WAV or MP3 or any number of other audio formats. These formats are self-describing as part of the ByteString and are not specified in this specification.
This Built-in DataType defines a high-precision signed number. It consists of an arbitrary precision integer unscaled value and an integer scale. The scale is the inverse power of ten that is applied to the unscaled value.
This is a subtype of the UInt32 DataType with the OptionSetValues Property defined. It is used to define the permissions of a Node. The PermissionType is formally defined in Table 37.
Table 37 – PermissionType Definition
Name |
Bit |
Description |
Browse |
0 |
The Client is allowed to see the references to and from the Node. This implies that the Client is able to Read to Attributes other than the Value or the RolePermissions Attribute. This Permission is valid for all NodeClasses. |
ReadRolePermissions |
1 |
The Client is allowed to read the RolePermissions Attribute. This Permission is valid for all NodeClasses. |
WriteAttribute |
2 |
The Client is allowed to write to Attributes other than the Value, Historizing or RolePermissions Attribute if the WriteMask indicates that the Attribute is writeable. This bit affects the value of a UserWriteMask Attribute. This Permission is valid for all NodeClasses. |
WriteRolePermissions |
3 |
The Client is allowed to write to the RolePermissions Attribute if the WriteMask indicates that the Attribute is writeable. This bit affects the value of the UserWriteMask Attribute. This Permission is valid for all NodeClasses. |
WriteHistorizing |
4 |
The Client is allowed to write to the Historizing Attributes if the WriteMask indicates that the Attribute is writeable. This bit affects the value of the UserWriteMask Attribute. This Permission is only valid for Variables. |
Read |
5 |
The Client is allowed to read the Value Attribute. This bit affects the CurrentRead bit of the UserAccessLevel Attribute. This Permission is only valid for Variables. |
Write |
6 |
The Client is allowed to write the Value Attribute. This bit affects the CurrentWrite bit of the UserAccessLevel Attribute. This Permission is only valid for Variables. |
ReadHistory |
7 |
The Client is allowed to read the history associated with a Node. For Variables, this bit affects the HistoryRead bit of the UserAccessLevel Attribute. This Permission is only valid for Variables (for reading historical values), and Objects or Views (for reading historical events). |
InsertHistory |
8 |
The Client is allowed to insert the history associated with a Node. For Variables, this bit affects the HistoryWrite bit of the UserAccessLevel Attribute. This Permission is only valid for Variables (for inserting historical values), and Objects or Views (for inserting historical events). |
ModifyHistory |
9 |
The Client is allowed to modify the history associated with a Node. For Variables, this bit affects the HistoryWrite bit of the UserAccessLevel Attribute. This Permission is only valid for Variables (for modifying historical values), and Objects or Views (for modifying historical events). |
DeleteHistory |
10 |
The Client is allowed to delete the history associated with a Node. For Variables, this bit affects the HistoryWrite bit of the UserAccessLevel Attribute. This Permission is only valid for Variables (for deleting historical values), and Objects or Views (for deleting historical events). |
ReceiveEvents |
11 |
A Client only receives an Event if this bit is set on the Node identified by the EventTypeId field and on the Node identified by the SourceNode field. This Permission is only valid for EventType Nodes or SourceNodes. |
Call |
12 |
The Client is allowed to call the Method if this bit is set on the Object or ObjectType Node passed in the Call request and the Method Instance associated with that Object or ObjectType. This bit affects the UserExecutable Attribute when set on Method Node. This Permission is only valid for Objects, ObjectType or Methods. |
AddReference |
13 |
The Client is allowed to add references to the Node. This Permission is valid for all NodeClasses. |
RemoveReference |
14 |
The Client is allowed to remove references from the Node. This Permission is valid for all NodeClasses. |
DeleteNode |
15 |
The Client is allowed to delete the Node. This Permission is valid for all NodeClasses. |
AddNode |
16 |
The Client is allowed to add Nodes to the Namespace. This Permission is only used in the DefaultRolePermissions and DefaultUserRolePermissions Properties of a NamespaceMetadata Object |
Reserved |
17-31 |
These bits are reserved for use by OPC UA. |
This is a subtype of the UInt16 DataType with the OptionSetValues Property defined. It is used to define the access restrictions of a Node. The AccessRestrictionType is formally defined in Table 38.
Table 38 – AccessRestrictionType Definition
Name |
Bit |
Description |
SigningRequired |
0 |
The Client can only access the Node when using a SecureChannel which digitally signs all messages. This does not apply to the Browse permission if the ApplyRestrictionsToBrowse is not set. |
EncryptionRequired |
1 |
The Client can only access the Node when using a SecureChannel which encrypts all messages. This does not apply to the Browse permission if the ApplyRestrictionsToBrowse is not set. |
SessionRequired |
2 |
The Client cannot access the Node when using SessionlessInvoke Service invocation. |
ApplyRestrictionsToBrowse |
3 |
If this bit is set, the access restrictions SigningRequired and EncryptionRequired are also applied to the Browse permission defined in Table 37. |
This is a subtype of the Byte DataType with the OptionSetValues Property defined. It is used to indicate how the Value of a Variable can be accessed (read/write) and if it contains current and/or historic data. The AccessLevelType is formally defined in Table 39.
Table 39 – AccessLevelType Definition
Name |
Bit |
Description |
CurrentRead |
0 |
Indicates if the current value is readable. It also indicates if the current value of the Variable is available.(0 means not readable, 1 means readable). |
CurrentWrite |
1 |
Indicates if the current value is writeable. It also indicates if the current value of the Variable is available.(0 means not writeable, 1 means writeable). |
HistoryRead |
2 |
Indicates if the history of the value is readable. It also indicates if the history of the Variable is available via the OPC UA Server.(0 means not readable, 1 means readable). |
HistoryWrite |
3 |
Indicates if the history of the value is writeable. It also indicates if the history of the Variable is available via the OPC UA Server. (0 means not writeable, 1 means writeable). |
SemanticChange |
4 |
This flag is set for Properties that define semantic aspects of the parent Node of the Property and where the Property Value, and thus the semantic, may change during operation. (0 means is not a semantic, 1 means is a semantic). |
StatusWrite |
5 |
Indicates if the current StatusCode of the value is writeable (0 means only StatusCode Good is writeable, 1 means any StatusCode is writeable). |
TimestampWrite |
6 |
Indicates if the current SourceTimestamp is writeable (0 means only null timestamps are writeable, 1 means any timestamp value is writeable). |
Reserved |
7 |
Reserved for future use. Shall always be zero. |
This is a subtype of the UInt32 DataType with the OptionSetValues Property defined. It is used to indicate how the Value of a Variable can be accessed (read/write), if it contains current and/or historic data and its atomicity.
The AccessLevelExType DataType is an extended version of the AccessLevelType DataType and as such contains the 8 bits of the AccessLevelType as the first 8 bits.
The NonatomicRead, and NonatomicWrite Fields represent the atomicity of a Variable. In general Atomicity is expected of OPC UA read and write operations. These Fields are used by systems, in particular hard-realtime controllers, which can not ensure atomicity.
The NoSubDataTypes Field represents the ability of a Variable to accept derived DataTypes. In general Variables are expected to allow the defined DataType or any subtype of that DataType. This Field is used to indicate a Variable restricts the DataType to only what is defined, that is no subtypes are allowed.
The NonVolatile Field represents the volatility of the Variable. This Field is used to indicate a Server shall ensure the Value of the Variable is persisted over a restart.
The Constant Field represents the changeability of the Variable and if changes in its Value trigger changes to the ConfigurationVersion Property of the NamespaceMetadata Object for the Namespace of the Variable. When this Field is 0 the Value of the Variable may change at any time and Value changes shall not trigger changes in the ConfigurationVersion Property. When this Field is 1 the Value of the Variable changes infrequently (e.g. by configuration change) and each change in Value shall trigger changes to the ConfigurationVersion Property (and the ConfigurationVersion Property shall be provided along with the parent NamespaceMetadata Object for the Namespace of the Variable).
Table 40 defines the combinations of Constant and NonVolatile Fields and their use cases.
Table 40 – Use Cases of Constant and NonVolatile Fields
Constant |
NonVolatile |
Use Case |
0 |
0 |
Can not be assumed to be constant or non-volatile |
0 |
1 |
Not constant and non-volatile |
1 |
0 |
constant and volatile. The related ConfigurationVersion shall be changed with each Server restart. |
1 |
1 |
Constant and non-volatile |
The AccessLevelExType is formally defined in Table 41.
Table 41 – AccessLevelExType Definition
Name |
Bit |
Description |
CurrentRead |
0 |
See 8.57. |
CurrentWrite |
1 |
See 8.57. |
HistoryRead |
2 |
See 8.57. |
HistoryWrite |
3 |
See 8.57. |
SemanticChange |
4 |
See 8.57. |
StatusWrite |
5 |
See 8.57. |
TimestampWrite |
6 |
See 8.57. |
Reserved |
7 |
See 8.57. |
NonatomicRead |
8 |
Indicates non-atomicity for Read access (0 means that atomicity is assured). |
NonatomicWrite |
9 |
Indicates non-atomicity for Write access (0 means that atomicity is assured). |
WriteFullArrayOnly |
10 |
Indicates if Write of IndexRange is supported (0 means Write of IndexRange is supported). |
NoSubDataTypes |
11 |
Indicates if the Variable doesn’t allow its DataType to be subtyped (0 means the Variable accepts the defined DataType and subtypes of that DataType). |
NonVolatile |
12 |
Indicates if the Variable is non-volatile (0 means it is volatile or not known to be, 1 means non-volatile). |
Constant |
13 |
Indicates if the Value of the Variable can be considered constant (0 means the Value is not constant, 1 means the Value is constant). |
Reserved |
14:31 |
Reserved for future use. Shall always be zero. |
This is a subtype of the Byte DataType with the OptionSetValues Property defined. It is used to indicate if a Node can be used to subscribe to Events or read / write historic Events.
The EventNotifierType is formally defined in Table 42.
Table 42 – EventNotifierType Definition
Name |
Bit |
Description |
SubscribeToEvents |
0 |
Indicates if it can be used to subscribe to Events (0 means cannot be used to subscribe to Events, 1 means can be used to subscribe to Events). |
Reserved |
1 |
Reserved for future use. Shall always be zero. |
HistoryRead |
2 |
Indicates if the history of the Events is readable (0 means not readable, 1 means readable). |
HistoryWrite |
3 |
Indicates if the history of the Events is writeable (0 means not writeable, 1 means writeable). |
Reserved |
4:7 |
Reserved for future use. Shall always be zero. |
This is a subtype of the UInt32 DataType with the OptionSetValues Property defined. It is used to define the Attribute access restrictions of a Node. The AttributeWriteMask is formally defined in Table 43.
If a bit is set to 0, it means the Attribute is not writeable. If a bit is set to 1, it means it is writeable. If a Node does not support a specific Attribute, the corresponding bit has to be set to 0.
Table 43 – Bit mask for WriteMask and UserWriteMask
Field |
Bit |
Description |
AccessLevel |
0 |
Indicates if the AccessLevel Attribute is writeable. |
ArrayDimensions |
1 |
Indicates if the ArrayDimensions Attribute is writeable. |
BrowseName |
2 |
Indicates if the BrowseName Attribute is writeable. |
ContainsNoLoops |
3 |
Indicates if the ContainsNoLoops Attribute is writeable. |
DataType |
4 |
Indicates if the DataType Attribute is writeable. |
Description |
5 |
Indicates if the Description Attribute is writeable. |
DisplayName |
6 |
Indicates if the DisplayName Attribute is writeable. |
EventNotifier |
7 |
Indicates if the EventNotifier Attribute is writeable. |
Executable |
8 |
Indicates if the Executable Attribute is writeable. |
Historizing |
9 |
Indicates if the Historizing Attribute is writeable. |
InverseName |
10 |
Indicates if the InverseName Attribute is writeable. |
IsAbstract |
11 |
Indicates if the IsAbstract Attribute is writeable. |
MinimumSamplingInterval |
12 |
Indicates if the MinimumSamplingInterval Attribute is writeable. |
NodeClass |
13 |
Indicates if the NodeClass Attribute is writeable. |
NodeId |
14 |
Indicates if the NodeId Attribute is writeable. |
Symmetric |
15 |
Indicates if the Symmetric Attribute is writeable. |
UserAccessLevel |
16 |
Indicates if the UserAccessLevel Attribute is writeable. |
UserExecutable |
17 |
Indicates if the UserExecutable Attribute is writeable. |
UserWriteMask |
18 |
Indicates if the UserWriteMask Attribute is writeable. |
ValueRank |
19 |
Indicates if the ValueRank Attribute is writeable. |
WriteMask |
20 |
Indicates if the WriteMask Attribute is writeable. |
ValueForVariableType |
21 |
Indicates if the Value Attribute is writeable for a VariableType. It does not apply for Variables since this is handled by the AccessLevel and UserAccessLevel Attributes for the Variable. For Variables this bit shall be set to 0. |
DataTypeDefinition |
22 |
Indicates if the DataTypeDefinition Attribute is writeable. |
RolePermissions |
23 |
Indicates if the RolePermissions Attribute is writeable. |
AccessRestrictions |
24 |
Indicates if the AccessRestrictions Attribute is writeable. |
AccessLevelEx |
25 |
Indicates if the AccessLevelEx Attribute is writeable. |
Reserved |
26:31 |
Reserved for future use. Shall always be zero. |
This structured DataType is used to represent the currency of a Variable Value based on ISO 4217. Its elements are described in Table 44.
Table 44 – CurrencyUnitType Definition
Name |
Type |
Description |
CurrencyUnitType |
structure |
|
NumericCode |
Int16 |
Three-digit code numeric code assigned to each currency in ISO 4217. If unknown or not available this shall be -1.
Converting the number to a string shall always produce a 3 character string with leading zeros when necessary (e.g. the number 36 shall be presented as 036). Non-decimal currencies shall not be supported. |
Exponent |
SByte |
Number of digits after the decimal separator. If unknown or not available this shall be -1. exponent expresses the relationship between the major currency unit and its corresponding minor currency unit. For example, USD (United States dollar) is equal to 100 of its minor currency unit the "cent". So the exponent is 2 (10 to the power 2 is 100). |
AlphabeticCode |
String |
Three-letter alphabetic code as defined by ISO 4217. |
Currency |
LocalizedText |
Full name of currency as defined by ISO 4217. |
Examples:
numericCode |
exponent |
alphabeticCode |
currency |
036 |
2 |
AUD |
Australian Dollar |
978 |
2 |
EUR |
Euro |
356 |
2 |
INR |
Indian Rupee |
840 |
2 |
USD |
US Dollar |
826 |
2 |
GBP |
Pound Sterling |
392 |
0 |
JPY |
Yen |