1.数据处理指令
数据处理指令很多,占PLC指令集的相当大部分。大都以字、双字、多字为单位操作。具体有传送指令、比较指令、移位指令、译码指令及各种运算与文字处理指令等。
(1)传送指令
为把源地址的内容或某即时数传送到某目标地址。传送后,源地址内容不变。图1-52所示为3厂商传送梯形图及助记符指令。
欧姆龙PLC执行传送指令也影响标志位(25506特殊继电器,它反映相等的特点),传送的数为0时,置其为1,不然置0。
图1-52 传送梯形图及助记符指令
图中:S为源地址,也可是即时数;D为目标地址。
欧姆龙PLC的MOV指令名称前加@,即@MOV(021);三菱PLC的MOV指令后加P、即MOVP,则指令为微分执行。只在逻辑条件从OFF到ON那个扫描周期,指令执行1次。其它情况,指令不执行。欧姆龙新型PLC,MOV之后加L,即MOVL;三菱PLCMOV之前加D,即DMOV,可实现双字传送。而且,这里的MOV前加字及后加字可同时进行。
西门子PLCMOV-W为字传送;MOV-B为字节传送;MOV-D为双字传送;MOV-R为实数传送。
除了MOV,欧姆龙、三菱还有反相传送指令MNV(三菱为CML)指令,它与MOV不同的只是传送之前,先把要传的内容取反,然后再传。
此外,还有其它多种传送指令,有:
多字传送,也称块传送,或称成批传送指令,可把若干连续地址的内容分别传送给对应的连续的目标地址。只要设好要传的数据的起始地址,目标的起始地址及要传的字数就可以了。
块设定,或称多点传送指令。它可把1个字的内容设定到指定的连续存储区中,只要指出该区的起始地址及末了地址。这个指令可很方便地用于对PLC的一些存储区进行初始化。
字交换指令,可进行两个地址内容的交换。
欧姆龙还有带偏移目标地址的传送指令DIST。可把源地址的内容传送给某基址加偏移地址后的地址。这种传送类似使用指针,较灵活,便于存储数据,或从同一子程序中取出的数存于不同的单元中。
欧姆龙还有带偏移源地址的传送指令,COLL。可把某基址加偏移地址后的地址的内容传送到某个目标地址。这种传送也类似使用指针,便于取数,或同一子程序可使用不同的参数。
除了字、双字、多字传送,还有BCD码的位(digit)及十六进制的位(bit)传送等,这些指令给数据处理都提供了方便。
(2)比较指令,也称关系运算指令
1)欧姆龙常用的比较指令CMP。执行它时,实现两个数的比较,并依据比较结果使相应的标志位置位。
比较结果位有3个:EQ(等于),第1、第2比较数相等:LE(小、等于),第1个数小于第2个数;GR(大、等于),第1个数大于第2个数。
2)三菱PLC比较指令。其格式如下:
—[CMP D1 D2 M1]
这里方括号左边横线为执行本指令的逻辑条件;方括号中CMP为指令名称,D1为第1比较数,D2为第2比较数,M1(在此虽只指明M1)~M3为比较结果标志。当D1>D2时,M1ON,其它OFF;当D1=D2时,M2ON,其它OFF;当D1<D2时,M3ON,其它OFF。
三菱的CMP与MOV一样可加前、后缀D、P,实行双字比较或微分执行。
3)西门子PLC触点比较指令。可进行各种长度及不同数据类型的比较,其结果可当作梯形图的逻辑条件使用。图1-53所示为使用西门子PLC比较指令的梯形图程序。
图1-53 使用西门子PLC比较指令的梯形图程序
图1-53中除了常开触点I0.0及输出Q0.0外,全部为比较指令。要使Q0.0产生输出,其条件是:VB0(字节整数)要≥QB0(字节整数)或I0.0ON,同时VW7(字整数)=VW4(字整数)或IB2(字节整数)≥VB3(字节整数),同时VD56(双字浮点数)≤VD12(双字浮点数),同时VB100(字符)=VB10(字符)。
图1-54 使用三菱触点比较指令的梯形图程序
4)三菱PLC触点比较指令。图1-54所示为使用三菱触点比较指令的梯形图程序。
图中除了常开触点X002及输出Y000外,其它的为比较指令。从图知,要使Y000产生输出,其条件是:D1(字整数)要大于D2(字整数),同时X002ON,或D10(双字,这里大于号之前加D,为双字的含义)≥D20(双字)。
欧姆龙新机型也有类似此触点比较指令。
5)欧姆龙PLC还有表比较指令,可把一个数与若干个数比较,哪个数相等,则指定字中相应位ON;否则,OFF。块(范围)比较指令,它的比较表是16对数,列出被比较数的上下限。当这个比较数处于被比较数的某上下限之间(含上、下限本身),视同比较相等,可使指定字的相应位ON;否则,OFF。
提示1:比较指令对应操作数的格式应一致,否则无法得到预期的结果。
提示2:比较指令是实现逻辑判断的基本手段。正确理解与巧妙使用比较指令,是PLC编程的关键之一。
(3)移位指令
移位指令用于字或多个位(bit)二进制数依次顺序左移或右移。有多种多样的移位指令:
1)简单左移:执行一次本指令移一次位。移位时用0移入最低位。原最低位的内容,移入次低位,……,依次类推,最高位的内容移出,或移入进位位(而原进位位的内容丢失)。有的PLC可设为,每次可移多个位。
2)简单右移:与左移不同的只是它为右移,先把进位位的内容移入字的最高位,原最高位的内容移入次高位,……,依次类推,原最低位的内容丢失,或移入进位位(而原进位位的内容丢失)。有的PLC可设为,每次可移多个位。
3)循环左移:它与简单左移不同的只是它的进位位的内容不丢失,要传给00位,以实现循环。
4)循环右移:与循环左移不同的是00的内容不丢失,传给进位位,原进位的值传给第15位,以实现循环右移。
5)可设定输入值的移位:如左移,不是都用0输入给最低位,而是可设定这个输入的值。
6)可逆移位指令:用控制字控制左还是右移,并可实现多字移位。
7)有数位(digit)移位,可左移,也可右移。移位的对象可以多个字。
8)字移位:以字为单位的移,执行一次本指令移一个字。移时0000移入起始地址(最小地址),起始地址的原内容移入相邻的较高地址,……最高地址(结束地址)的内容丢失。多次执行本指令,可对从起始到结束地址的内容清零。
图1-55所示为3家PLC左移指令梯形图符号。
图1-55 PLC左移指令梯形图符号
图1-55a中,St是移位开始通道;Ed是移位终了通道;P是移位脉冲输入;R是复位输入;S是移位信号输入。当P从OFF到ON时,而R又为OFF,则从St到Ed间的各个位,依次左移一位,并把S的值(OFF或ON)赋值给St的最低(00)位,Ed的最高(15)位溢出;但如R复位输入ON,移位禁止,并St到Ed各通道清零。
图1-55b中,SHL之后加DW为双字,即4个字节移位,EN为此指令执行条件。其输入为ON,才能执行本指令,否则,不执行。IN是进行移位的双字,OUT是移位结果输出的双字,N是每执行一次本指令将移位的位数。每次移位时,除了移位双字各位值相应左移,并用0填入移入的位。
图1-55c中,S是移位源;D是移位的输出;n1为指定源及输出位数;n2是指定执行一次本指令将移位的位数。本指令的输入为ON,才能执行本指令,否则,不执行。每次移位时,除了移位指定的各位值相应左移,并用移位源的值填入移入的位。
图1-56所示为使用PLC左移指令梯形图程序。本程序的功能是:当0.02、I0.2及X002OFF时,而0.01、I0.1及X001从OFF到ON,则使输出(从10通道开始到11通道、QD04双字及从Y000~Y37共32个位)左移1位。对图1-56b和c,为了能把I0.0及X000的值赋值给这里的“输入位”,即Q3.00及Y000,以及能对移位用的双字或各个位清零,这里增加了两组指令。目的是使其也具有图1-56a的功能。
图1-56 PLC左移指令梯形图程序
提示:西门子数据存储格式(顺序)与欧姆龙、三菱不同,是高字节存低位数,低字节存高位数。故上述输入位用QB3.0,而不像欧姆龙用10.00,也不像三菱用Y000。西门子PLC字节间的移位,以图1-56b为例,是:Q3.7移给Q2.0;Q2.7移给Q1.0;Q1.7移给Q0.0。各字节中的移位,则也是从低位到高位移,即Q0.6移给Q0.7,Q0.5移给Q0.6等。三菱PLC的移位,以图1-56c为例,是:Y0.7移给Y1.0;Y1.7移给Y2.0;Q2.7移给Y3.0。各8位中的移位,则也是从低位到高位移,即Y0.6移给Y0.7,Y0.5移给Y0.6等。欧姆龙PLC的移位,以图1-56a为例,是:10.15移给11.00。各字中的移位,则也是从低位到高位移,即10.06移给10.07,10.05移给10.06等。
移位指令是很有用的。不仅在数据处理时要用到它,而且在逻辑量控制时也常用到它。当然,以上讲的也还不是移位指令的全部,也不是所有PLC都有以上讲的这些移位指令。具体使用此类指令,也可能还有一些细节,故使用时可参阅有关帮助。
(4)译码指令
用以译码,以适应数据使用或实现控制的需要。
最常用的为BCD码与二进制码(BIN)转换用指令。BCD为二进制码转换成BCD码指令。BIN为BCD码转换二进制码指令。有的PLC还有可处理双字的BCD及BIN指令,可进行两字长转换。
还有为4转16(DMPX、DECO)及16转4(MLPX、ENCO)的译码指令。
1)4转16:此指令可用一个输入(源)数位(digit,由4个bit组成)的值,使一个16位二进制输出(目标)数中,与该值相等的位ON,其它位OFF。当使用数值去控制不同的输出时,常要使用到此指令。而多数PLC都提供有这个指令。
图1-57所示为组不同PLC使用4转16指令的梯形图程序。其作用都是用4个输入点(分别是0.00~0.03、I0.0~I0.3及X000~X003)组成的一个数位(digit)的不同取值(十六进制编码),去控制输出(分别为10.00~10.15、Q0.0~Q1.7及Y000~Y017)。
图1-57 使用4转16指令梯形图程序
如图1-57给出的程序,如输入(编码)值为6,则将使10.06、Q1.6(注意:西门子位在字中的排序与其它PLC不同,其升幂先是高字节的00~07位,后为低字节的00~07位,故这里为Q1.6,而不是Q0.6)及Y006ON,而其它各位全OFF。再如输入(编码)值为11,则将使10.11、Q1.3(八进制计算)及Y013(八进制计算)ON,而其它各位全OFF。再如输入(编码)值为0,则将使10.00、Q0.0及Y000ON,而其它各位全OFF。有了这个程序,如用16位的拨码开关接输入点,则可很方便地用这个开关的不同设置,产生不同输出。如用增计数器作为这里的源,也可用计数值的变化,一步步改变输出。
提示1:如图1-57b所示,西门子S7-200的DECO指令的输入(IN)是字节,且其作用的仅它的低4位(如图,为I0.0~I0.3),输出是两个字节,16个位。只要其EN端逻辑条件ON(图中SM0.0为常ON触点,故此条件满足),即执行本指令。而S7-300、400则没有这个指令。
提示2:如图1-57c所示,三菱的DECO指令稍复杂,功能也稍强。如图,X000~X003,4个位,为源(S·、输入),Y000~Y017为目标(D·、输出),16个位。只要执行它的逻辑条件ON(图中M8000为常ON触点,故此条件满足),即执行本指令。为什么这里输入为4位,输出为16位?这与常数(n)的取值为4有关。
图1-58所示为三菱DECO指令n的取值及其含义示意。
图1-58 三菱DECO指令n的取值及其含义
当目标(D)是“位”软元件时,n取值应小于或等于8。输出位数是2的n次方。图1-57c的n为4,故输出为16位,对应的输入为4位。如n为8,则可输出256位。图1-58中n为3,故输出为8位,对应的输入为3位。该图输入X000、X001ON,X002OFF,其值为3,故M13ON,其它7位均OFF。
当目标(D)是“字”软元件时,n取值应小于或等于4。输出位数也是2的n次方。图1-58b中n为3,故输出为8位,对应的输入为3位。该图输入D0的低3位值为3,故D1的第3位ON,其它位,含高字节各位均OFF。
提示:如图1-57a所示,欧姆龙的MLPX指令更复杂,功能也更强。000.00~000.03,4个位,为源(第1个操作数、S),010·00~010·15为目标(第3个操作数、R),16个位。只要执行它的逻辑条件ON(图中p_ON为常ON触点,故此条件满足),即执行本指令。为什么这里输入为4位,输出为16位?这与#0(第2个操作数,控制字的取值)有关。
图1-59所示为MLPX指令控制字(第2个操作数,C)的含义及应用实例。这里C有4个数位,其中数位0(n)指的是“源”字(S)中哪个数位用作输入,数位1(l)指的是有多少数位用作输入。自然,输入数位多,输出也多(4对16)。
如图1-59所示,这里n=2,l=1(0时用1个数位,1用2个,余类推)。所以,如S中数位2的值为m,则R字中的m位ON。如S中数位3的值为p,则R+1字中的p位ON。
控制字C的数位,这里为0。如数位3取值为1,将进行8到256的译码(老机型无此功能)。256为16个字组成的256个位。8为8个字节为一组,每组两数位十六进制数,其值变化范围为00~FF,正好对应于256位的00~255位。8到256译码,本质上与4到16是相同的,只是它的通道长(位数)不是16,而是256,位(号)不是0~F,而是两位十六进制数00~FF。但8到256最多只能进行两组,不像4到16可进行4组译码。图1-60所示为MLPX指令8到256应用实例。
图1-59 MLPX指令控制字(C)的含义及应用实例
图1-60 MLPX指令8到256应用实例
2)16转4:它与4转16相反,是把一个16位二进制输入(源)数中ON位的序号,作为一个输出(目标)数位(digit,由4个bit组成)的值。如前者有多个ON的位,则取其最大(对S-200相反,取其最小,欧姆龙CJ1等机可选定)的位。当需对不同的输出进行记录时,常要使用到此指令。而多数PLC都提供有这个指令。
图1-61为一组不同PLC使用16转4指令的梯形图程序。其作用都是将16个触点(分别是10.00~10.15、Q0.0~Q1.7及Y000~Y017)的不同取值(十六进制编码),译成一个数位(digit)输出(分别为100.00~100.03、VB0.0~VB0.3及D0的低4位)。
图1-61 用16转4程序
如图1-61程序,如输入10.06、Q0.6及Y006ON,而其它各位全OFF,则将使100、D0字、VB0字节的低数位(数位0)的值将为6。如010.11、010.9、Q1.3、Q1.1及Y013、Y011ON,而其它各位全OFF,则将使100、D0字的低数位(数位0)的值将为11,而VB0字节的低数位(数位0)的值、将为9。有了这个程序,可很方便地把输出点的输出情况予以记录。
提示1:如图1-61b所示,西门子S7-200的ENCO指令的输入(IN)是两个字节,输出是一个字节,只要其EN端逻辑条件ON(图中SM0.0为常ON触点,故此条件满足),即执行本指令。而S7-300、400则没有这个指令。
提示2:如图1-61c所示,三菱的ENCO指令,稍复杂,功能也稍强。如图,Y000~Y017,16个位,为源(S·、输入),D的低数位为目标(D·、输出),4个位。只要执行它的逻辑条件ON(图中M8000为常ON触点,故此条件满足),即执行本指令。为什么这里输入为16位,输出为4位?这与常数(n)的取值为4有关。
图1-62所示为三菱ENCO指令n的取值及其含义示意。
图1-62 三菱ENCO指令n的取值及其含义
当“源”(S)是“位”软元件时,n取值应小或等于8。输入位数是2的n次方。图1-61c的n为4,故输入为16位,对应的输出为4位。如n为8,则可输入256位。图1-62的n为3,故输入为8位,对应的输出为3位。该图输入M13ON,故D10的低3个位的取值为3,即第0、1位ON、03位OFF。
当“源”(S)是“字”软元件时,n取值应小或等于4。输入位数也是2的n次方。图1-62中n为3,故输入为8位,对应的输出为3位。该图输入D0的第3位ON,故D1的低3个位的取值为3,即第0、1位ON、02位OFF。
提示:如图1-61a所示,欧姆龙的DMPX指令更复杂,功能也更强。000·00~000·03,4个位,为源(第1个操作数,S),010·00~010·15为目标(第2个操作数、R),16个位。只要执行它的逻辑条件ON(图中p-on为常ON触点,故此条件满足),即执行本指令。为什么这里输入为4位,输出为16位?这与#0(第3个操作数、控制字的取值)有关。
图1-63所示为DMPX指令控制字的含义及应用实例。这里C有4个数位,其中数位0(n)指的是“源”字(S)中哪个数位用作输出,数位1(l)指的是有多少数位用作输出。自然,输出数位多,输入也多(4对16)。
如图1-63所示,这里n=2,l=1(0时用一个数位,1用2个,余类推)。所以,如S中第m位ON,则R的数位2的值为m,如S+1中第p位ON,则R的数位3的值为p。
控制字C的数位2,可为0,也可为1(老机型无此功能)。如为0,若S、S+1有多位ON,以最左(高)位ON为准。如为1,若S、S+1有多位ON,以最右(低)位ON为准。
控制字C的数位3,这里默认为0。如数位3取值为1,将进行256到8的译码。256为16个字组成的256个位。8为8个字节为一组,每组两数位十六进制数,其值变化范围为00~FF,正好对应于256位的00~255位。256到8译码,本质上与16到4是相同的,只是它的通道长(位数)不是16,而是256,位(号)不是0~F,而是两位十六进制数00~FF。但256~8最多只能进行两组,不像16~4可进行4组译码。
图1-64所示为DMPX指令256到8应用实例。
图1-63 DMPX指令控制字的含义及应用实例
图1-64 DMPX指令256到8应用实例
译码指令,除了以上,还有7段译码指令:可把BCD码译成7段码,用于数字显示。
ASCII码转换指令:把十六进制数译成ASCII码。
十六进制译码指令:把ASCII码译成十六进制码。
译码指令是很有用的。在数据处理时,要用到它,而且常用到它。当然,以上讲的也还不是译码指令的全部,也不是所有PLC都有以上讲的这些译码指令。具体使用此类指令,也可能还有一些细节,使用时可参阅有关帮助。
(5)数字运算指令
最常用的为1个字的BCD码(仅欧姆龙)或十六进制数的+、-、×、\指令。还有双字(8位BCD码)或十六进制+、-、×、\指令。性能稍高的PLC,还有浮点数的+、-、×、\指令。(www.xing528.com)
此外,多都还有加1、减1(欧姆龙为BCD码,而西门子、三菱为十六进制码)及进位位置位、复位指令。
为了适应在数据处理的需要,有的PLC还有在一组数中求最小值MIN、在一组数中求最大值MAX、求一组数的平均值AVG、求一组数的总和SUM等指令。
有的PLC还有三角函数、对数、指数,数值插值运算等指令。
随着PLC技术的发展,以及满足模拟量控制、脉冲量控制及通信的需要,运算指令越来越多,功能也越来越强。有的PLC可以进行PID运算,以适应比例、积分、微分控制算法的要求;可进行校验和运算,以适应通信数据校验的需要。
此外,还有种种逻辑运算指令。如“字与”“字或”“字异或”及“字同或”等指令。
提示1:欧姆龙PLC进行BCD码加减运算时,进位位(CY)也是其运算成员。它既是运算原始数据(1或0)之一,又要存放运算结果(有进位或借位时置1,否则置0)。如加运算是Au(被加数)+Ad(加数)+CY→CY,R(结果)。如减运算是Mi(被减数)-Su(减数)-CY→CY,R。但其新型机,也有不像上述那样,包含进位位的BCD码加、减指令。
提示2:西门子PLC除了用字、双字运算,还可用字节运算。西门子、三菱所有整数运算都是带符号十六进制码,如单字,其值在-32718~32717之间变化。
提示3:欧姆龙、三菱整数单字乘,其积要占两个字;双字乘,要占4个字。整数单字除,其商占一个字(存于指定结果字的地址中),其余数占一个字(存于指定结果字地址+1的地址中);双字除,其“商”占2个字(存于指定结果字的地址及其加1的地址中),其“余数”占2个字(存于指定结果字地址+2及加3的地址中)。而西门子PLC通用的乘、除指令,其运算的积、商所占的字长如同计算机,与参加运算的数相同。当其乘积(及加运算的和、减运算的差)超过相应字长,则出错,不能进行运算。数运算不记录余数,除0也出错。但它也有带有记录余数的除指令(DIV)。这指令的目的操作数的长度则是参加运算数长度的2倍。
提示4:为了正确使用运算指令,要使用好运算标志位,如进位位、溢出位、出错位、结果为0位等,以判断计算的正确性。对西门子PLC,还可利用执行指令后的ENO输出,观察运算是否执行。只是在各厂商、各型别的PLC间,这些标志位的含义多不大相同,如三菱FX机的借位标志(M8021),不是被减数比减数小ON,而是减的结果比-32768还要小才ON。
提示5:同样是专用计算指令,如三角函数,各家PLC对其处理是不同的。如SIN函数,当自变量大于360°(2π)时,FX2N机均按360°(2π)处理,而S7-200则与普通处理相同。所以,对一些运算指令,不妨先作些测试,然后再使用。
2.流程控制指令
PLC执行指令,一般是总是从零地址开始执行,依次进行,直到最后一个指令为止。而且,这个程序总是周而复始不断地重复着。但为了简化编程或减少扫描时间,或实现特殊控制,常常要改变程序的这个流程。
为此,PLC都设有控制程序流程的指令。主要有跳转、步进、循环、使用子程序及中断。
(1)跳转指令
欧姆龙机用的为JMP及JME。这两条配对使用。
JMP指令执行前,要建立逻辑条件。JME不要条件,只是表示跳转结束。要跳转的程序列于这两个指令之间。
当执行JMP时,若其逻辑条件为ON,则不跳转(注意:它与计算机汇编语言跳转含义相反),照样执行JMP与JME间的指令,如同JMP、JME不存在一样;若为OFF,则JMP与JME间的程序不执行,有关输出保持不变。JMP、JME可嵌套使用,但有时其层次要受限制的。JMP、JME编号使用时,配对的两个,编号要一致。
三菱与西门子PLC的跳转类似计算机汇编语言的跳转,若其逻辑条件为ON,则跳转到指定的标号的语句去执行。这种跳转情况稍复杂一些,使用时要小心。弄不好,易出现程序死循环。那是绝对不允许的。
图1-65所示为跳转指令使用示意。
图1-65 PLC的跳转指令使用示意
图1-65a为欧姆龙的跳转,0.00OFF时,JMP到JME之间的指令跳过,不执行。反之,执行。图1-65b为西门子的跳转,V500.1ON时,跳转到LBL2处,被跳过的指令不执行。反之不跳,JMP后的指令依次执行。图1-65c为三菱的跳转,X000ON时,跳转到标号P1处,被跳过的指令不执行。反之不跳,CJP后的指令依次执行。
不同厂商PLC跳转指令的差别,正如其它指令的差别一样,都只是大同小异。目的都是跳转,只是表达的方法,各有其不同而已。
GEPLC也有跳转指令。执行时在JUMP和LABLE之间的程序被忽略,不执行;其中间的子程序不被调用;其中间的计时器当前值被保持;其中间程序的执行结果保持上一次的执行结果。注意的是JUMP和LABLE的名字必须一致;任意几个JUMP和LABLE之间不能交叉使用;JUMP和LABLE可以嵌套使用,其嵌套深度由CPU的类型决定。
当程序需要分支执行时,使用到跳转,不仅可实现编程要求,而且还可减少程序扫描时间,提高程序的运行效率。
与跳转类似的还有互锁、主控指令。欧姆龙称互锁IL、互锁清除ILC指令。这两个指令在形式上与跳转指令类似,也是要配对使用。但功能不同,它不改变程序流程,只是像电路的“总开关”一样,影响IL与ILC间的程序执行,如图1-66所示。
图1-66中“正常执行”意指:“总开关”合上,不影响IL与ILC间的程序执行。“输出互锁”意指:“总开关”断开,IL与ILC间的程序执行条件全为OFF,即其间的输出全被互锁住。IL与ILC可嵌套使用。
图1-67所示为主控指令及其使用。
图1-66 互锁和互锁清除指令示意图
图1-67 主控指令及其使用
图1-67a、b所示为三菱PLC的主控指令及其使用。图1-67a为处于写状态时的梯形图。其中MC及MCR之间的指令执行,受执行条件X000(可以是别的)控制。X000 ON,则M0ON,之间的指令正常执行。否则,输出互锁。图1-67b所示为处于读状态时的梯形图。这里“总开关”的作用显示得很形象。指令中的N0为配对主控指令使用的编号。当然,MC与MCR的编号要一致。MC与MCR也可嵌套使用。
图1-67c所示为西门子S7-300、400的主控指令。MCRA(主控指令激活)及MCRD(主控指令激活停止)是配对的,只有在主控指令激活区中主控指令才有效。MCR<(主控继电器ON)及MCR>(主控继电器OFF)也是配对使用,而且也可嵌套,图1-67c为2层嵌套。
这里的几个主控指令的作用如本例是:当I0.0及I0.1 ON,则Q4.0及Q4.1的状态分别取决于I0.3、I0.4,如同这里不存在这几个主控指令一样;当I0.0ON及I0.1OFF,则Q4.1的状态取决于I0.4,如同这里不存在这第1层的MCR<、MCR>一样,而Q4.0则必OFF,不管I0.3的状态如何;当I0.0OFF,则Q4.0、Q4.1的均OFF,不管I0.3、I0.4以至于I0.1的状态如何。要说这里的特别之处是在MCR<之前,需先执行MCRA,而在MCR>之后,要执行MCRD。
GEPLC也有类似指令。它称之为分支指令(MCR、ENDMCR)。执行MCR指令逻辑条件不具备,则:MCR和END_MCR之间的程序被忽略,不执行;其中间的子程序不被调用;其中间计时器当前值被清;其中间所用的常开线圈被复位。而使用时要注意的是:MCR和END_MCR要指明名字,而且两者名字必须一致;任意几个MCR和END_MCR之间不能交叉使用;MCR和END_MCR可以嵌套使用,其嵌套深度由CPU的类型决定。
(2)步进指令
PLC多设有步进指令。步进指令有步程序入口、步(进)程序结束、步程序调用(激活)等。表1-8所示为这三家PLC的步进指令。
表1-8 PLC的步进指令
步进指令的要点如下:
1)只有已激活的步的程序才被扫描,才被执行;
2)在已激活步中,如激活了后续步,则自然处于非激活状态;
3)在程序中,可任意把某步激活;
4)当某步激活后,原来激活它的条件变化,不再对其产生影响。
步进程序可以顺序地被调用,直至最后一步。也可以分支调用,依条件按不同的分支进行。也可以平行调用,条件具备时,可同时调两个步程序,然后再依各的情况再一步步推进,直到退出步进程序,返回主程序。
图1-68所示为3家PLC用于步进指令及其的使用例子。
图1-68a为欧姆龙PLC步进指令及其使用。它用W0.00等(内部工作区)作为步标识。当0.00ON,步W0.00被激活,A段程序(在虚线处,程序未画出,下同)被扫描、被执行。这时,如0.01ON,则W0.01步激活,并退出W0.00步,B段程序被扫描、被执行。这时,如0.2ON,则W100.00步激活,并退出W0.01步。但,如程序中无此步,则意味着退出步进程序。欧姆龙无步及整个步进程序结束指令。
提示1:欧姆龙用的标识B可以是任何继电器。而其它两家PLC的标识B只能是状态继电器S。
提示2:欧姆龙PLC所有步进指令应放在其它主程序之后,子程序(见后)之前。如果主程序放在它之后,那这部分主程序将不执行;如把它放在子程序之后,它也将不执行。
图1-68b为西门子PLC步进指令及其使用。它用S0.0等作为步标识。当I0.0ON,步S0.0被激活,A段程序被扫描、被执行。这时,如I0.1ON,则S0.1步激活,并退出S0.0步,B段程序被扫描、被执行。这时,如I0.2ON,则S0.1复位,退出W0.1步。图1-68b每步程序都有结束指令(SCRE)。
图1-68 步进指令及其使用例子
图1-68c为三菱PLC步进指令及其使用。它用S0等作为步标识。当X000 ON,步S0被激活,A段程序被扫描、被执行。这时,如X001 ON,则S1步激活,并退出S0步,B段程序被扫描、被执行。这时,如X002ON,则S1复位,退出S1步。图1-68c中RET指令代表步进程序结束。
提示1:欧姆龙调新步时,旧的步先OFF后,然后,新的步才ON。即新的与旧的步从不同时工作。而三菱PLC、西门子PLC,则是新的步先ON后,旧的步才OFF,即新、旧的步将同时ON一个扫描周期。
提示2:三菱PLC步进程序,还可用SFC语言编程。
(3)循环指令
它由FOR和NEXT两条指令组成,配对使用。FOX为循环开始,而NEXT为循环结束。其功能是使这两条指令间的指令按指定的次数重复执行。重复多少次,则在FOR指令中指明。
FOR-NEXT循环可嵌套,但层数是有限制的。其限制的约定,随PLC型别而定。图1-69所示为3家PLC用于两层嵌套的使用例子。
从图1-69知,这里外层都是重复执行3次,而内层2,则执行2次。程序段A、B和C都是如下执行:A→B→B→C,A→B→B→C,A→B→B→C。
执行循环程序时,如需要临时退出,对欧姆龙PLC可在需退出处,用BREAK指令。若要从嵌套循环中退出,则需要多个(嵌套层数)BREAK指令。而西门子、三菱PLC则可用跳转指令,指定跳到循环外的某标号处。西门子还可用INDX值处理。每当执行一次循环,INDX值将加1。当它大于等于FINAL值时,也可退出循环。此外,它的FOR指令还要求先设置逻辑条件,如图1-69b,I2.0ON(对1)及I2.1ON(对2)即为它们的逻辑条件。
图1-69 FOR-NEXT指令及其嵌套使用
(4)子程序
子程序指令总是含子程序入口、子程序结束标志及子程序调用等指令。表1-9所示为3家PLC用的子程序指令。表中N为子程序标号。
表1-9 PLC子程序指令
子程序指令的要点如下:
1)子程序入口到子程序结束指令间的程序为子程序;
2)在一个程序中,可以有多个子程序,用标号N相区别;
3)不是子程序的其它程序为主程序;
4)西门子PLC的子程序安排在不同标号的单独程序模块中,因此,它无入口指令,也无须结束指令;
5)欧姆龙、三菱PLC子程序安排在主程序之后END指令之前,但三菱PLC的主程序之后,要加主程序结束指令(FEND),子程序则放在FEND指令之后。
6)在主程序中,可用相应指令调用子程序,被调用一次,则被扫描、被执行一次,可多次使用;
7)在子程序中,也可用相应指令调用其它子程序,但不能调自身,即可嵌套,但不能递归。调的层数也是受限制的,其限制的约定,随PLC型别而定;
8)子程序一旦调用,总是从入口直到结束。但西门子可用RET指令,于中途退出,而其它两家PLC则可用跳转指令中途退出。
图1-70所示为3家PLC子程序指令及其使用。
图1-70 子程序指令及其使用
从图1-70知,当调用子程序逻辑条件成立(如图中0.00、I0.0、X000 ON),则都将转去执行子程序,执行后,再接着执行主程序的后续部分。如图1-70中0.02OFF及I0.2、X002ON,则在子程序中,执行A部分程序后,中途退出;否则,执行A、B两部分程序都执行完,才退出。
提示:所有的子程序都要安排在主程序的后面,在END指令之前。不然,子程序后的主程序指令将不被执行。
对一些多任务编程的PLC,其子程序还有全局与局部之分。局部子程序只能用于本任务。要想所有任务都能调用,要用全局子程序。
如欧姆龙CJ系列机,全局子程序指GSBN(751)和GRET(752)之间的程序段。调用指定编号的全局子程序,要用全局子程序调用指令GSBS(750)。
三菱Q系列等中、大型机除了用CALL正常调用子程序。还有FCALL(输出OFF调用)、ECALL(程序文件之间子程序调用)、XCALL等指令。
提示1:西门子S7-200机的子程序可带参数。参数用子程序的局部变量自行定义。参数有子程序输入(IN)、输出(OUT)及输入、输出(IN-OUT)兼而有之共3种。在调子程序时,输入参数要写在输入端;输出参数要写在输出端;输入、输出参数既要写在输入端,又要写在输出端。当然,如不定义局部变量,将不带参数。具体运用实例见本书第2章第6节。
提示2:欧姆龙、三菱小型机的子程序不带参数。但在调用前可作预处理,调后再作后处理,也可起到带参数的作用。欧姆龙PLC还有宏调用,类似于带参数子程序。只是,它的参数使用限制较多。
提示3:三菱Q系列等中、大型机的子程序也可带参数。但位参数只有输入、输出。并要用专用内部器件,即功能软元件FX(入)、FY(出)、FD(寄存器)作形式参数。同时也有宏。宏的形式参数也要用专用内部器件(VX、VY、VD)。
(5)中断
中断也是调子程序,但它不是靠指令调,而是靠中断事件调。且调的子程序编号与所发生的事情对应。这些子程序有时还称为中断服务程序。
PLC中断事件可以来自外部,也可来自内部。前者称外中断,后者称内中断。
外部中断用输入点。当可中断工作(取决于机型及设定)的输入点,从OFF到ON的时,则发生与其对应的中断事件,并调相应的中断服务程序。每发生一次中断事件,则调一次中断服务程序。有了这样中断,可缩短PLC对该输入信号的响应时间。
此外,高速计数信号输入,也会产生多种中断。如计数中断,可输入高速脉冲的输入点(取决于机型及设定),输入高速脉冲会自动中断计数;再如比较中断,中断计数后,会自动进行中断比较;最后,还可根据中断比较结果,调用相应的中断子程序。
另外,有的PLC(如S7-200机)还有通信中断。收到字符,或发送字符及出错等,都会引起相应的中断。
内部中断的事件来自PLC内部。典型的内部中断为定时中断,经设定可准确定时运行相应的中断程序。
为了处理好中断,提高程序的控制可靠性与效率,PLC提供了有关的中断处理指令。表1-10所示为3家PLC的一些有关的中断指令。
表1-10 PLC的一些有关的中断指令
注:“∗”仅用于小型机定时中断;“∗∗”中断事件与子程序的关系是确定的。
中断允许、禁止指令用于确定在运行程序时是否允许中断。当程序的某一部分不允许中断时,可用中断禁止指令;某一部分允许中断时,可用中断允许指令。
提示:欧姆龙PLC默认为中断允许。而三菱、西门子PLC则默认中断不允许。为此,后者要使用中断,需先允许中断,而前者做好有关设定就可以了。
设定中断屏蔽是为了确定是否允许某个内、外中断事件产生。如可外中断的输入点,可设定其为从OFF到ON产生中断,也可相反,也可不让其产生中断。
提示:中断允许与中断屏蔽是两个概念,前者是指,所运行的程序是否允许接受中断,后者是指,是否允许中断事件出现后产生中断。前者可用指令处理,而后者多为通过相关设定处理。
PLC处理中断事件是有个过程的。当发生中断事件时,PLC总是先记录发生的事件,并对其按优先级排队。优先级高的先执行,它执行完了,再执行优先级低的。所有中断任务处理完了,再转回执行正常的循环程序。一般讲,优先级与中断的任务号是对应的。中断编号越小,优先级越高。
要注意的是已记录但未执行的中断,其后又发生相同的事件,PLC对此将不理睬。所以,不是发生的所有中断事件都会处理的。另外,对已作记录,但未执行的外中断任务,可用CLI指令取消。
提示1:三菱中断子程序入口编号开始字符为I(不同的事件,有不同的编号),而不是P;子程序结束指令为IRET,而不是SRET。
提示2:对多任务编程或模块化组织的PLC,它不调子程序,而是调用POU。
如果在一个I/O中断任务正在执行时,接收到一个不同的中断输入,输入的中断号在内部被记录,直至当前任务和其它较高优先级别的任务执行完毕。
以上只是对有关PLC的有关指令系统作些简要介绍。只是希望读者能从总体上,或从功能上理解它。至于指令的细节,请参阅有关说明书。
提示:弄通PLC指令,除了仔细阅读有关说明书,最好的方法是对指令作仿真或联机实际测试。在实际测试中理解要点与细节。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。