编码二进制缓冲区

Encode 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(映射变量名称)- 映射变量的名称,将在 Input(输入)选项卡上添加为一行。
  • 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 - 第一个字节为完整字符串长度,第二个字节为当前字符串长度,后接字符串数据。
    • 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" } } { "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(二进制缓冲区) 指定源二进制缓冲区。在单个源变量编码(写入)之前,此源二进制缓冲区将复制到内部缓冲区。
Offset(偏移量) 除每个变量的偏移量值之外还使用的可选偏移量。
例如,当需要考虑目标缓冲区中的可变长度标头时,可以使用此方法。
Input map variables(输入映射变量) JSON 变量描述中标识的映射变量。
JSON 变量描述中的每个变量都将在 Input(输入)选项卡中添加为映射变量行。
Value(值)列中,指定源变量。该变量可以是常量、触发器宏、事件变量、触发器变量或设备变量。

输出选项卡

参数 描述
Binary Buffer(二进制缓冲区) 指定存储编码二进制缓冲区动作结果的目标二进制缓冲区。
编码二进制缓冲区动作的结果可从源二进制缓冲区的内部副本复制到目标二进制缓冲区。
如果要直接使用指定的变量值更新源二进制缓冲区,应将 Output(输出)选项卡的 Binary Buffer(二进制缓冲区)参数设置为与 Input(输入)选项卡 Binary Buffer(二进制缓冲区)参数相同的变量。

编码二进制缓冲区示例

此示例显示了变量的 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" } }

Related Topics Link IconRelated Topics