OPC UA Binary Data Encoding
这个 OPC UA Binary Data Encoding 是一种数据格式,专为满足 OPC UA 应用程序的性能要求而开发。这种格式主要是为快速编码和解码而设计的,因此还考虑了线路上编码数据的大小
OPC UA 二进制数据编码基于几种原始数据类型,具有明确定义的编码规则,可以按顺序写入二进制流或从二进制流读取。
通过顺序写入每个字段的编码形式来对结构进行编码。如果特定字段也是一个结构,则在下一个字段写入包含结构之前,其字段的值将按顺序写入
必须将所有字段写入数据流,即使它们包含零值。每种原始类型的编码表示如何对该类型的零值或默认值进行编码
OPC UA 二进制数据编码不包含任何类型或字段名称信息,因为所有 OPC UA 应用程序都需要事先知道它们支持哪些服务和结构。
[P6] 5.2.1:
“条款 OPC UA Binary Data Encoding 和 Raw Data Field Encoding 具有相同的含义,并根据引用的来源进行相应的使用。
| IEC 61131-3 | [P6] 5.2.1 | OPC 美国 | 参考文献 | |
|---|---|---|---|---|
| 
 | 布尔值 | 1 | 
 | [P6] 5.2.2.1 | 
| 
 | 字节 | 3 | 
 | |
| 
 | 单字节字符 | 3 | 
 | |
| 
 | 日期(仅限) | 13 | 
 | |
| 
 | 双整数 | 6 | 
 | |
| 
 | 一天中的日期和时间 [s] | 13 | 
 | [P6] 5.2.2.5 | 
| 
 | 长度为 32 的位串 | 7 | 
 | |
| 
 | 整数 | 4 | 
 | [P6] 5.2.2.1 | 
| 
 | 长日期 [ns] | 8 | 
 | |
| 
 | 一天中的日期和时间 [ns] | 8 | 
 | |
| 
 | 长整数 | 8 | 
 | |
| 
 | 长浮点数 | 11 | 
 | |
| 
 | 持续时间 [ns] | 8 | 
 | |
| 
 | 一天中的时间 [ns] | 8 | 
 | |
| 
 | 长度为 64 的位串 | 9 | 
 | |
| 
 | 浮点数 | 10 | 
 | [P6] 5.2.2.3 | 
| 
 | 短整数 | 2 | 
 | |
| 
 | 编码:Windows-1252 | 12 | 
 | [P6] 5.2.2.4 | 
| 
 | 持续时间 [ms] | 8 | 
 | |
| 
 | 一天中的时间 [ms] | 7 | 
 | |
| 
 | 19 | 
 | [P6] 5.2.2.11 | |
| 
 | 
 | [P4] 7.38 | ||
| 
 | 无符号双整数 | 7 | 
 | |
| 
 | 无符号整数 | 5 | 
 | |
| 
 | 无符号 Iong 整数 | 9 | 
 | |
| 
 | 无符号短整数 | 3 | 
 | |
| 
 | 双字节字符 | 5 | 
 | |
| 
 | 长度为 16 的位串 | 5 | 
 | |
| 
 | 编码:UCS-2 | 12 | 
 | 
字符串
由于 OPC UA 字符串的 UTF 8 编码,无法事先确定其长度。这取决于所使用的字符。因此,定义时必须指定最大长度 DataSetField 这种数据类型。剩余空间用 0 值字节填充。字符串的最大长度 (maxStringLength) 在 [P14] 6.2.2.1.3 中进行了描述 FieldMetaData。
StatusCode
变量 StatusCode 被编码为 UInt32。
VersionTime
变量 VersionTime 被编码为 UInt32。它以秒为单位显示了自 2000 年以来的时间。纪元日期是世界标准时间 2000 年 1 月 1 日午夜(00:00)。它用作基于上次修改时间的版本号。如果版本已更新,则新值必须大于先前的值。值 0 用于表示没有可用的版本信息。