1.3 位逻辑指令
1.3.1 触点指令
1.常开触点和常闭触点
触点分为常开触点和常闭触点,常开触点在指定的位为“1”状态(ON)时闭合,为“0”状态(OFF)时断开;常闭触点在指定的位为“1”状态(ON)时断开,为“0”状态(OFF)时闭合。触点符号中间的“/”表示常闭,触点指令中变量的数据类型为位(Bool)型,在编程时触点可以并联和串联使用,但不能放在梯形图的最后,触点和线圈指令的应用举例如图1-12所示。
图1-12 触点和线圈指令的应用举例
注意:在使用绝对寻址方式时,绝对地址前面的“%”符号是编程软件自动添加的,不需要用户输入。
2.NOT(取反)触点
NOT触点用来转换能流流入的逻辑状态。如果没有能流流入NOT触点,则有能流流出。如果有能流流入NOT触点,则没有能流流出。在图1-13中,若I0.0为1,Q0.1为0,则有能流流入NOT触点,经过NOT触点后,则无能流流向Q0.5;或I0.0为1,Q0.1为1,或I0.0为0,Q0.1为0(或为1)则无能流流入NOT触点,经过NOT触点后,则有能流流向Q0.5。
图1-13 NOT(取反)触点指令应用举例
1.3.2 线圈指令
线圈指令为输出指令,是将线圈的状态写入到指定的地址。驱动线圈的触点电路接通时,线圈流过“能流”指定位对应的映像寄存器为1,反之则为0。如果是Q区地址,CPU将输出的值传送给对应的过程映像输出,PLC在RUN(运行)模式时,接通或断开连接到相应输出点的负载。输出线圈指令可以放在梯形图的任意位置,变量类型为Bool型。输出线圈指令既可以多个串联使用,也可以多个并联使用。建议初学时将输出线圈单独或并联使用,并且放在每个电路的最后,即梯形图的最右侧,如图1-12所示。
取反线圈中间有“/”符号,如果有能流经过图1-12中M0.3的取反线圈,则M0.3的输出位为“0”状态,其常开触点断开,反之M0.3的输出位为1状态,其常开触点闭合。
视频“触点及线圈指令”可通过扫描二维码1-4播放。
1-4 触点与线圈指令
1.3.3 置位/复位指令
1.单点置位/复位指令
S(Set,置位或置1)指令将指定的单个地址位置位(变为“1”状态并保持,一直保持到它被另一个指令复位为止)。
R(Reset,复位或置0)指令将指定的单个地址位复位(变为“0”状态并保持,一直保持到它被另一个指令置位为止)。
置位和复位指令最主要的特点是具有记忆和保持功能。在图1-14中若I0.0=1,M0.0=0时,Q0.0被置位,此时即使I0.0和M0.0不再满足上述关系,Q0.0仍然保持为1,直到Q0.0对应的复位条件满足,即当I0.2=1,Q0.3=0时,Q0.0被复位为0。
图1-14 置位/复位指令应用举例
注意:与S7-200和S7-300/400不同,S7-1200的梯形图允许在一个程序段内输入多个独立电路(见图1-14),建议初学者在一个程序段中只输入一个独立电路。
视频“置位/复位指令”可通过扫描二维码1-5播放。
1-5 置位指令和复位指令
2.多点置位/复位指令
SET_BF(Set bit field,多点置位,也称置位位域)指令将指定的地址开始的连续若干个(n)位地址置位(变为“1”状态并保持,一直保持到它被另一个指令复位为止)。
RESET_BF(Reset bit field,多点复位,也称复位位域)指令将指定的地址开始的连续若干个(n)位地址复位(变为0状态并保持,一直保持到它被另一个指令置位为止)。
在图1-15中,若I0.1=1,则从Q0.3开始的4个连续的位被置位并保持“1”状态,即Q0.3~Q0.6一起被置位;当M0.2=1时,则从Q0.3开始的4个连续的位被复位并保持“0”状态,即Q0.3~Q0.6一起被复位。多点置位和复位指令线圈下方的n值为1时,其功能等同于置位和复位指令。
图1-15 多点置位/复位指令应用举例
3.触发器的置位/复位指令
触发器的置位/复位指令如图1-16所示。可以看出触发器有置位输入和复位输入两个输入端,分别用于根据输入端的逻辑运算结果(RLO)=1,对存储器位置位和复位。当I0.0=1,I0.1=0时,Q0.0被复位,Q0.1被置位;当I0.0=0,I0.1=1时,Q0.0被置位,Q0.1被复位。若两个输入的信号逻辑结果全为1,则触发器的哪一个输入端在下面哪个就起作用,即触发器的置位/复位指令分为置位优先和复位优先两种。
触发器指令上的M0.0和M0.1称为标志位,R、S输入端首先对标志位进行复位和置位,然后再将标志位的状态送到输出端。如果用置位指令把输出置位,则当CPU暖启动时输出被复位。若在图1-16中,将M0.0声明为保持,则当CPU暖启动时,它就一直保持置位状态,被启动复位的Q0.0再次赋值为“1”(ON)状态。
后面介绍的诸多指令通常也带有标志位,其含义类似。
图1-16 触发器的置位/复位指令应用举例
1.3.4 边沿检测指令
1.边沿检测触点指令
边沿检测触点指令,又称扫描操作数的信号边沿指令,包括P触点和N触点指令(见图1-17),是当触点地址位的值从“0”到“1”(上升沿或正边沿,Positive)或从“1”到“0”(下降沿或负边沿,Negative)变化时,该触点地址保持1个扫描周期的高电平,即对应常开触点接通1个扫描周期,在其他任何情况下,该触点均断开。触点边沿指令可以放置在程序段中除分支结尾外的任何位置。
P触点下面的M0.0或N触点下面的M1.0为边沿存储位,用来存储上一次扫描循环时I0.1或I0.2的状态。通过比较I0.1或I0.2的当前状态和上一次循环的状态,来检测信号的边沿。边沿存储位的地址只能在程序中使用一次,它的状态不能在其他地方被改写。只能用M、DB或FB的静态局部变量(Static)作为边沿存储位,不能用块的临时局部数据或I/O变量作为边沿存储位。
在图1-17中,当I0.0为1,且当I0.1有从“0”到“1”的上升沿时,Q0.6接通1个扫描周期。当I0.2从“1”到“0”时,Q1.0接通1个扫描周期。
图1-17 边沿检测触点指令应用举例
视频“边沿检测触点指令”可通过扫描二维码1-6播放。
1-6 边沿检测触点指令
2.边沿检测线圈指令
边沿检测线圈指令,又称信号边沿置位操作数指令,包括P线圈和N线圈(见图1-18),仅在流进该线圈的能流(即RLO)中检测到上升沿或下降沿变化时,线圈对应的位地址接通1个扫描周期,其他情况下该线圈对应的位地址为“0”状态。
线圈边沿指令不会影响逻辑运算结果RLO,它们对能流是畅通无阻的,其输入端的逻辑运算结果会被立即送给它的输出端,它们可以放置在程序段的中间或最右边,若放在程序段的最前面,则N线圈指令将无法执行。
在图1-18中,当线圈输入端的信号状态从“0”切换到“1”时,Q0.0接通1个扫描周期。当M0.3=0,I0.1=1时,Q0.2被置位,此时M0.2=0,当I0.1从“1”到“0”或M0.3从“0”到“1”时,M0.2接通1个扫描周期,Q0.2仍为1。图1-18中M0.0或M0.1为P线圈或N线圈输入端的RLO的边沿存储位。
图1-18 边沿检测线圈指令应用举例
3.TRIG边沿检测指令
TRIG边沿检测指令分为检测RLO的信号边沿指令和检测信号边沿指令。
检测RLO的信号边沿指令包括P_TRIG和N_TRIG指令(见图1-19),当在该指令的“CLK”输入端检测到能流(即RLO)上升沿或下降沿时,输出端接通1个扫描周期。在图1-19中,当I0.0和M0.0相与的结果有一个上升沿时,Q0.3接通1个扫描周期,I0.0和M0.0相与的结果保存在M1.0中。当I1.2从“1”到“0”时,M2.0接通1个扫描周期,此行中的N_TRIG指令功能同I1.2下边沿检测触点指令。P_TRIG和N_TRIG指令不能放在电路的开始处和结束处。
图1-19 信号边沿检测指令应用举例
检测信号边沿指令,包括R_TRIG和F_TRIG指令(见图1-20)。它们都是函数块,在调用时应为它们指定背景数据块。这两条指令将输入CLK当前状态与背景数据块中的边沿存储位保存的上一个扫描周期的CLK的状态进行比较,如果指令检测到CLK的上升沿或下降沿,将会通过Q端输出1个扫描周期的脉冲。R_TRIG和F_TRIG指令不能放在电路的开始处和结束处。
图1-20 检测信号边沿指令应用举例