首页 理论教育 用字逻辑指令处理的实现方法

用字逻辑指令处理的实现方法

时间:2023-06-16 理论教育 版权反馈
【摘要】:往往用很少的字节或字或双字处理指令,取得用很多位处理指令的所具有的功能,可大大提高程序的效率。而用基本逻辑指令,每条起、保、停就需4条指令,16路起、保、停则需16×4=64条。图2-31 非标准I/O分配字起、保、停逻辑处理程序这里引入YYX及ZCN通道、字作过渡。由于MMX的内容为ZCN的反,故它保留下来的为要参与起、保、停逻辑处理位的状态。图2-33即为16个开关控制一个灯的逻辑。

用字逻辑指令处理的实现方法

多位逻辑设计也可说成集成化逻辑设计。往往用很少的字节或字或双字处理指令,取得用很多位处理指令的所具有的功能,可大大提高程序的效率。这也是程序设计应追求的目标之一。只是在做这么处理前,I/O地址要做恰当地分配。

1.双按钮多位起、保、停逻辑

起、保、停逻辑即起动、保持及停车电路,是最常用的继电电路,也是PLC程序中最常见的一个组成部分。传统的起、保、停逻辑都是针对一个位进行操作。如果要对多个位操作,完全可以使用字操作指令,实现多位操作,使程序得以简化。

两个按钮操作的起、保、停逻辑的电路是起动按钮与输出触点并联,然后再与停车按钮取反后串联,以此作为输出线圈的输入条件。当用字操作时,也是按此思路处理,可以实现1个字(16位)的起、保、停逻辑。

图2-30所示为用字操作的起、保、停逻辑。图中p_On(及SM0.0、M8000)为常ON触点,保证这几条指令始终执行。QQ通道(或字,三菱无通道概念,为输出位,但前缀为K4,即指从YY0开始16个位,八进制编号,其它如TT0、MM0及YY0同此)的各个位与各个起动按钮相接,TT通道、字的各个位与各个停车按钮相接,YY通道、字的各个位与各个输出线圈相接。MM为中间继电器通道,以用作过渡。

978-7-111-56641-0-Chapter03-74.jpg

图2-30 字起、保、停逻辑

从图2-30知,QQ通道、字任一位ON,必可使YY通道、字的相应位ON,并将予以保持。而TT通道、字的任一位ON,则必使YY通道、字的相应位OFF。而且,这里也是停止优先。即起、停按钮同时按时,为停止。

图2-30用了4条指令,即可使16路实现起、保、停控制。而用基本逻辑指令,每条起、保、停就需4条指令,16路起、保、停则需16×4=64条。4条代替常规的64条,程序的效率当然高多了。笔者在北京某厂消防灌控制程序时就用了类似设计。

2.非标准I/O分配处理

以上介绍的字逻辑操作都是针对16路的起、保、停逻辑,即标准I/O分配。但实际上可能不那么正好。如果少于16路怎么办?图2-31所示就是一种解决办法。

978-7-111-56641-0-Chapter03-75.jpg

图2-31 非标准I/O分配字起、保、停逻辑处理程序

这里引入YYX及ZCN通道、字作过渡。整个操作先对YYX进行。图中①是MOV指令,为对YYX进行逻辑处理准备。⑤是对YY(输出通道、字)的内容作屏蔽,保留不参与起、保、停逻辑操作位的状态,并存入ZCN通道、字中,以便于在起、保、停逻辑操作后,恢复这些位的状态。⑦为对YYX的内容作屏蔽。由于MMX的内容为ZCN的反,故它保留下来的为要参与起、保、停逻辑处理位的状态。⑧为或指令,正好把参与起、保、停逻辑的位与不参与的位,合成后赋予YY通道、字。这样,既可保证参与位,具有起、保、停功能,而不参与的又不受其干扰。

LJD为逻辑条件,可按实际不参与起、保、停位的状况设定。如本例LJD的值设为F,则QQ、TT通道、字的相应位仅能对YY通道的04到15位(西门子如QQ为QW0,则Q0.0到Q0.7及Q1.4到Q1.7;而三菱如QQ0为Y000,则Y004到Y007及Y010到Y017)作起、保、停控制。YY通道的00到03位(与以上假设相应,西门子为Q1.0到Q1.3;而三菱为Y000到Y003)可接受其它控制,不受此程序影响。

如果仅是个别位另有所用,也可先作字处理,而在此前后,对个别位作些处理。这时,尽管存在多输出,但仍可达到目的。因为,PLC指令是一条条执行的,后执行的指令,可改变先执行指令的执行的结果,并以后执行的结果为准。

3.单按钮多位起、保、停逻辑

一个按钮实现起、保、停逻辑也可用字操作。图2-32所示就是这个逻辑。这里AA通道(或字,三菱无通道概念,为输出位,但前缀为K4,即指从YY开始16个位,八进制编号,YY同此)各个位与各个“起停”按钮相接,YY通道的各个位与各个输出线圈相接。

978-7-111-56641-0-Chapter03-76.jpg

图2-32 单按钮字起、保、停逻辑(www.xing528.com)

图中p_On(及M8000、SM0.0)为常ON触点,使统计在通道中置ON的位数BCNT(或SUM功能同BCNT)及比较CMP指令(对西门子PLC做AA不等0比较),在每一扫描周期都得以执行。BCNT指令有3个操作数,对本例,第1个操作数,#1,为要统计的通道个数为1,第2个操作数为AA,要统计的开始通道为AA通道,第3个操作数为MM,统计的结果存于MM通道。对SUM仅2操作数,要对多少位做统计,由这里K后的指定数确定,K1为4位、2为8位,余类推。统计结果存于MM字存储器(即D存储器)中。

这时,若有一个按钮按下,统计结果的MM通道内容变为1,经比较(执行CMP指令),使相等标志P_EQON,进而使AA的内容与YY的内容进行异或逻辑操作,结果存于YY中。

这个异或操作,将使YY中,与按下按钮对应的位,改变状态,原为OFF的,将转为ON,原为ON的,将转为OFF,实现了单按钮起停。而其它位不变,因为0通道其它位为0,0与1或0异或,其结果不变。

提示:这里XORW(或WXOR)指令是微分执行是必要的。即指在按钮按下时,执行一次。不然,所控制的输出将出现交替变化。无法实现预定的要求。

4.多个开关控制一个输出电路

前已讨论3个开关控制1个灯的电路,但要有多个开关,如10个、20个怎么办?这里逻辑相当复杂,所用的触点数很多。以至于出现“组合爆炸”,而无法实现。但,如用字或多字逻辑处理,就好办了。图2-33即为16个开关控制一个灯的逻辑。从图2-33知,它用AA通道、字(对三菱,如AA0为X000,则K4AA0指X000~X007及X010~X017)作16个开关的输入点,程序运行时,不断比较AA通道、字与AAB的内容。如两者不等,则把AA的内容传给AAB。同时,YY0改变状态。如两者相等,则YY0状态不变。显然,这个逻辑,任何一个输入点状态变化,都会引起YY0状态改变,可起到了所要求的用16个开关控制一个灯作用。

978-7-111-56641-0-Chapter03-77.jpg

图2-33 多个钮子开关控制1个灯电路

按此原理,如果为32个开关,再多作一次比较就是了。用多少开关都不受限制。

提示:这里用微分信号NEQP作控制,其原理与以前讨论的单按钮起、停的机理是相同的。再,从图,还再次看出,多家PLC的比较指令比较结果标志是不同的。对欧姆龙,这里增加变量NEQ是绝对必要的。因它的PLC执行MOV指令,也将影响P-EQ标志的状态。

5.表决电路

前已讨论3个开关表决逻辑,如表决的参加者较多,电路也较复杂。但用图2-34的逻辑,就比较简单。

978-7-111-56641-0-Chapter03-78.jpg

图2-34 表决程序

图2-34a用了BCNT(对图2-34b用SUM、图2-34c用ON_NUM)指令,它检测从AA通道开始,共1(这里第一操作数为常数1)个通道中,ON的位个数(对图2-34b,因这里K后的常数为4,如AA0为X000,则从X000~X007及从X010~X017)。结果存于AAJ中。然后把AAJ的内容与常数8比较,若有大于8,则产生输出,YY0ON(对图2-34b为Y000),表示表决已超过半数,通过。

如果参加表决的位数比16多,那BCNT指令的第1个操作数可设得比1大。如设为#2,则为32个位,#3为48个位等(对图2-34b即K后的数改为8、12等)。这时,作比较的第2个操作数不应是8,也要作相应调整。

如果参加表决的位数比16少。可先对1作逻辑与运算,屏蔽掉不参与的位。比较指令中的常数不用8,再改为相应的数也就可以了。

显然,图2-34所示表决逻辑比起用基本逻辑指令去编程,效率也是高得多的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈