Errata exists for this version of the document.
This VariableType defines the general characteristics of a DataItem. All other DataItem Types derive from it. The DataItemType derives from the BaseDataVariableType and therefore shares the variable model as described in OPC 10000-3 and OPC 10000-5. It is formally defined in Table 1.
Table 1 – DataItemType definition
Attribute |
Value |
||||
BrowseName |
DataItemType |
||||
IsAbstract |
False |
||||
ValueRank |
−2 (−2 = ‘Any’) |
||||
DataType |
BaseDataType |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the BaseDataVariableType defined in OPC 10000-5; i.e the Properties of that type are inherited. |
|||||
HasSubtype |
VariableType |
AnalogItemType |
Defined in 0 |
||
HasSubtype |
VariableType |
DiscreteItemType |
Defined in 5.3.3 |
||
HasSubtype |
VariableType |
ArrayItemType |
Defined in 5.3.4 |
||
HasProperty |
Variable |
Definition |
String |
PropertyType |
Optional |
HasProperty |
Variable |
ValuePrecision |
Double |
PropertyType |
Optional |
Definition is a vendor-specific, human readable string that specifies how the value of this DataItem is calculated. Definition is non-localized and will often contain an equation that can be parsed by certain clients.
Example: Definition::= “(TempA – 25) + TempB”
ValuePrecision specifies the maximum precision that the Server can maintain for the item based on restrictions in the target environment.
ValuePrecision can be used for the following DataTypes:
- For Float and Double values it specifies the number of digits after the decimal place.
- For DateTime values it indicates the minimum time difference in nanoseconds. For example, a ValuePrecision of 20 000 000 defines a precision of 20 ms.
The ValuePrecision Property is an approximation that is intended to provide guidance to a Client. A Server is expected to silently round any value with more precision that it supports. This implies that a Client may encounter cases where the value read back from a Server differs from the value that it wrote to the Server. This difference shall be no more than the difference suggested by this Property.
This VariableType defines the general characteristics of an AnalogItem. All other AnalogItem Types derive from it. The AnalogItemType derives from the DataItemType. It is formally defined in Table 2.
Table 2 – AnalogItemType definition
Attribute |
Value |
||||
BrowseName |
AnalogItemType |
||||
IsAbstract |
False |
||||
ValueRank |
−2 (−2 = ‘Any’) |
||||
DataType |
Number |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the DataItemType defined in 5.3.1 i.e the Properties of that type are inherited. |
|||||
HasProperty |
Variable |
InstrumentRange |
Range |
PropertyType |
Optional |
HasProperty |
Variable |
EURange |
Range |
PropertyType |
Mandatory |
HasProperty |
Variable |
EngineeringUnits |
EUInformation |
PropertyType |
Optional |
The following paragraphs describe the Properties of this VariableType. If the analog item’s Value contains an array, the Properties shall apply to all elements in the array.
InstrumentRange defines the value range that can be returned by the instrument.
Example: InstrumentRange::= {-9999.9, 9999.9}
Although defined as optional, it is strongly recommended for Servers to support this Property. Without an InstrumentRange being provided, Clients will commonly assume the full range according to the DataType.
The Range Data Type is specified in 5.6.2.
EURange defines the value range likely to be obtained in normal operation. It is intended for such use as automatically scaling a bar graph display.
Sensor or instrument failure or deactivation can result in a returned item value which is actually outside of this range. Client software must be prepared to deal with this possibility. Similarly a Client may attempt to write a value that is outside of this range back to the server. The exact behaviour (accept, reject, clamp, etc.) in this case is Server-dependent. However, in general Servers shall be prepared to handle this.
Example: EURange::= {-200.0,1400.0}
See also 6.2 for a special monitoring filter (PercentDeadband) which is based on the engineering unit range.
EngineeringUnits specifies the units for the DataItem’s value (e.g., DEGC, hertz, seconds). The EUInformation type is specified in 5.6.3.
Important note: Understanding the units of a measurement value is essential for a uniform system. In an open system in particular where servers from different cultures might be used, it is essential to know what the units of measurement are. Based on such knowledge, values can be converted if necessary before being used. Therefore, although defined as optional, support of the EngineeringUnits Property is strongly advised.
OPC UA recommends using the “Codes for Units of Measurement” (see UN/CEFACT: UNECE Recommendation N° 20). The mapping to the EngineeringUnits Property is specified in 5.6.3.
Examples for unit mixup: In 1999, the Mars Climate Orbiter crashed into the surface of Mars. The main reason was a discrepancy over the units used. The navigation software expected data in newton second; the company who built the orbiter provided data in pound-force seconds. Another, less expensive, disappointment occurs when people used to British pints order a pint in the USA, only to be served what they consider a short measure.
The StatusCode SemanticsChanged bit shall be set if any of the EURange (could change the behaviour of a Subscription if a PercentDeadband filter is used) or EngineeringUnits (could create problems if the client uses the value to perform calculations) Properties are changed (see section 5.2 for additional information).
This VariableType is an abstract type. That is, no instances of this type can exist. However, it might be used in a filter when browsing or querying. The DiscreteItemType derives from the DataItemType and therefore shares all of its characteristics. It is formally defined in Table 3.
Table 3 – DiscreteItemType definition
Attribute |
Value |
||||
BrowseName |
DiscreteItemType |
||||
IsAbstract |
True |
||||
ValueRank |
−2 (−2 = ‘Any’) |
||||
DataType |
BaseDataType |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the DataItemType defined in 5.2; i.e the Properties of that type are inherited. |
|||||
HasSubtype |
VariableType |
TwoStateDiscreteType |
Defined in 5.3.3.2 |
||
HasSubtype |
VariableType |
MultiStateDiscreteType |
Defined in 5.3.3.3 |
||
HasSubtype |
VariableType |
MultiStateValueDiscreteType |
Defined in 5.3.3.4 |
This VariableType defines the general characteristics of a DiscreteItem that can have two states. The TwoStateDiscreteType derives from the DiscreteItemType. It is formally defined in Table 4.
Table 4 – TwoStateDiscreteType definition
Attribute |
Value |
||||
BrowseName |
TwoStateDiscreteType |
||||
IsAbstract |
False |
||||
ValueRank |
−2 (−2 = ‘Any’) |
||||
DataType |
Boolean |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the DiscreteItemType defined in 5.3.3; i.e the Properties of that type are inherited. |
|||||
HasProperty |
Variable |
TrueState |
LocalizedText |
PropertyType |
Mandatory |
HasProperty |
Variable |
FalseState |
LocalizedText |
PropertyType |
Mandatory |
TrueState contains a string to be associated with this DataItem when it is TRUE. This is typically used for a contact when it is in the closed (non-zero) state.
for example: "RUN", "CLOSE", "ENABLE", "SAFE“, etc.
FalseState contains a string to be associated with this DataItem when it is FALSE. This is typically used for a contact when it is in the open (zero) state.
for example: "STOP", "OPEN", "DISABLE", "UNSAFE“, etc.
If the item contains an array, then the Properties will apply to all elements in the array.
The StatusCode SemanticsChanged bit shall be set if any of the FalseState or TrueState ( changes can cause misinterpretation by users or (scripting) programs) Properties are changed (see section 5.2 for additional information).
This VariableType defines the general characteristics of a DiscreteItem that can have more than two states. The MultiStateDiscreteType derives from the DiscreteItemType. It is formally defined in Table 5.
Table 5 – MultiStateDiscreteType definition
Attribute |
Value |
||||
BrowseName |
MultiStateDiscreteType |
||||
IsAbstract |
False |
||||
ValueRank |
−2 (−2 = ‘Any’) |
||||
DataType |
UInteger |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the DiscreteItemType defined in 5.3.3; i.e the Properties of that type are inherited. |
|||||
HasProperty |
Variable |
EnumStrings |
LocalizedText[] |
PropertyType |
Mandatory |
EnumStrings is a string lookup table corresponding to sequential numeric values (0, 1, 2, etc.)
Example:
”OPEN”
”CLOSE”
”IN TRANSIT” etc.
Here the string “OPEN” corresponds to 0, “CLOSE” to 1 and “IN TRANSIT” to 2.
Clients should be prepared to handle item values outside of the range of the list; and robust servers should be prepared to handle writes of illegal values.
If the item contains an array then this lookup table shall apply to all elements in the array.
NOTE The EnumStrings property is also used for Enumeration DataTypes (for the specification of this DataType, see OPC 10000-3).
The StatusCode SemanticsChanged bit shall be set if the EnumStrings ( changes can cause misinterpretation by users or (scripting) programs) Property is changed (see section 5.2 for additional information).
This VariableType defines the general characteristics of a DiscreteItem that can have more than two states and where the state values (the enumeration) does not consist of consecutive numeric values (may have gaps) or where the enumeration is not zero-based. The MultiStateValueDiscreteType derives from the DiscreteItemType. It is formally defined in Table 6.
Table 6 – MultiStateValueDiscreteType definition
Attribute |
Value |
||||
BrowseName |
MultiStateValueDiscreteType |
||||
IsAbstract |
False |
||||
ValueRank |
Scalar |
||||
DataType |
Number |
||||
References |
NodeClass |
BrowseName |
DataType TypeDefinition |
ModellingRule |
|
Subtype of the DiscreteItemType defined in 5.3.3; i.e the Properties of that type are inherited. |
|||||
HasProperty |
Variable |
EnumValues |
See OPC 10000-3 |
Mandatory |
|
HasProperty |
Variable |
ValueAsText |
See OPC 10000-3 |
Mandatory |
EnumValues is an array of EnumValueType. Each entry of the array represents one enumeration value with its integer notation, a human-readable representation, and help information. This represents enumerations with integers that are not zero-based or have gaps (e.g. 1, 2, 4, 8, 16). See OPC 10000-3 for the definition of this type. MultiStateValueDiscrete Variables expose the current integer notation in their Value Attribute. Clients will often read the EnumValues Property in advance and cache it to lookup a name or help whenever they receive the numeric representation.
MultiStateValueDiscrete Variables can have any numeric Data Type; this includes signed and unsigned integers from 8 to 64 Bit length.
The numeric representation of the current enumeration value is provided via the Value Attribute of the MultiStateValueDiscrete Variable. The ValueAsText Property provides the localized text representation of the enumeration value. It can be used by Clients only interested in displaying the text to subscribe to the Property instead of the Value Attribute.
This abstract VariableType defines the general characteristics of an ArrayItem. Values are exposed in an array but the content of the array represents a single entity like an image. Other DataItems might contain arrays that represent for example several values of several temperature sensors of a boiler.
ArrayItemType or its subtype shall only be used when the Title and AxisScaleType Properties can be filled with reasonable values. If this is not the case DataItemType and subtypes like AnalogItemType, which also support arrays, shall be used. The ArrayItemType is formally defined in Table 7.
Table 7 – ArrayItemType definition
Attribute |
Value |
||||
BrowseName |
ArrayItemType |
||||
IsAbstract |
True |
||||
ValueRank |
0 (0 = OneOrMoreDimensions) |
||||
DataType |
BaseDataType |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the DataItemType defined in 5.3.1; i.e the Properties of that type are inherited. |
|||||
HasSubtype |
VariableType |
YArrayItemType |
Defined in 5.3.4.2 |
||
HasSubtype |
VariableType |
XYArrayItemType |
Defined in 5.3.4.3 |
||
HasSubtype |
VariableType |
ImageItemType |
Defined in 5.3.4.4 |
||
HasSubtype |
VariableType |
CubeItemType |
Defined in 5.3.4.5 |
||
HasSubtype |
VariableType |
NDimensionArrayItemType |
Defined in 5.3.4.6 |
||
HasProperty |
Variable |
InstrumentRange |
Range |
PropertyType |
Optional |
HasProperty |
Variable |
EURange |
Range |
PropertyType |
Mandatory |
HasProperty |
Variable |
EngineeringUnits |
EUInformation |
PropertyType |
Mandatory |
HasProperty |
Variable |
Title |
LocalizedText |
PropertyType |
Mandatory |
HasProperty |
Variable |
AxisScaleType |
AxisScaleEnumeration |
PropertyType |
Mandatory |
InstrumentRange defines the range of the Value of the ArrayItem.
EURange defines the value range of the ArrayItem likely to be obtained in normal operation. It is intended for such use as automatically scaling a bar graph display.
EngineeringUnits holds the information about the engineering units of the Value of the ArrayItem.
For additional information about InstrumentRange, EURange, and EngineeringUnits see the description of AnalogItemType in 0.
Title holds the user readable title of the Value of the ArrayItem.
AxisScaleType defines the scale to be used for the axis where the Value of the ArrayItem shall be displayed.
The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits or Title Properties are changed (see 5.2 for additional information).
YArrayItemType represents a single-dimensional array of numerical values used to represent spectra or distributions where the x axis intervals are constant. YArrayItemType is formally defined in Table 8.
Table 8 – YArrayItemType definition
Attribute |
Value |
||||
BrowseName |
YArrayItemType |
||||
IsAbstract |
False |
||||
ValueRank |
1 |
||||
DataType |
BaseDataType |
||||
ArrayDimensions |
{0} (0 = UnknownSize) |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the ArrayItemType defined in 5.3.4.1 |
|||||
|
|
|
|
|
|
HasProperty |
Variable |
XAxisDefinition |
AxisInformation |
PropertyType |
Mandatory |
The Value of the YArrayItem contains the numerical values for the Y-Axis. Engineering Units and Range for the Value are defined by corresponding Properties inherited from the ArrayItemType.
The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.
The XAxisDefinition Property holds the information about the Engineering Units and Range for the X-Axis.
The StatusCode SemanticsChanged bit shall be set if any of the following five Properties are changed: InstrumentRange, EURange, EngineeringUnits, Title or XAxisDefinition (see 5.2 for additional information).
Figure 3 shows an example of how Attributes and Properties may be used in a graphical interface.
Figure 3 – Graphical view of a YArrayItem
Table 9 describes the values of each element presented in Figure 3.
Table 9 – YArrayItem item description
Attribute / Property |
Item value |
Description |
Magnitude Response (dB) |
axisScaleType |
AxisScaleEnumeration.LINEAR_0 |
InstrumentRange.low |
-90 |
InstrumentRange.high |
5 |
EURange.low |
-90 |
EURange.high |
2 |
EngineeringUnits.namespaceUrl |
|
EngineeringUnits.unitId |
2N |
EngineeringUnits.displayName |
“en-us”, “dB” |
EngineeringUnits.description |
“en-us”, “decibel” |
Title |
Magnitude |
XAxisDefinition.EngineeringUnits.namespaceUrl |
|
XAxisDefinition.EngineeringUnits.unitId |
kHz |
XAxisDefinition.EngineeringUnits.displayName |
“en-us”, “kHz” |
XAxisDefinition.EngineeringUnits.description |
“en-us”, “kilohertz” |
XAxisDefinition.Range.low |
0 |
XAxisDefinition.Range.high |
25 |
XAxisDefinition.title |
“en-us”, “Frequency” |
XAxisDefinition.axisScaleType |
AxisScaleEnumeration.LINEAR_0 |
XAxisDefinition.axisSteps |
null |
Interpretation notes:
- Not all elements of this table are used in the graphic.
- The X axis is displayed in reverse order, however, the XAxisDefinition.Range.low shall be lower than XAxisDefinition.Range.high. It is only a graphical representation that reverses the display order.
- There is a constant X axis
XYArrayItemType represents a vector of XVType values like a list of peaks, where XVType.x is the position of the peak and XVType.value is its intensity. XYArrayItemType is formally defined in Table 10.
Table 10 – XYArrayItemType definition
Attribute |
Value |
|||||
BrowseName |
XYArrayItemType |
|||||
IsAbstract |
False |
|||||
ValueRank |
1 |
|||||
DataType |
XVType (defined in 5.6.8) |
|||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
|
Subtype of the ArrayItemType defined in 5.3.4.1 |
||||||
|
|
|
|
|
|
|
HasProperty |
Variable |
XAxisDefinition |
AxisInformation |
PropertyType |
Mandatory |
The Value of the XYArrayItem contains an array of structures (XVType) where each structure specifies the position for the X-Axis (XVType.x) and the value itself (XVType.value), used for the Y-Axis. Engineering units and range for the Value are defined by corresponding Properties inherited from the ArrayItemType.
XAxisDefinition Property holds the information about the Engineering Units and Range for the X-Axis.
The axisSteps of XAxisDefinition shall be set to NULL because it is not used.
The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title or XAxisDefinition Properties are changed (see 5.2 for additional information).
ImageItemType defines the general characteristics of an ImageItem which represents a matrix of values like an image, where the pixel position is given by X which is the column and Y the row. The value is the pixel intensity.
ImageItemType is formally defined in Table 11.
Table 11 – ImageItemType definition
Attribute |
Value |
||||
BrowseName |
ImageItemType |
||||
IsAbstract |
False |
||||
ValueRank |
2 (2 = two dimensional array) |
||||
DataType |
BaseDataType |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the ArrayItemType defined in 5.3.4.1 |
|||||
|
|
|
|
|
|
HasProperty |
Variable |
XAxisDefinition |
PropertyType |
Mandatory |
|
HasProperty |
Variable |
YAxisDefinition |
PropertyType |
Mandatory |
Engineering units and range for the Value are defined by corresponding Properties inherited from the ArrayItemType.
The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.
The ArrayDimensions Attribute for Variables of this type or subtypes shall use the first entry in the array ([0]) to define the number of columns and the second entry ([1]) to define the number of rows, assuming the size of the matrix is not dynamic.
XAxisDefinition Property holds the information about the engineering units and range for the X-Axis.
YAxisDefinition Property holds the information about the engineering units and range for the Y-Axis.
The StatusCode.SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title, XAxisDefinition or YAxisDefinition Properties are changed.
CubeItemType represents a cube of values like a spatial particle distribution, where the particle position is given by X which is the column, Y the row and Z the depth. In the example of a spatial partical distribution, the value is the particle size. CubeItemType is formally defined in Table 12.
Table 12 – CubeItemType definition
Attribute |
Value |
||||
BrowseName |
CubeItemType |
||||
IsAbstract |
False |
||||
ValueRank |
3 (3 = three dimensional array) |
||||
DataType |
BaseDataType |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the ArrayItemType defined in 5.3.4.1 |
|||||
|
|
|
|
|
|
HasProperty |
Variable |
XAxisDefinition |
PropertyType |
Mandatory |
|
HasProperty |
Variable |
YAxisDefinition |
PropertyType |
Mandatory |
|
HasProperty |
Variable |
ZAxisDefinition |
PropertyType |
Mandatory |
Engineering units and range for the Value are defined by corresponding Properties inherited from the ArrayItemType.
The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.
The ArrayDimensions Attribute for Variables of this type or subtypes should use the first entry in the array ([0]) to define the number of columns, the second entry ([1]) to define the number of rows, and the third entry ([2]) define the number of steps in the Z axis, assuming the size of the matrix is not dynamic.
XAxisDefinition Property holds the information about the engineering units and range for the X-Axis.
YAxisDefinition Property holds the information about the engineering units and range for the Y-Axis.
ZAxisDefinition Property holds the information about the engineering units and range for the Z-Axis.
The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title, XAxisDefinition, YAxisDefinition or ZAxisDefinition Properties are changed (see 5.2 for additional information).
This VariableType defines a generic multi-dimensional ArrayItem.
This approach minimizes the number of types however it may be proved more difficult to utilize for control system interactions.
NDimensionArrayItemType is formally defined in Table 13.
Table 13 – NDimensionArrayItemType definition
Attribute |
Value |
||||
BrowseName |
NdimensionArrayItemType |
||||
IsAbstract |
False |
||||
ValueRank |
0 (0 = OneOrMoreDimensions) |
||||
DataType |
BaseDataType |
||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
ModellingRule |
Subtype of the ArrayItemType defined in 5.3.4.1 |
|||||
|
|
|
|
|
|
HasProperty |
Variable |
AxisDefinition |
AxisInformation [] |
PropertyType |
Mandatory |
The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.
AxisDefinition Property holds the information about the Engineering Units and Range for all axis.
The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title or AxisDefinition Properties are changed (see 5.2 for additional information).