移动操作的通用规则在执行“不可中断的存储区移动”指令期间,源区域和目标区域不可以重叠。如果源区域小于目标区域,则将整个源区域的数据都写入到目标区域中。而目标区域的其余字节则保持不 变。如果目标区域小于源区域,将写满整个目标区域。而忽略源区域的剩余字节。 如果定义为形参的源区域或目标区域比 SRCBLK 或DSTBLK 参数中所指定的源区域或目标区 域小,则不传送任何数据。 如果移动 BOOL 数据类型的块,则指定的块长度必须能被 8整除,否则无法执行该指令。 可以使用“不可中断的存储区移动”指令Zui多移动 512 个字节。注意:CPU 对此有特定限制。 说明如果实际的源或目标区域小于 SRCBLK 或 DSTBLK 参数上指定的目标或源区域,则系统行为 将取决于正在使用的 CPU 类型:• 以下情况适用于 S7-300 CPU: 不进行数据传输。并在参数 RET_VAL 中输出错误代码W#16#837F。在用户程序中必须 评估该错误代码。 • 以下情况适用于 S7-400 V4-CPU(V4、V4 H-CPU 和V4.5 H CPU): 不进行数据传输。并在参数 RET_VAL 中输出错误代码 W#16#8122 或 W#16#8323。在用户程序中必须评估该错误代码。 • 对于其它型号的所有 S7-400-CPU: 进行数据传输。并在参数 RET_VAL 中输出错误代码W#16#8122 或 W#16#8323。在用 户程序中必须评估该错误代码。 移动字符串的规则还可以使用“不可中断的存储区移动”指令移动 STRING 数据类型的源和目标区域。如果只 有源区域为 STRING数据类型,则移动字符串中实际包含的字符。而不会将关于实际长度和 Zui大长度的信息写入目标区域中。如果源和目标区域都是 STRING数据类型,则将目标区域 中字符串的当前长度设置为实际移动的字符数。如果要移动 STRING 数据类型的区域,则必须将区域长度指定为“1”。
下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 SRCBLK Input ANYI、Q、M、D、 L、P 指定待移动的存储区(源 区域)。 RET_VAL Output INT I、Q、M、D、 L、P 错误信息:如果在该指令执行期间出 错,则在参数 RET_VAL 中 输出一个错误代码。 DSTBLK Output 1) ANYI、Q、M、D、 L、P 指定要将块移动到的存储 区(目标区域)。 1) 参数 DSTBLK 声明为Output,但在块接口中必须声明为 InOut。FILL:填充块 (S7-300, S7-400) 说明可以使用“填充块”指令将一个存储区(源区域)的数据填充到另一存储区(目标区域)。“填充块”指令将源区域的数据移动到目标区域,直到目标区域写满为止。移动操作沿地址 升序方向执行。 可使用 ANY指针定义源区域和目标区域。 说明 在该指令中,只能使用适用于 S7-300/400 系列 CPU 的数据类型。下图说明了移动操作的原理:示例:使用存储器字 MW14 到 MW20 中的内容预设置 MW100 到 MW118 中的内容。源和目标数据的一致性 请确保在执行“填充块”指令期间源数据保持不变,否则无法保证目标数据的一致性。 存储区可使用“填充块”指令移动以下存储区的数据: • 数据块区域 • 位存储区 • 过程映像输入 • 过程映像输出 移动操作的通用规则源区域和目标区域不得重叠。如果要预设的目标区域不是输入参数 BVAL 长度的整数倍,目 标区域仍然可写至Zui后一个字节。如果要预置的目标区域小于源区域,此功能仅复制可以写入目标区域的数据量。 如果实际的目标或源区域小于源或目标区域分配的存储区(参数BVAL 和 BLK),则不传输 任何数据。如果 ANY 指针(源或目标)为 BOOL 数据类型,则为该区域指定的长度必须为 8的倍数,否 则不执行该指令。 如果目标区域为 STRING 数据类型,则指令将写入包含管理信息在内的整个字符串。 说明如果实际的源或目标区域小于 BVAL 或 BLK 参数上指定的目标或源区域,则系统行为将取决 于正在使用的 CPU 类型: •以下情况适用于 S7-300 CPU: 不进行数据传输。并在参数 RET_VAL 中输出错误代码W#16#837F。在用户程序中必须 评估该错误代码。 • 以下情况适用于 S7-400 V4-CPU(V4、V4 H-CPU 和V4.5 H CPU): 不进行数据传输。并在参数 RET_VAL 中输出错误代码 W#16#8122 或 W#16#8323。在用户程序中必须评估该错误代码。 • 对于其它型号的所有 S7-400-CPU: 进行数据传输。并在参数 RET_VAL 中输出错误代码W#16#8122 或 W#16#8323。在用 户程序中必须评估该错误代码。 移动结构的规则当将结构作为输入参数传送时,必须谨记结构的长度应始终为偶数个字节。如果声明一个具有奇数个字节的结构,此结构还需要另一个字节的存储空间。 参数 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 BVALInput ANY I、Q、M、D、 L、P 指定存储区域(源区 域),将使用该存储区域 中的内容填充 BLK 参数中指定的目标区域。 RET_VAL Output INT I、Q、M、D、 L、P 错误信息: 如果在该指令执行期间出 错,则在参数RET_VAL 中 输出一个错误代码。 BLK Output 1) ANY I、Q、M、D、 L、P 指定要使用源区域的数据填充的存储区。 1) 参数 BLK 声明为 Output,但在块接口中必须声明为 InOut。转换操作 (S7-300,S7-400) CONVERT:转换值 (S7-300, S7-400) 说明可以使用“转换值”指令读取操作数的内容,并根据分配的数据类型进行转换。 有关可能的转换的信息,请参见“另请参见”中的“显式转换”部分。如果在处理过程中出现错误(例如溢出),结果值将无效。 参数 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明<操作数> Input 整数、浮点数、 BCD16、BCD32 I、Q、M、D、 L、P 或常数 要转换的值<结果> Output 整数、浮点数、 BCD16、BCD32 I、Q、M、D、 L、P 转换结果可以从“???”下拉列表中选择该指令的数据类型。 有关有效数据类型的更多信息,请参见“另请参见”。ROUND:取整 (S7-300,S7-400) 说明 可以使用“取整”指令将操作数的值取整为Zui接近的整数。该指令将该值解释为浮点数,并 转换为一个 DINT数据类型的整数。如果输入值恰好是在一个偶数和一个奇数之间,则选择 偶数。 如果在处理过程中出现错误(例如溢出),结果值将无效。 参数下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 <操作数> Input 浮点数 I、Q、M、D、 L、P或常数 要取整的输入值 <结果> Output DINT I、Q、M、D、 L、P 取整的结果有关有效数据类型的更多信息,请参见“另请参见”。CEIL:浮点数向上取整 (S7-300, S7-400) 说明可以使用“浮点数向上取整”指令将操作数值向上取整为相邻整数。该指令将该值解释为浮点数,并向上转换为与其相近的整数。该指令的结果通常大于或等于输入值。 如果在处理过程中出现错误(例如溢出),结果值将无效。 参数下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 <操作数> Input 浮点数 I、Q、M、D、 L、P或常数 输入值 <结果> Output 整数、浮点数 I、Q、M、D、 L、P 结果为相邻的较大整数有关有效数据类型的更多信息,请参见“另请参见”。FLOOR:浮点数向下取整 (S7-300, S7-400) 说明可以使用“浮点数向下取整”指令将操作数值向下取整为相邻整数。该指令将该值解释为浮点数,并向下转换为与其相近的整数。该指令的结果通常小于或等于输入值。 如果在处理过程中出现错误(例如溢出),结果值将无效。 参数下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 <操作数> Input 浮点数 I、Q、M、D、 L、P或常数 输入值 <结果> Output 整数、浮点数 I、Q、M、D、 L、P 结果为相邻的较小整数有关有效数据类型的更多信息,请参见“另请参见”。TRUNC:截尾取整 (S7-300, S7-400) 说明可以使用“截尾取整”指令由操作数值得出整数。该值将解释为一个浮点数。该指令仅选择浮点数的整数部分,并将该整数(不带小数位)输出为结果。 如果在处理过程中出现错误(例如溢出),结果值将无效。 参数下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 <操作数> Input 浮点数 I、Q、M、D、L 或常数输入值 <结果> Output 整数 I、Q、M、D、L 输入值的整数部分有关有效数据类型的更多信息,请参见“另请参见”。SCALE:缩放 (S7-300, S7-400) 说明 可以使用“缩放”指令将参数IN 中的整数转换为浮点数,该浮点数可在上限和下限之间以 物理单位为增量进行缩放。通过参数 LO_LIM 和 HI_LIM来指定缩放输入值取值范围的下限 和上限。指令的结果在参数 OUT 中输出。 “缩放”指令将按以下公式进行计算: OUT =[((FLOAT (IN) – K1)/(K2–K1)) ∗ (HI_LIM–LO_LIM)] + LO_LIM常数“K1”和“K2”的值取决于参数 BIPOLAR 的信号状态。参数 BIPOLAR 可能有下列信号状态: •信号状态“1”:假设参数 IN 的值为双极性且取值范围是 -27648 到 27648。此时,常数“K1”的值为“-27648.0”,而常数“K2”的值为“+27648.0”。 • 信号状态“0”:假设参数 IN 的值为单极性且取值范围是0 到 27648。此时,常数“K1”的值为 “0.0”,而常数“K2”的值为“+27648.0”。 如果参数 IN的值大于常数“K2”的值,则将指令的结果设置为上限值 (HI_LIM) 并输出一个错误。