MoveResolvedSymbolsToBuffer:从已解析的符号中读取值并写入缓冲区中 (S7-1500) 说明 “从已解析的符号中读取值并写入缓冲区中”指令用于从多个已解析的符号中读取数值并写 入存储区 (Array of BYTE) 中。采用这种方式,可准备符号解析后的相应值,进行后续处理。 如,通过诸如 TSEND 等通信指令进行发送。 "src" 参数是一个 ResolvedSymbol (SDT) 数组,其中包含对之前通过“ResolveSymbols”指令解 析的变量的引用。在“dst”参数中指定一个 BYTE 数组。该数组用作写入变量值的目标缓冲区。 这两个数组的限值需相同。 使用参数 "firstIndex" 和 "lastIndex" 限制将在此次指令调用过程中复制的值列表。在后续的 调用过程中,可复制其它已解析符号的值。如果不希望对列表进行限制,则 "firstIndex" 参 数中的值必须等于该列表的下限且 "lastIndex" 参数中的值需等于该列表的上限。 "mode" 参数的值用于定义 "dst" 参数中的存储器格式。 可通过偏移量确定目标缓冲区中已解析的符号值的存储位置。通过“dstOffsets”(Array of DINT) 参数指定偏移量。每个偏移量均为位偏移,用于确定将值写入缓冲区时的起始位。可在一个 字节中存储多个 BOOL 数据类型的值。其它所有数据类型的值的起始位位置必须可被 8 整除。 例如,如果 "src[i]" 参数引用一个数据类型为 REAL 的变量,同时"dstOffsets[i]"参数中的值为 88,"mode" 参数值为 2#1,则“从已解析的符号中读取值并写入缓冲区中”指令会将值复 制到字节 11 到 14 中(从Zui低有效字节开始)。 例如,如果 "src[i]" 参数引用一个数据类型为 BOOL 的变量,同时 "dstOffsets[i]" 参数中的值 为 29,则“从已解析的符号中读取值并写入缓冲区中”指令会将该值复制到字节为 3 并且 偏移量为 5 的目标存储器。 为确保 "dstOffsets[i]" 中包含有 "src[i]" 的偏移量,"dstOffsets" 和 "src" 处的数组限值必须相 同。 这样,可准确定义目标缓冲区的结构。但请注意,该指令不会验证所指定的偏移量是否重叠。 此时,不会发送错误消息,而且目标缓冲区中的内容不确定。 目标缓冲区中的内容同样取决于这是值从优化存储器中读取,或是从非优化存储器中。这两 个存储区对字节填充的规则不同。有关字节填充的更多信息,请参见“另请参见”。 "status" 参数是一个 INT 数组。为确保 "status[i]" 中包含有 "src[i]" 的状态,该参数的限值必 须与 "src" 和 "dstOffsets" 参数的相同。
对于 WSTRING 和 STRING,将复制源字符串的当前长度。如果源字符串比目标字符串短,则 目标字符串中的其余字符保持不变。 说明 SDT“ResolvedSymbol”中的引用无效 如果在 RUN 模式下因加载导致被引用的变量覆盖,则 SDT "ResolvedSymbol" 中的引用可能 变为无效。引用可能指向不存在的变量。“status”参数中的错误代码指示引用无效。 此时,需使用“ResolveSymbols”指令对该符号进行重新解析。 参数 下表列出了“从已解析的符号中读取值并写入缓冲区中”指令的参数: 参数 声明 数据类型 存储区 说明 firstIndex Input DINT I、Q、M、D、 L、C 待复制的第一个 已解析符号的下 标。 lastIndex Input DINT I、Q、M、D、 L、C 待复制的Zui后一 个已解析符号的 下标。 src Input Array of ResolvedSymbol D、L 已解析的符号列 表 dstOffsets Input Array of DINT I、Q、M、D、L 包含目标缓冲区 中各元素的位偏 移量 mode Input DWORD I、Q、M、D、 L、C 存储器格式: • 2#0 = BigEndian • 2#1 = LittleEndian dst InOut Array of BYTE D、L 要将已解析符号 复制到的目标缓 冲区数组“Input_ResolvedSymbols”中已解析的符号值将以 Big-Endian 格式写入 "dst" 参数的目标 缓冲区 "#InOut_Buffer" 内。 使用 "firstIndex" 和 "lastIndex" 参数中的两个常量,可限制需复制其值的变量数。 “Input_Offset”操作数中包含各个待写入值的偏移量。根据该偏移量,可确定在目标缓冲区中 写入已解析符号值的位置。MoveResolvedSymbolsFromBuffer:从缓冲区中读取值并写入已解析的符号中 (S7-1500) 说明 “从缓冲区中读取值并写入已解析的符号中”指令用于从存储区 (Array of BYTE) 中读取数值 并写入多个已解析的符号值中。采用这种方式,可处理从通信指令(如 TRCV)接收到的存 储区。 "src" 参数是一个 BYTE 数组,用作读取数值的源缓冲区。"dst" 参数是一个 ResolvedSymbol (SDT) 数组,其中包含对之前通过“ResolveSymbols”指令解析的变量的引用。通过使用引用, 将为变量写入来自源缓冲区的值。 通过使用 "firstIndex" 和 "lastIndex" 参数,限制选择已解析符号列表中需写入值的变量。如 果不希望对列表进行限制,则 "firstIndex" 参数中的值必须等于该列表的下限且 "lastIndex" 参 数中的值需等于该列表的上限。 "mode" 参数的值用于定义 "src" 参数中的存储器格式。 可通过偏移量确定在源缓冲区中读取和复制已解析符号值的起始位置。通过 “srcOffsets”(Array of DINT) 参数指定偏移量。每个偏移量均为位偏移,用于确定从缓冲区读取值的起始位。可在一个字节中存储多个 BOOL 数据类型的值。其它所有数据类型的值的起 始位位置必须可被 8 整除。 例如,如果 "dst[i]" 参数引用一个数据类型为 REAL 的变量、"srcOffsets[i]" 参数中的值为 88, 同时 "mode" 参数值为 2#1,则该指令将读取“字节 11 到 14 中的值(从Zui低有效字节开 始)。 例如,如果 "src[i]" 参数引用一个数据类型为 BOOL 的变量,同时 "srcOffsets[i]" 参数中的值 为 29,则该指令将读取源缓冲区字节 3 中的值(偏移量 5)。 为确保 "srcOffsets[i]" 中包含有 "dst[i]" 的偏移量,"srcOffsets" 和 "dst" 处的数组限值必须相 同。 这样,可精准指定目标缓冲区中待复制的值。但请注意,该指令不会验证所指定的偏移量是 否重叠。此时,不会发送错误消息,而且可能随机读取值。 "status" 参数是一个 INT 数组。为确保 "status[i]" 中包含有 "dst[i]" 的状态,该参数的限值必 须与 "dst" 和 "srcOffsets" 参数的相同。 对于 WSTRING 和 STRING,将复制源字符串的当前长度。如果源字符串比目标字符串长,则 不复制源字符串的其余字符。 说明 SDT“ResolvedSymbol”中的引用无效 如果在 RUN 模式下因加载导致被引用的变量覆盖,则 SDT "ResolvedSymbol" 中的引用可能 变为无效。引用可能指向不存在的变量。“status”参数中的错误代码指示引用无效。 此时,需使用“ResolveSymbols”指令对该符号进行重新解析。参数 下表列出了“从缓冲区中读取值并写入已解析的符号中”指令的参数: 参数 声明 数据类型 存储区 说明 firstIndex Input DINT I、Q、M、D、 L、C 目标缓冲区中待 写入的第一个已 解析符号的下 标。 lastIndex Input DINT I、Q、M、D、 L、C 目标缓冲区中待 写入的Zui后一个 已解析符号的下 标。 mode Input DWORD I、Q、M、D、 L、C 存储器格式 • 2#0 = BigEndian • 2#1 = LittleEndian src Input Array of BYTE D、L 读取数值的源缓 冲区 srcOffsets Input Array of DINT D、L 源缓冲区中数值 的偏移量 dst InOut Array of ResolvedSymbol D、L 包含对已解析符 号的引用的目标 缓冲区。 status InOut Array of INT D、L 包含各个待写入 值的复制状态 函数值 (RET_VAL) INT I、Q、M、D、L 错误信息 有关 SDT 的更多信息,请参见“系统数据类型 ResolvedSymbol ”。源缓冲区“Input_Buffer”中的变量值以 Big-Endian 格式读取,并通过 "#InOut_ResolvedSymbols" 中的引用写入到已解析符号中。 若操作数“TagIn”的信号状态为“1”,则执行该指令。源缓冲区“Input_Buffer”中的变量值以 BigEndian 格式读取,并通过 "#InOut_ResolvedSymbols" 中的引用写入到已解析符号中。传统 (S7-1500) BLKMOV:块移动 (S7-1500) 说明 可以使用“块移动”指令将一个存储区(源区域)的数据移动到另一个存储区(目标区域) 中。移动操作沿地址升序方向执行。可使用 VARIANT 来定义源区域和目标区域。 说明 该指令的变量仅适用于未激活“优化块访问”属性的存储区中。适用于数据块 (DB)、组织块 (OB)、函数 (FC)、位存储器 (M)、输入 (I) 和输出 (Q)。 如果指令的变量已通过保持性设置“在 IDB 中设置”进行声明,则可在具有“优化块访问” 的存储区中使用该变量。