A DataSet field consists of a value and related metadata. In most cases the value comes with status and timestamp information.

This DataType defines flags to include DataSet field related information like status and timestamp in addition to the value in the DataSetMessage. The parameter is not relevant for heartbeat messages but should be configured according to the header layout requirements.

The DataSetFieldContentMask is formally defined in Table 32.

The handling of bad status for different field representations is defined in Figure 24, Table 34 and Table 35.

Table 32 – DataSetFieldContentMask Values

Value

Bit No.

Description

DataSet fields can be represented as RawData, Variant or DataValue as described in 5.3.2.

If none of the bits are set, the fields are represented as Variant.

If the RawData bit is set for UADP message mapping, the fields are represented as RawData and all other bits are ignored. For JSON message mapping the bit is used as an option in VerboseEncoding.

If one of the bits 0 to 4 is set, the fields are represented as DataValue.

StatusCode

0

The DataValue structure field StatusCode is included in the DataSetMessages.

If this bit is set, the fields are represented as DataValue.

SourceTimestamp

1

The DataValue structure field SourceTimestamp is included in the DataSetMessages.

If this bit is set, the fields are represented as DataValue.

ServerTimestamp

2

The DataValue structure field ServerTimestamp is included in the DataSetMessages.

If this bit is set, the fields are represented as DataValue.

SourcePicoSeconds

3

The DataValue structure field SourcePicoSeconds is included in the DataSetMessages.

If this bit is set, the fields are represented as DataValue. This bit is ignored if the SourceTimestamp bit is not set.

ServerPicoSeconds

4

The DataValue structure field ServerPicoSeconds is included in the DataSetMessages.

If this bit is set, the fields are represented as DataValue. This bit is ignored if the ServerTimestamp bit is not set.

RawData

5

If this bit is set for UADP message mapping, the fields of the DataSet are encoded without additional information like timestamp, status or DataType information. The details of the representation are defined for the message mappings.All other field related bits shall be ignored if this bit is set..

If this bit is set for JSON message mapping, it is used as an option in VerboseEncoding and it can be combined with the other bits.

The DataSetFieldContentMask representation in the AddressSpace is defined in Table 33.

Table 33 – DataSetFieldContentMask definition

Attribute

Value

BrowseName

DataSetFieldContentMask

IsAbstract

False

References

Node Class

BrowseName

DataType

TypeDefinition

Others

Subtype of UInt32 defined in OPC 10000-5

HasProperty

Variable

OptionSetValues

LocalizedText []

PropertyType

Conformance Units

PubSub Parameters Discovery

The DataSetFieldContentMask defines different options that influence the information flow from Publisher to Subscriber in the case of a Bad Value Status or other error situations. Figure 24 depicts the parameters and the information flow from DataSet field to DataSetMessage creation on the Publisher side and the decoded DataSet field on the Subscriber side. The DataSetFieldContentMask controls the representation of the DataSet fields in a DataSetMessage.

image027.png

Figure 24 – PubSub information flow dependency to field representation

The representation of the DataSet fields in a DataSetMessage on the Publisher side and the decoding back to the DataSet fields on the Subscriber side is defined in Table 34 for UADP message mapping and in Table 35 for JSON message mapping. The representation on the Publisher side depends on the field representation defined in the DataSetFieldContentMask.

Table 34 – UADP DataSetMessage field representation options

DataSet Publisher

Field

DataSetMessage

DataSet Subscriber

Value

Status(a)

Value

Value Status(a)

Header Status

Value

Status(a)

Value 1

Good_*

Variant

Value 1

N/A

Good

Value 1

Good

Value 1

Uncertain_*

Value 1

Uncertain_* (b)

Good

Value 1 (b)

Uncertain_* (b)

Null

Bad_*

Bad_* (c)

Good

Null

Bad_* (c)

Value 1

Good_*

DataValue

Value 1

Good_*

Good

Value 1

Good_*

Value 1

Uncertain_*

Value 1

Uncertain_*

Good

Value 1

Uncertain_*

Null

Bad_*

Null

Bad_*

Good

Null

Bad_*

Value 1

Good_*

RawData

Value 1

N/A

Good

Value 1

Good

Value 1

Uncertain_*

Value 1(d)

Uncertain (d)

Value 1

Uncertain

Null

Bad_*

Default value for DataType (e)

Uncertain_ SubNormal (e)

Default value for DataType

Uncertain_ SubNormal

All fields Bad_*

Default value for DataType (e)

Bad (e)

Null

Bad

The header status is set to a bad code in a fatal error situation.

Bad_*

Null

Bad_*

(a)If no specific StatusCode is used, the grouping into severity Good, Uncertain or Bad is used. In this case, the resulting Status matches the input Status.

(b)If the status is uncertain in variant encoding, the value and the status are encoded as DataValue.

(c)A bad status is transferred instead of a value for the variant encoding.

(d)If the status for one or more fields is uncertain in raw filed encoding, the header status shall be set to Uncertain.

(e)If the worst status for some fields is bad, the header status shall be set to Uncertain_SubNormal.

If the status for all fields is bad, the header status shall be set to Bad.The value in message is set to the default value for the DataType.

Table 35 – JSON DataSetMessage field representation options

DataSet Publisher

Field

DataSetMessage

DataSet Subscriber

Value

Status(a)

Value

Value Status(a)

Header Status

Value

Status(a)

Value 1

Good_*

Variant (d)

Value 1

N/A

Good

Value 1

Good

Value 1

Uncertain_*

Value 1

Uncertain (b)

Value 1

Uncertain (b)

Null

Bad_*

Bad_* (c)

Good

Null

Bad_* (c)

Value 1

Good_*

DataValue(d)

Value 1

Good_*

Good

Value 1

Good_*

Value 1

Uncertain_*

Value 1

Uncertain_*

Good

Value 1

Uncertain_*

Null

Bad_*

Null

Bad_*

Good

Null

Bad_*

The header status is set to a bad code in a fatal error situation.

Bad_*

Null

Bad_*

(a)If no specific StatusCode is used, the grouping into severity Good, Uncertain or Bad is used. In this case, the resulting Status matches the input Status.

(b)A uncertain status is ignored on the field level and results in a header status of Uncertain.

(c)A bad status is transferred instead of a value for the variant encoding.

(d)The RawData bit only affects the presence of UaType and UaTypeId.