The DataSetWriterId with DataType UInt16 defines the unique ID of the DataSetWriter for a PublishedDataSet. It is used to select DataSetMessages for a PublishedDataSet on the Subscriber side.
It shall be unique across all DataSetWriters for a PublisherId.
All values, except for 0, are valid DataSetWriterIds. The value 0 is defined as null value.
The DataSetWriterId shall be within the range 0x0001 - 0x7FFF for external assignment by configuration tools, and 0x8000 - 0xFFFF for internal assignment like through the Method CloseAndUpdate of the PubSubConfigurationType.
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 24.
The handling of bad status for different field representations is defined in Figure 23 and Table 26.
Table 24 – 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 flags are set, the fields are represented as Variant. If the RawData flag is set, the fields are represented as RawData and all other bits are ignored. 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 flag is set, the fields are represented as DataValue. |
SourceTimestamp |
1 |
The DataValue structure field SourceTimestamp is included in the DataSetMessages. If this flag is set, the fields are represented as DataValue. |
ServerTimestamp |
2 |
The DataValue structure field ServerTimestamp is included in the DataSetMessages. If this flag is set, the fields are represented as DataValue. |
SourcePicoSeconds |
3 |
The DataValue structure field SourcePicoSeconds is included in the DataSetMessages. If this flag is set, the fields are represented as DataValue. This flag is ignored if the SourceTimestamp flag is not set. |
ServerPicoSeconds |
4 |
The DataValue structure field ServerPicoSeconds is included in the DataSetMessages. If this flag is set, the fields are represented as DataValue. This flag is ignored if the ServerTimestamp flag is not set. |
RawData |
5 |
If this flag is set, 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 flags shall be ignored if this flag is set. |
The DataSetFieldContentMask representation in the AddressSpace is defined in Table 25.
Table 25 – 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 23 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.
Figure 23 – 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 26. The representation on the Publisher side depends on the field representation defined in the DataSetFieldContentMask.
Table 26 – 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. |
The KeyFrameCount with DataType UInt32 is the multiplier of the PublishingInterval that defines the maximum number of times the PublishingInterval expires before a key frame message with values for all published Variables is sent. The delta frame DataSetMessages contains just the changed values. If no changes exist, the delta frame DataSetMessage shall not be sent. If the KeyFrameCount is set to 1, every message contains a key frame.
For PublishedDataSets that provide cyclic updates of the DataSet, the value shall be greater than or equal to 1. PublishedDataItems or custom sources with CyclicDataSet set to true provide cyclic updates.
For non-cyclic PublishedDataSets that provide acyclic event based DataSets, the value shall be 0. PublishedEvents or custom sources with CyclicDataSet set to false provide acyclic updates.
For a heartbeat DataSetMessage, the value shall be 1.
The DataSetWriterProperties parameter is an array of DataType KeyValuePair that specifies additional properties for the configured DataSetWriter. The KeyValuePair DataType is defined in OPC 10000-5 and consists of a QualifiedName and a value of BaseDataType.
The mapping of the name and value to concrete functionality may be defined by transport protocol mappings, future versions of this document or vendor-specific extensions.
This Structure DataType is used to represent the DataSetWriter parameters. The DataSetWriterDataType is formally defined in Table 27.
Table 27 – DataSetWriterDataType structure
Name |
Type |
Description |
Allow Subtypes |
DataSetWriterDataType |
Structure |
|
|
Name |
String |
The name of the DataSetWriter. The name shall be unique across the WriterGroup. It is recommended to use a human readable name. |
|
Enabled |
Boolean |
The enabled state of the DataSetWriter. |
|
DataSetWriterId |
UInt16 |
Defined in 6.2.4.1. |
|
DataSetFieldContentMask |
DataSetFieldContentMask |
Defined in 6.2.4.2. |
|
KeyFrameCount |
UInt32 |
Defined in 6.2.4.3. |
|
DataSetName |
String |
The name of the corresponding PublishedDataSet. If the DataSetWriter is used to create heartbeat DataSetMessages, the dataSetName shall be null or empty. |
|
DataSetWriterProperties |
KeyValuePair[] |
Defined in 6.2.4.4. |
|
TransportSettings |
DataSetWriterTransportDataType |
Transport mapping specific DataSetWriter parameters. The abstract base type is defined in 6.2.4.5.2. The concrete subtypes are defined in the subclauses for transport mapping specific parameters. If no concrete subtype is defined for the transport mapping, the field shall be null. |
True |
MessageSettings |
DataSetWriterMessageDataType |
DataSetMessage mapping specific DataSetWriter parameters. The abstract base type is defined in 6.2.4.5.3. The concrete subtypes are defined in the subclauses for message mapping specific parameters. If no concrete subtype is defined for the message mapping, the field shall be null. |
True |
Its representation in the AddressSpace is defined in Table 28.
Table 28 – DataSetWriterDataType definition
Attributes |
Value |
BrowseName |
DataSetWriterDataType |
IsAbstract |
False |
Subtype of Structure defined in OPC 10000-5. |
|
Conformance Units |
|
PubSub Parameters Discovery |
This Structure DataType is an abstract base type for transport mapping specific DataSetWriter parameters. The abstract DataType does not define fields.
The DataSetWriterTransportDataType Structure representation in the AddressSpace is defined in Table 29.
Table 29 – DataSetWriterTransportDataType definition
Attributes |
Value |
BrowseName |
DataSetWriterTransportDataType |
IsAbstract |
True |
Subtype of Structure defined in OPC 10000-5. |
|
Conformance Units |
|
PubSub Parameters Discovery |
This Structure DataType is an abstract base type for message mapping specific DataSetWriter parameters. The abstract DataType does not define fields.
The DataSetWriterMessageDataType Structure representation in the AddressSpace is defined in Table 30.
Table 30 – DataSetWriterMessageDataType definition
Attributes |
Value |
BrowseName |
DataSetWriterMessageDataType |
IsAbstract |
True |
Subtype of Structure defined in OPC 10000-5. |
|
Conformance Units |
|
PubSub Parameters Discovery |