GET_ERR_ID:获取本地错误 ID (S7-1500) 说明 可以使用“获取本地错误 ID”指令查询块内发生的错误。该错误通常为访问错误。从上一次 执行该指令后如果在块执行过程中系统报告发生块执行错误,则将变量中所发生第一个错误 的错误 ID 存储在输出 RET_VAL 中。 RET_VAL 输出中只能指定 WORD 数据类型的操作数。如果块中存在多处错误,则在更正了 第一个错误后仅输出该指令中下一个错误的错误 ID。 说明 只有在存在错误信息时才能更改 RET_VAL 输出。可以通过以下方式在处理错误之后将输出 设置回“0”: • 在块接口的“Temp”部分声明变量。 • 在调用指令之前将变量重置为“0”。 如果存在错误信息,则只能设置“获取本地错误 ID”指令的输出。即使不满足其中的某个条件, 剩余的程序执行不受“获取本地错误 ID”指令的影响。 有关该指令的执行和其它故障排除方式的示例,请参见“另请参见”。 说明 “获取本地错误 ID”指令支持在块内进行本地错误处理。在将“获取本地错误 ID”指令插入块 的程序代码中时,如果发生错误,则将忽略任何预定义的系统响应。 错误处理方式 有关相应的错误处理方式概览,请参见:错误处理机制概览 (页 160) 有关包含多种错误处理方式的局部错误处理的详细示例,请参见:有关处理程序执行错误的 示例。
INIT_RD:初始化所有保留数据 (S7-1500) 说明 可以使用“初始化所有保留数据”指令同时复位所有数据块、位存储器以及 SIMATIC 定时器 和计数器中的保持性数据。由于该指令的执行时间超出程序周期的持续时间,因此只能在启 动 OB 中执行。参数 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 REQ Input BOOL I、Q、M、D、L 或常数 如果输入“REQ” 的信号状态为 “1”,将复位所有 保持性数据。 RET_VAL Output INT I、Q、M、D、L 错误信息: 如果在该指令执 行期间出错,则 在参数 RET_VAL 中输出一个错误 代码。 有关有效数据类型的更多信息,请参见“另请参见”。如果操作数“Tag_REQ”的信号状态为“1”,则执行该指令。将复位所有数据块、位存储器以及 SIMATIC 定时器和计数器中的全部保持性数据。WAIT:组态延时时间 (S7-1500) 说明 可使用“组态延时时间”指令,将程序的执行过程暂停一段特定的时间。在 WT 参数中以微 秒为单位指定该时间段。 可以组态的延时为 -32768 到 32767 微秒 (μs)。Zui短延时时间取决于 CPU 和该指令的执行 时间。 优先级更高的事件可中断该指令的执行且不返回任何错误信息。 说明 负延时时间 如果在参数 WT 中指定了一个负延时时间,则使能输出 ENO 或 RLO 和 BR 位将返回信号状态 FALSE。负延时时间不会对 CPU 造成影响。以下与使能输出 ENO 相关联的指令不在 LAD 或 FBD 中执行。 参数 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 WT Input INT I、Q、M、D、 L、P 或常量 延时时间的单位为微秒 (μs)影响既定延时时间的示例 在以下示例中,将显示各种情况下对“WAIT”延时时间的影响。 下图为各种场景的示意图:剩余时间 = 从既定延时时间结束(通过“WAIT”)到中断 OB 运行结束之间的时间 额外时间 = 从中断 OB 运行结束到既定延时时间结束(通过“WAIT”)之间的时间 案例 1: 在一个 OB1 中调用“WAIT”指令。“WAIT”指令可由较高优先级的 OB 或较高优先级的进程(如, System Threads)中断。但“WAIT”指令的延时时间既不会更改,也不会延时。 案例 2 和 3: OB1 中正在执行的程序将在延时 20 ms 后继续执行。延时时间可通过在 OB1 中调用“WAIT”指 令计算得出(参见在 OB1 中执行 WAIT)。在 20 ms 时间内,中断 OB 可运行自己的程序代码。 CPU 的发送时钟不会改变。案例 4: OB1 中正在执行的程序将在较高优先级执行完成后继续执行。即使 OB1 内 20 ms 延时时间 到期后,仍需等待较高优先级进程执行完成。CPU 的发送时钟将增加。 说明 系统或通信进程 (System Threads) 的执行顺序 系统线程的优先级通常为“15”。虽然存在优先级高于“26”的系统线程,但这些进程将导致 CPU 载荷降低。系统线程不在图中显示。字逻辑运算 (S7-1500) NOT (INV):取反 (S7-1500) 说明 可以使用“取反”指令对该操作数的各个位的信号状态取反。执行该指令时,该操作数的值 与一个十六进制掩码(表示 16 位数的 W#16#FFFF 或表示 32 位数的 DW#16#FFFF FFFF)进 行“异或”运算。这会将各个位的信号状态取反并输出为结果。SEL: 选择 (S7-1500) 说明 可以使用“选择”指令,根据开关(输入 G)的情况,选择输入 IN0 或 IN1 中的一个,并将 其数据移动到输出 OUT。如果输入 G 的信号状态为“0”,则移动输入 IN0 的值。如果输入 G 的 信号状态为“1”,则将输入 IN1 的值移动到输出 OUT 中。 只有当所有参数的变量均为同一种数据类型时,才能执行该指令。MUX:多路复用 (S7-1500) 说明 可以使用“多路复用”指令将所选输入的数据复制到输出 RET_VAL 中。可将可选输入数量 扩展到 32。编号从 IN0 开始,对于每个新输入,此编号连续递增。使用参数 K 定义其内容 要复制到输出 RET_VAL 中的输入。如果参数 K 的值大于可用的输入数量,则将参数 INELSE 的数据复制到输出 RET_VAL 中。 仅当所有输入和输出 RET_VAL 中的变量为相同的数据类型时,才能执行“多路复用”指令。 参数 K 有所例外,因为只能为其指定整数。 如果满足以下某个条件,则参数 RET_VAL 的值无效: • 参数 K 的输入超出了可用输入。此响应不受是否使用输入 INELSE 的影响。输出 RET_VAL 的值保持不变,使能输出 ENO 将设置为“0”。 • 执行该指令期间出错。 参数 下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 K Input 整数 I、Q、M、D、L 或常数 指定要复制哪个输入的数 据。 IN0 Input 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 或常数 第一个输入值参数 声明 数据类型 存储区 说明 IN1 Input 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 或常数 第二个输入值 INn Input 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 或常数 可选的输入值 INELSE Input 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 或常数 指定 K > n 时要复制的值。 RET_VAL Output 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 值复制的目标输出。 可以从“???”下拉列表中选择该指令的数据类型。 有关有效数据类型的更多信息,请参见“另请参见”。DEMUX: 多路分用 (S7-1500) 说明 可以使用“多路分用”指令将输入 IN 的数据复制到所选输出中。可选输出的数量可扩大至 Zui多 32 个。编号从 OUT0 开始,对于每个新输出,此编号连续递增。使用参数 K 定义要将 输入 IN 的内容复制到的输出。其它输出则保持不变。如果参数 K 的值大于可用输出数,则 将输入 IN 的数据复制到参数 OUTELSE 中。 仅当输入 IN 和所有输出的变量为相同的数据类型时,才能执行“多路分用”指令。参数 K 有 所例外,因为只能为其指定整数。 如果满足以下某个条件,则输出 OUTELSE 的值无效: • 参数 K 的值大于可用输出数。 • 执行该指令期间出错。下表列出了该指令的参数: 参数 声明 数据类型 存储区 说明 K Input 整数 I、Q、M、D、L 或常数 指定要将输入值 (IN) 复制 到的输出。 IN Input 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 或常数 输入值 OUT0 Output 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 第一个输出 OUT1 Output 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 第二个输出 OUTn Output 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 可选输出 OUTELSE Output 二进制数、整 数、浮点数、定 时器、CHAR、 WCHAR、TOD、 LTOD、DATE、 LDT I、Q、M、D、L 当 K > n 时,输入值 (IN) 要 复制到的输出。 可以从“???”下拉列表中选择该指令的数据类型。移位和循环 (S7-1500) SHR:右移 (S7-1500) 说明 可以使用“右移”指令将操作数 1 的数据按位右移。使用操作数 2 指定将特定值移动的位数。 如果操作数 2 的值为“0”,则操作数 1 的值将复制到结果中。 如果操作数 2 的值大于可用位数,则操作数 1 的值将向右移动该可用位数。 如果移动无符号值,则操作数 1 左边区域中空出的位位置将用 0 填充。如果指定值有符号, 则用符号位的信号状态填充空出的位。 下图说明了如何将 INT 数据类型的操作数 1 的数据向右移动 4 位。