解码二进制缓冲区

Decode Binary Buffer(解码二进制缓冲区)动作使用单个输入二进制缓冲区来检索数据值,然后将这些值写入多个输出变量。可以指定源二进制缓冲区变量、数据类型、输入缓冲区中的偏移量、计数、间隔、长度和特殊处理选项。

参数描述

此动作提供以下参数:

参数 描述
Rules Input Type(规则输入类型) 选项包括:
  • Manual(手动)- 用于指示将在 Rules in JSON(JSON 中的规则)参数中定义的要从二进制缓冲区解码的变量。
  • Staging File(暂存文件)- 用于指示将在 File(文件)参数中定义的要从二进制缓冲区解码的变量。
Rules in JSON(JSON 中的规则) Rules Input Type(规则输入类型)为 Manual(手动)时,此参数用于指定要从二进制缓冲区解码的变量的 JSON 描述。如示例所示,各变量指定方式如下:
  • Map variable name(映射变量名称)- 映射变量的名称,将在 Output(输出)选项卡上添加为一行。
  • offset(偏移量)- 二进制缓冲区中数据的起始位置。  此字段为必填字段。
  • type(类型)- 二进制缓冲区中源变量的类型。
    支持的类型包括:
    BOOL、INT1、INT2、INT4、INT8、UINT1、UINT2、UINT4、UINT8、FLOAT4、FLOAT8、STRING 和 BINARY。
    对于 Mitsubishi MESInterface IT 产品:
    BIT、BYTE、WORD、DWORD、LWORD、UBYTE、UWORD、UDWORD、ULWORD、REAL、LREAL、STRING 和 BINARY。
    此外还支持下方列出的特殊类型。
  • count(计数) - 变量元素的数量。为单个(标量)元素指定 1,或者为数组指定大于 1 的值。
  • interval(间隔)- 数组中每个元素的起始位置之间的距离。此字段仅在指定数组时使用。
    • 例如:如果偏移量为 30,间隔为 6,计数为 4,无论数据类型如何,都将以偏移量 30、36、42 和 48 从二进制缓冲区读取数据。
    • 如果未指定间隔或指定为零,距离将为元素长度。每个元素的起始位置紧随于上个元素结尾之后。
  • length(长度)- 数据的长度。仅当类型为 STRING 或 BINARY 时,才指定此变量。
  • swap(交换)- 用于指示在写入目标变量之前是否应交换数据字节序/词序的布尔型值。
  • special(特殊)- 数据类型的自定义处理:
    • melco.timestamp - 部分 Mitsubishi MELCO Laser 机型使用的 6 字节 BCD 时间表示形式。
    • rockwell.logix.string - 4 字节长度值,后接字符串数据。
    • rockwell.logix.INT4bool - 单字节或多字节整数,表示一个独立的布尔型值标签或一组独立的布尔型值标签。单个布尔型值存储在该字节中。bit_offset 值指示整数中的哪一位与布尔型值关联。这些项目可以分别作为布尔型数据类型写入。
    • rockwell.logix.packedbool- 以 4 字节整数形式表示的布尔型数组标签。布尔型值数组中的每个元素表示为 4 字节整数中的一位。必须保留该 4 字节整数,以维持 Rockwell PLC 上布尔型值数组表示形式的完整性。
    • siemens.string - 第一个字节为完整字符串长度,第二个字节为当前字符串长度,后接字符串数据。

    • string.end_of_buffer - 可变长度字符串,可从二进制缓冲区末端“offset”读取数据。“Type”必须为“STRING”或“BINARY”,“count”必须为 1,“length”必须为 0。

    • process.bit - 获取每个偏移量的特定位(“bit_offset”),从当前偏移量开始直至偏移量总数(“count”)。每个偏移量只能获取 1 位。下一个偏移量随后根据计数(以字节为单位)进行处理。
      • 允许的位偏移量范围为 0 - 7。每个偏移量只有 8 位需要处理。
      • 类型必须为“BOOL”(布尔型)。不使用间隔、长度和交换。
    • process.all.bits - 获取所有位,从当前偏移量的“bit_offset”开始直至总位数(“count”)。逐位连续处理位,并根据计数(以位为单位)在下一个偏移量中从 bit_offset 0 开始。

      • 允许的位偏移量范围为 0 - 7。从下一个字节增加要处理的偏移量。

      • 类型必须为“BOOL”(布尔型)。不使用间隔、长度和交换。

      使用自定义数据类型的示例:

      { "melco_timestamp_var" : {"offset":12, "type":"INT8", "count":1, "special":"melco.timestamp" } } { "rockwell_string_var" : {"offset":12, "type":"STRING", "count":1, "length":50, "special":"rockwell.logix.string" } } { "bool1" : {"offset":0, "count":1, "type":"BOOL", "bit_offset":0, "special":"rockwell.logix.INT4bool" }} { "bool2" : {"offset":0, "count":1, "type":"BOOL", "bit_offset":1, "special":"rockwell.logix.INT4bool" }} { "boolArray" : {"offset":0, "count":1, "type":"INT4", "special":"rockwell.logix.packedbool" }} { "siemens_string_var" : {"offset":12, "type":"STRING", "count":1, "length":50, "special":"siemens.string" } } { "end_of_buffer_var" : {"offset": 12, "type":"STRING", "count":1, "length":0 , "special":"string.end_of_buffer" } } { "process_bit_var" : {"offset":0, "type":"BOOL", "count":3, "bit_offset":1, "special":"process.bit" } } { "process_all_bits_var" : {"offset":3, "type":"BOOL", "count":10, "bit_offset":1, "special":"process.all.bits" } }

      多行输入图标 可用于显示 JSON 变量描述的较大输入区域。

File(文件) Rules Input Type(规则输入类型)为 Staging File(暂存文件)时,此参数用于在暂存浏览器区域中指定一个文件,其中包含要从二进制缓冲区解码的变量的 JSON 描述。
编辑触发器时将读取此文件。文件中变量描述的处理方式与 Rules in JSON(JSON 中的规则)参数相同。仅在编辑触发器时才读取该文件,因此对文件内容的更改不会影响已启动触发器的定义或函数。要更改触发器的函数,必须将触发器停止,对其进行编辑(读取文件)以做出任何必要的更改,然后重启。
Byte Order(字节顺列) 选项包括:
  • Little Endian(小端)- 将最低有效字节(“小端”)的值存储于最高地址的目标变量中。
  • Big Endian(大端)- 将最高有效字节(“大端”)的值存储于最低地址的目标变量中。

输入选项卡

参数 描述
Binary Buffer(二进制缓冲区) 指定源二进制缓冲区。
偏移量 除每个变量的偏移量值之外还使用的可选偏移量。
例如,当需要考虑源缓冲区中的可变长度标头时,可以使用此方法。

输出选项卡

参数 描述
Output map variables(输出映射变量) JSON 变量描述中标识的映射变量。
JSON 变量描述中的每个变量都将在 Output(输出)选项卡中添加为映射变量行。
Value(值)列中,指定目标变量。该变量可以是触发器变量或设备变量。

解码二进制缓冲区示例

此示例显示了变量的 JSON 描述以及从源二进制缓冲区读取时的数据位置。

{ "First" : {"offset":8, "type":"FLOAT4", "count":1 }, "Second" : {"offset": 12, "type":"STRING", "count":2, "length":4 }, "Third" : {"offset":30, "type":"INT4", "count":4, "interval":6 } }

使用 process.bit 和 process.all.bits 的解码二进制缓冲区示例

此示例显示了变量的 JSON 描述以及从源二进制缓冲区读取时的数据位置。

{ "First" : {"offset":0, "type":"BOOL", "count":3, "bit_offset":1, "special":"process.bit" }, "Second" : {"offset":2, "type":"BOOL", "count":10, "bit_offset":2, "special":"process.all.bits"} }