|
4.3 位逻辑运算指令 |
位逻辑指令用于二进制数的逻辑运算。位逻辑运算的结果简称为RLO。
位逻辑指令是最常用的指令之一,主要有与运算指令、与非运算指令、或运算指令、或非运算指令、置位运算指令、复位运算指令、嵌套指令和线圈指令等。
(1)触点与线圈相关指令
① A(And):与运算指令表示常开触点的串联。使用“与”运算指令来检查二进制操作数的信号状态是否为“1”,并且将查询结果与该逻辑运算结果 (RLO) 的信号状态进行“与”运算。因此,查询结果与所检查的操作数信号状态相同。
如果两个相应的信号状态均为“1”,则在执行该指令后,RLO为“1”。如果其中一个相应的信号状态为“0”,则在指令执行后,RLO 为“0”。
② O(Or):或运算指令表示常开触点的并联。使用“或”运算指令来检查二进制操作数的信号状态是否为“1”,并且将查询结果与该逻辑运算结果 (RLO) 的信号状态进行“或”运算。因此,查询结果与所检查的操作数信号状态相同。
如果其中一个相应的信号状态为“1”,则在执行该指令之后,RLO 为“1”。如果这两个相应的信号状态均为“0”,则在执行该指令之后,RLO 也为“0”。
③ AN(And Not):与运算取反指令表示常闭触点的串联。检测信号0,与And Not关联。
④ ON(Or Not):或运算取反指令表示常闭触点的并联。
⑤ 线圈指令“=”与线圈相对应。将 CPU 中保存的逻辑运算结果 (RLO) 的信号状态分配给指定操作数。如果 RLO 的信号状态为“1”,则置位操作数。如果信号状态为“0”,则操作数复位为“0”。
⑥ “线圈取反”指令,可将逻辑运算的结果 (RLO) 进行取反,然后将其赋值给指定操作数。线圈输入的 RLO 为“1”时,复位操作数。线圈输入的 RLO 为“0”时,操作数的信号状态置位为“1”。
与、与运算取反及线圈指令示例如图4-29所示,图中左侧是梯形图,右侧是与梯形图对应的指令表。当常开触点I0.0和常闭触点I0.2都接通时,输出线圈Q0.0得电(Q0.0=1),Q0.0=1实际上就是运算结果RLO的数值,I0.0和I0.2是串联关系。
图4-29 与、与运算取反及线圈指令示例
或、或运算取反及线圈指令示例如图4-30所示,当常开触点I0.0、常开触点Q0.0和常闭触点M0.0有一个或多个接通时,输出线圈Q0.0得电(Q0.0=1),I0.0、Q0.0和M0.0是并联关系。
图4-30 或、或运算取反及线圈指令示例
【例4-4】 CPU上电运行后,对MB0~MB3清零复位,请设计梯形图。
【解】 S7-1500虽然可以设置上电闭合一个扫描周期的特殊寄存器(FirstScan),但可以用如图4-31所示梯形图取代此特殊寄存器。另一种解法要用到OB100,将在后续章节讲解。
图4-31 梯形图
(2)对RLO的直接操作指令
这类指令可直接对逻辑操作结果RLO进行操作,改变状态字中RLO的状态。对RLO的直接操作指令见表4-15。
表4-15 对RLO的直接操作指令
取反RLO指令示例如图4-32所示,当I0.0为1时Q0.0为0,反之当I0.0为0时Q0.0为1。
图4-32 取反RLO指令示例
【例4-5】 某设备上有“就地/远程”转换开关,当其设为“就地”挡时,就地灯亮,设为“远程”挡时,远程灯亮,请设计梯形图。
【解】 梯形图如图4-33所示。
图4-33 取反RLO指令示例
(3)电路块的嵌套
如图4-34所示的或运算嵌套,实际就是把两个虚线框当作两个块,再将两个块作或运算。如图4-35所示的与运算嵌套,实际就是把两个虚线框当作两个块,再将两个块作与运算。
图4-34 或运算嵌套示例
图4-35 与运算嵌套示例
【例4-6】 编写程序,实现当压下SB1按钮奇数次,灯亮,当压下SB1按钮偶数次,灯灭,即单键启停控制,请设计梯形图。
【解】 这个电路是微分电路,但没用到上升沿指令。梯形图如图4-36所示。
注意:在经典STEP7中,图4-36所示的梯形图需要三个程序段。
图4-36 梯形图
(4)复位与置位指令
S:置位指令将指定的地址位置位(变为1,并保持)。
R:复位指令将指定的地址位复位(变为0,并保持)。
如图4-37所示为置位/复位指令示例,当I0.0为1,Q0.0为1,之后,即使I0.0为0,Q0.0保持为1,直到I0.1为1时,Q0.0变为0。这两条指令非常有用。
图4-37 置位/复位指令示例
【关键点】 置位/复位指令不一定要成对使用。
【例4-7】 用置位/复位指令编写“正转-停-反转”的梯形图,其中I0.0是正转按钮,I0.1是反转按钮,I0.2是停止按钮(接常闭触点),Q0.0是正转输出,Q0.1是反转输出。
【解】 梯形图如图4-38所示,可见使用置位/复位指令后,不需要用自锁,程序变得更加简洁。
图4-38 “正转-停-反转”梯形图
【例4-8】 CPU上电运行后,对M10.2置位,并一直保持为1,请设计梯形图。
【解】 S7-1500虽然可以设置上电运行后一直闭合的特殊寄存器位(AlwaysTRUE),但设计梯形图如图4-39所示,可替代此特殊寄存器位。
图4-39 梯形图
(5)SET_BF位域/RESET_BF位域
① SET_BF:“置位位域”指令,对从某个特定地址开始的多个位进行置位。
② RESET_BF:“复位位域”指令,可对从某个特定地址开始的多个位进行复位。
置位位域和复位位域应用如图4-40所示,当常开触点I0.0接通时,从Q0.0开始的3个位置位,而当常开触点I0.1接通时,从Q0.1开始的3个位复位。这两条指令很有用,在S7-300/400 PLC中没有此指令。
图4-40 置位位域和复位位域应用
(6)RS/SR触发器
① RS:复位/置位触发器。如果R输入端的信号状态为“1”,S1输入端的信号状态为“0”,则复位。如果R输入端的信号状态为“0”,S1输入端的信号状态为“1”,则置位触发器。如果两个输入端的RLO状态均为“1”,则置位触发器。如果两个输入端的RLO状态均为“0”,保持触发器以前的状态。RS /SR双稳态触发器示例如图4-41所示,用一个表格表示这个例子的输入与输出的对应关系,见表4-16。
图4-41 RS /SR触发器示例
图4-16 RS /SR触发器输入与输出的对应关系
② SR:置位/复位触发器。如果S输入端的信号状态为“1”,R1输入端的信号状态为“0”,则置位。如果S输入端的信号状态为“0”,R1输入端的信号状态为“1”,则复位触发器。如果两个输入端的RLO状态均为“1”,则复位触发器。如果两个输入端的RLO状态均为“0”,保持触发器以前的状态。
【例4-9】 设计一个单键启停控制(乒乓控制)的程序,实现用一个单按钮控制一盏灯的亮和灭,即奇数次压下按钮灯亮,偶数次压下按钮灯灭。
【解】 先设计其接线图如图4-42所示。
图4-42 I/O接线图
梯形图如图4-43所示,可见使用SR触发器指令后,不需要用自锁,程序变得更加简洁。当第一次压下按钮时,Q0.0线圈得电(灯亮),Q0.0常开触点闭合,当第二次压下按钮时,S和R1端子同时高电平,由于复位优先,所以Q0.0线圈断电(灯灭)。
图4-43 梯形图(1)
这个题目还有另一种解法,就是用RS指令,梯形图如图4-44所示,当第一次压下按钮时,Q0.0线圈得电(灯亮),Q0.0常闭触点断开,当第二次压下按钮时, R端子高电平,所以Q0.0线圈断电(灯灭)。
图4-44 梯形图(2)
(7)边沿检测指令
边沿检测指令有扫描操作数的信号下降沿指令和扫描操作数的信号上升沿指令。
① 扫描操作数的信号下降沿指令FN检测RLO从1调转到0时的下降沿,并保持RLO=1一个扫描周期。每个扫描周期期间,都会将RLO位的信号状态与上一个周期获取的状态比较,以判断是否改变。
下降沿示例的梯形图如图4-45所示,由图4-46所示的时序图可知:当按钮I0.0按下后弹起时,产生一个下降沿,输出O0.0得电一个扫描周期,这个时间是很短的,肉眼是分辨不出来的,因此若Q0.0控制的是一盏灯,肉眼是不能分辨出灯已经亮了一个扫描周期。在后面的章节中多处用到时序图,请读者务必掌握这种表达方式。
图4-45 下降沿示例
图4-46 下降沿示例时序图
② 扫描操作数的信号上升沿指令FP检测RLO从0调转到1时的上升沿,并保持RLO=1一个扫描周期。每个扫描周期期间,都会将RLO位的信号状态与上一个周期获取的状态比较,以判断是否改变。
上升沿示例的梯形图如图4-48所示,由图4-47所示的时序图可知:当按钮I0.0按下时,产生一个上升沿,输出O0.0得电一个扫描周期,无论按钮闭合多长的时间,输出O0.0只得电一个扫描周期。
图4-47 上升沿示例时序图
图4-48 上升沿示例
【例4-10】 梯形图如图4-49所示,如果按钮I0.0压下,闭合1s后弹起,请分析程序运行结果。
图4-49 边沿检测指令示例
【解】 时序图如图4-50所示,当I0.0压下时,产生上升沿,触点产生一个扫描周期的时钟脉冲,驱动输出线圈Q0.1通电一个扫描周期,Q0.0也通电,使输出线圈Q0.0置位,并保持。
图4-50 边沿检测指令示例时序图
当按钮I0.0弹起时,产生下降沿,触点产生一个扫描周期的时钟脉冲,驱动输出线圈Q0.2通电一个扫描周期,使输出线圈Q0.0复位,并保持,Q0.0得电共1s。
【例4-11】 设计一个程序,实现用一个单按钮控制一盏灯的亮和灭,即奇数次压下按钮灯亮,偶数次压下按钮灯灭。
【解】 当I0.0第一次合上时,M10.0接通一个扫描周期,使得Q0.0线圈得电一个扫描周期,当下一次扫描周期到达,Q0.0常开触点闭合自锁,灯亮。
当I0.0第二次合上时,M10.0线圈得电一个扫描周期,使得M10.0常闭触点断开,灯灭。梯形图如图4-51所示。
图4-51 梯形图
(8)SAVE指令
SAVE指令就是将RLO保存到状态字的BR位,在下一段程序中,BR位的状态将参与“与”逻辑运算。在推出逻辑块之前,通过SAVE指令,使BR位对应的使能输出ENO被设置为RLO位的值,可以用于块的错误检查。SAVE指令较为常用,只出现在语句表程序中。
(9)SET和CLR指令
SET和CLR指令无条件将RLO(逻辑运算结果)置位和复位,随后将SET和CLR指令后面的赋值指令中的地址变为1状态或者0状态。SET和CLR指令比较常用,如在初始化组织块OB100中,用下列的语句表进行初始化。