RRD:逐双字循环右移 (S7-1500) 说明 使用“逐双字循环右移”指令,将累加器 1的全部内容逐位向右移动。再指令执行过程中, 将累加器 1 的第 0 到 31位逐位循环向右移动,并使用推出位的位置填充在写入过程中变为 空白的位置。该指令的执行与 RLO 无关。将状态位 CC1设置为所移出Zui后一位的信号状态。 下列选项可用于指定待循环移位的位数: • 指定正整数作为指令参数(<编号>)。 •通过累加器 2 中低字节的值指定:该字节将解释为正整数。 您可以使用以下格式: • RRD <编号>:操作数<数量> 指定循环移位数。允许 0 到 32 之间的值。<编号> 大于 0 时, 将状态位 CC 0 和 OV复位为 0。 • RRD:累加器 2 中的值指定循环移位数。允许 0 到 255 之间的值。当累加器 2 中的内容 大于 0时,将状态位 CC 0 和 OV 复位为 0。 对于大于 32 的值,循环数为将该值模除 32 后得到的余数。例如,如果循环数为34,则 累加器 1 的位会循环移动 2 个位位置。 如果指定的循环位移数为 32,则累加器 1 的内容保持不变。指定的循环位移数等于零,也将执行该指令。并将状态位 CC1 置位为“0”。
RLDA:循环左移状态位 CC 1(S7-1500) 说明 使用“循环左移状态位 CC 1”指令,将累加器 1 的内容循环左移一位。在移位过程中变为空 的位位置 (0)将使用状态位 CC 1 的信号状态来填充。状态位 CC 1 将接收已移出位 (31) 的信号状态。 该指令的执行与 RLO无关。它会将状态位 CC 0 复位为“0”。RRDA:循环右移状态位 CC 1 (S7-1500) 说明 使用“循环右移状态位 CC1”指令,将累加器 1 的内容循环右移一位。在移位过程中变为空 的位位置 (31) 将使用状态位 CC 1的信号状态来填充。状态位 CC 1 将接收已移出位 (0) 的信号状态。 该指令的执行与 RLO 无关。它会将状态位 CC 0和 OV 复位为“0”。其它指令 (S7-1500) 累加器 (S7-1500) TAK:交换累加器 1 和 2 的内容(S7-1500) 说明 使用指令“交换累加器 1 和 2 的内容”,将交换累加器 1 和 2 的内容。无论逻辑运算结果以及状态位如何,CPU 都会执行该指令。该指令既不影响逻辑运算结果也不影响状态位。PUSH:将内容移到后一个高位累加器 (S7-1500) 说明 使用指令“将内容移到后一个高位累加器”,将累加器 1的内容移至累加器 2。 累加器 1 的内容不受该指令的影响,在执行该指令后保持不变。累加器 2 的内容将丢失。下表列出了在执行该指令前后,累加器 1 到 2 中的内容:POP:将内容移到前一个低位累加器 (S7-1500) 说明使用指令“将内容移到前一个低位累加器”,将累加器 2 的内容移至累加器 1。 累加器 2的内容不受该指令的影响,在执行该指令后保持不变。累加器 1 的内容将丢失。 下表列出了在执行该指令前后,累加器 1 到 2中的内容:地址寄存器 (S7-1500) +AR1:将累加器 1 加到 AR1 (S7-1500) 说明 使用“将累加器 1 加到AR1”指令,可将地址寄存器 1 的内容加上一个值。位于地址寄存器 1 中的指针类型和操作数范围保持不变。可以使用下列选项来指定将要加上的值: • 通过常数指定:该指令将地址寄存器 1 加上常数的值。常数的值必须为区域内部指针格式(POINTER)。 • 通过累加器 1 中低字的值可以指定:该指令将累加器 1 低字的值解释为 16 位整数并使 用正确的符号扩展为24 位。该指令随后将累加器 1 的值与地址寄存器 1 相加允许的值 范围为 -32768 到 +32767。无论逻辑运算结果以及状态位如何,CPU 都会执行该指令。该指令既不影响逻辑运算结果也 不影响状态位。该指令不会更改累加器中的内容。将累加器 1 加到 AR2 (S7-1500) 说明 使用“将累加器 1 加到AR2”指令,可将地址寄存器 2 的内容加上一个值。位于地址寄存器 2 中的指针类型和操作数范围保持不变。可以使用下列选项来指定将要加上的值: • 通过常数指定:该指令将地址寄存器 2 加上常数的值。常数的值必须为区域内部指针格式(POINTER)。 • 通过累加器 1 中低字的值可以指定:该指令将累加器 1 低字的值解释为 16 位整数并使 用正确的符号扩展为24 位。该指令随后将累加器 1 的值与地址寄存器 2 相加允许的值 范围为 -32768 到 +32767。无论逻辑运算结果以及状态位如何,CPU 都会执行该指令。该指令既不影响逻辑运算结果也 不影响状态位。 该指令不会更改累加器中的内容。说明 处理多重实例时将使用地址寄存器 AR2。如果编写了“将累加器 1 加到 AR2”指令,则必须 “保存”地址寄存器 2的内容以便在后期重新加载。 参数 下表列出了“将累加器 1 加到空指令 (S7-1500) BLD: 程序显示(空指令)(S7-1500) 说明 “程序显示(空指令)”指令将不执行任何功能,也不影响状态位。该指令用于在参数传递 期间或通过 LAD/FBD程序段识别代码序列。在 STL 中显示 LAD 或 FBD 程序时,会自动创建 该指令。参数值是指令的编号,由编程设备生成。NOP0: 空指令 (S7-1500) 说明 带有参数 0 的“空指令”将不执行任何功能,也不影响状态位。该指令代码包含具有 16 个“0”的位模式。只有显示程序时,该指令才与编程设备有关。NOP 1: 空指令 (S7-1500) 说明 带有参数 1的“空指令”将不执行任何功能,也不影响状态位。该指令代码包含具有 16 个“1”的位模式。只有显示程序时,该指令才与编程设备有关。SCL (S7-1200, S7-1500) 位逻辑运算 (S7-1200,S7-1500) R_TRIG:检测信号上升沿 (S7-1200, S7-1500) 说明 使用“检测信号上升沿”指令,可以检测输入CLK 的从“0”到“1”的状态变化。该指令将输入 CLK的当前值与保存在指定实例中的上次查询(边沿存储位)的状态进行比较。如果该指令 检测到输入 CLK的状态从“0”变成了“1”,就会在输出 Q 中生成一个信号上升沿,输出的值将 在一个循环周期内为 TRUE 或“1”。在其它任何情况下,该指令输出的信号状态均为“0”。F_TRIG:检测信号下降沿 (S7-1200, S7-1500) 说明使用“检测信号下降沿”指令,可以检测输入 CLK 的从“1”到“0”的状态变化。该指令将输入 CLK的当前值与保存在指定实例中的上次查询(边沿存储位)的状态进行比较。如果该指令 检测到输入 CLK 的状态从“1”变为“0”,则在输出Q 中生成一个信号下降沿。即,该输出的值 将为 TRUE 或“1”,并保持一个周期。定时器操作 (S7-1200, S7-1500)调用 IEC 定时器 (S7-1200, S7-1500) 说明 IEC 定时器可声明为单实例或多重实例并在程序代码中进行调用。在块接口中,将 IEC 定时器声明为结构中多重实例的语法如下所示: IEC 定时器声明为 ARRAY 元素块接口中的声明TP:生成脉冲 (S7-1200, S7-1500) 说明 使用“生成脉冲”指令,可以将参数 Q置位为预设的一段时间。当参数 IN 的逻辑运算结果 (RLO) 从“0”变为“1”(信号上升沿)时,启动该指令。指令启动时,预设的时间PT 即开始计 时。无论未来输入信号的状态如何变化,都将为持续时间 PT 置位参数 Q。当 PT 正在计时时, 在 IN输入处检测到的新的信号上升沿对 Q 输出处的信号状态没有影响。 可以在参数 ET 中查询当前时间值。该定时器值从 T#0s开始,在达到持续时间 PT 后结束。达 到持续时间 PT 时,且参数 IN 的信号状态为“0”,则复位参数 ET。 说明如果在程序中未调用该指令(如,由于跳过该指令),则 ET 输出会在超出时间后立即返回 一个常数值。每次调用“生成脉冲”指令,都会为其分配一个 IEC 定时器用于存储实例数据。 有关在结构(多重实例)中调用 IEC定时器的信息,请参见“调用 IEC 定时器 (页 2017)” S7-1200 系列 CPU IEC 定时器是一个IEC_TIMER 或 TP_TIME 数据类型的结构,可如下声明: • 声明为一个系统数据类型为 IEC_TIMER的背景数据块(例如,“MyIEC_TIMER_DB”) • 声明为程序块的“Static”中数据类型为 TP_TIME的局部变量(例如, #MyIEC_TIMER_Instance)S7-1500 系列 CPU: IEC 定时器是一个IEC_TIMER、IEC_LTIMER、TP_TIME 或 TP_LTIME 数据类型的结构,可如下 声明: •声明为一个系统数据类型为 IEC_TIMER 或 IEC_LTIMER 的背景数据块(例如, “MyIEC_LTIMER_DB”) •声明为程序块的“Static”中数据类型为 TP_TIME 或 TP_LTIME 的局部变量(例如,#MyIEC_LTIMER_Instance) IEC 定时器作为系统数据类型为 IEC_<定时器> 的背景数据块(共享DB) 您可以按如下所示将 IEC 定时器声明为数据块:.TP(); IEC 定时器作为块接口的局部变量(多重实例)您可以按如下所示将 IEC 定时器声明为局部变量:更新实例数据中的实际值 “生成脉冲”中的实例数据根据以下规则更新: • IN 输入“生成脉冲”指令将当前 RLO 与保存在实例数据 IN 参数中上次查询的 RLO 进行比较。如 果指令检测到 RLO从“0”变为“1”,则说明出现了一个信号上升沿并开始进行时间测量。在 “生成脉冲”指令处理完毕后,IN参数的值在实例数据中更新,并作为存储器位用于下 次查询。 请注意,边沿检测将在其他功能写入或初始化 IN 参数的实际值时中断。 • PT 输入 当边沿在 IN 输入处改变时,PT 输入处的值将写入实例数据中的 PT 参数。 • Q 和ET 输出 Q 和 ET 输出的实际值在以下情况下更新: – 当输出 ET 或 Q 互连时,调用该指令。 或 – 访问 Q 或 ET。如果输出未互连并且还未被查询,则不更新 Q 和 ET 输出的当前时间值。在程序中跳 过该指令,也不会对输出进行更新。 “生成脉冲”指令的内部参数用以计算 Q 和 ET 的时间值。请注意,时间测量将在其他功 能写入或初始化指令的实际值时中断。 危险重新初始化实际值的危险 在时间测量时,重新初始化 IEC 定时器的实际值会破坏 IEC 定时器的功能。更改实际值可能会导致程序和实际过程之间不一致。这会对财产和人身造成造成严重损害。 以下功能可导致实际值重新初始化: • 通过重新初始化加载块 •将快照加载为实际值 • 控制或强制执行实际值 • “WRIT_DBL”指令 在执行这些功能前,请采取以下预防措施: •在覆盖实际值之前,应确保设备始终处于安全状态。 • 在初始化 IEC 定时器的实际值前,请确保定时器已计时结束。 •如果使用快照覆盖实际值,请确保是在系统处于安全状态时拍摄的快照。 • 确保程序在传输期间不读写受影响的数据。