除基本逻辑指令外,OMRON公司C系列plc还有若干条功能指令,或称专用指令。因机型不同所使用的功能指令数量也不同,如C20P~C60P有功能指令25条,C500有功能指令56条,C200H有功能指令133条,C1000H、C2000H有功能指令162条。档次越高,功能指令数越多,因而控制功能越强。
与基本指令不同,功能指令在编程器上没有与其对应的专用键,输入功能指令时,先按下FUN键,然后输入功能代码。不同的功能代码有不同的助记符,以实现不同的功能。
1、程序结束指令END(FUN 01)
END指令在梯形图中的符号如图1所示。
图1 END指令在梯形图中的符号
在程序结束时,必须使用END指令。一般P型机对用户程序的扫描范围为:从0000到1193步循环扫描,加入END指令可使程序只在0000~END之间循环扫描,缩短了循环周期。另外,在程序调试时利用END指令分段调试,使调试程序变得简单方便。
2、分支开始指令IL(FUN 02)和分支结束指令ILC(FUN 03)
IL和ILC指令在梯形图中的符号如图2所示。
图2 IL和ILC指令在梯形图中的符号
如果梯形图中出现具有分支的多路输出程序,且分支电路后的每个输出支路至少有一个串联触点时,可用分支开始指令IL编程,分支结束时用ILC指令使IL指令复位,回到前一级逻辑母线。IL指令和ILC指令在程序中要求配合使用,但也允许在不会引起程序混乱的前提下用一个ILC和多个IL配合使用,此时在执行程序检查时会在编程器上显示出错提示“IL-ILC ERR”,但这个错误不会影响程序的正常执行。
当IL的条件为OFF时,IL和ILC之间的各继电器状态为:输出继电器、 辅助继电器断开,定时器复位,计数器、保持继电器、锁存继电器保持原状态不变。当IL的条件为ON时,IL和ILC之间的各继电器正常工作。
在梯形图程序中,允许出现多重分支程序,即分支嵌套。在小型PLC中,允许进行分支嵌套的次数不应超过8次。图3所示是一个含有三重分支的程序。
图3中,在分支处形成一个新的逻辑母线,因此从这个新逻辑母线开始的指令都要用LD或LD NOT指令。如0000为OFF,0501、0502、0503和0504均为OFF,CNT02正常工作……如0000为ON,且0001或0004为ON、0002或0005为ON时,程序正常执行。当0000为OFF时,不满足执行条件,IL~ILC间的程序不被执行,由此可以看出来采用IL~ILC编程比采用暂存继电器TR可以使程序更加简练。
图3 IL和ILC指令
3、跳转开始指令JMP(FUN 04)和跳转结束指令JME(FUN05)
JMP和JME指令在梯形图中的符号如图4所示。
如果JMP的条件为ON时,程序正常执行,即相当于没有JMP和JME指令。如果JMP的条件为OFF,则执行跳转,即不执行JMP~JME间的程序。
图5中,如1001为ON,程序执行顺序为A→B→C,否则为A→C。
图4 JMP和JME指令在梯形图中的符号
图5 跳转指令
如果JMP的条件为OFF,JMP~JME间的各继电器状态为:输出继电器、辅助继电器、保持继电器、锁存继电器保持跳转前的状态不变。定时器复位,停止计时。计数器中断计数,保持跳转前的计数值不变。
图6中,当1000为ON时,程序正常执行。当1000为OFF时,开始跳转,直接执行JME之后的程序。在此期间,无论1001是ON或OFF,0500均保持跳转前的ON/OFF状态不变;定时器TIM00复位停止工作,即使1002为ON,TIM00也不会工作;计数器CNT03则中断计数,保持跳转前的计数值不变。
图6 JMP和JME指令
与分支指令一样,JMP和JME一般也要求配合使用,也允许不超过8次的嵌套。也允许多个JMP和一个JME配合使用(此时程序检查时会在编程器上出现“JMPJMP ERR”,但不影响程序正常运行)。
4、锁存器指令KEEP(FUN 11)
KEEP指令在梯形图中的符号如图7所示。
图7 KEEP指令在梯形图中的符号
XXXX为继电器号,可使用的继电器有输出继电器、 内部辅助继电器和保持继电器。S端为置“1”输入端,如果S端为ON,则继电器XXXX得电并自锁。R端为置“0”输入端(即复位端),如果R端为ON,则继电器XXXX解除自锁(失电)。当R端和S端同时出现信号时,复位优先。
KEEP指令可以使一个普通的继电器具有锁存功能,称之为锁存继电器。利用KEEP指令很容易实现类似继电器控制线路中的自锁(或自保持)功能,如图8中0002为ON时,0500变为ON并自保持,即使0002由ON变为OFF,只要0003为OFF,0500始终为ON。如果0003为ON,0500就变为OFF。图8(b)的作用与图8(a)相同。
图8 KEEP指令
KEEP指令具有自锁功能,但必须注意的是KEEP指令本身并无掉电保持功能,图8(a)中如程序运行中电源掉电时,0500将变为OFF,如欲在电源发生故障后又恢复送电时电路的状态保持不变,可用保持继电器作为锁存器。图9所示的报警电路中,0002、0003和0004为报警条件,0005为报警解除,输出端子0500接报警设备。
图9 KEEP指令的应用
5、前沿微分指令DIFU(FUN 13)和后沿微分指令DIFD(FUN 14)
DIFU和DIFD指令在梯形图中的符号如图10所示。
图10 DIFU和DIFD指令在梯形图中的符号
XXXX为继电器号,DIFU和DIFD指令可使用的继电器为输出继电器、内部辅助继电器和保持继电器。
DIFU指令的功能是在满足条件的输入信号前沿,使指定的继电器ON一个扫描周期。DIFD指令的功能是在满足条件的输入信号后沿,使指定的继电器ON一个扫描周期。DIFU和DIFD指令在一个程序中最多可使用的数量都是48个。
图11说明了DIFU和DIFD的工作情况。
图11 DIFU和DIFD
6、移位寄存指令SFT(FUN 10)
SFT指令在梯形图中的符号如图12所示。
IN端为数据输入端,CP端为脉冲输入端,R端为复位输入端。
SFT指令的功能相当于一个串行输入移位寄存器,其功能是将从首通道到末通道的n个通道的n×16 位数据按位移位。
图12 SFT指令在梯形图中的符号
SFT指令可使用的通道可以是输出继电器、内部辅助继电器和保持继电器通道。首通道和末通道可以是同一个通道,也可以不是同一通道(此时要求首通道号小于末通道号,且要保证首通道和末通道是同一类通道)。
用SFT指令编程时必须按数据输入、移位脉冲输入、复位输入、SFT、首通道号、末通道号的顺序进行编程。数据移位是由脉冲输入CP端控制,CP端每由OFF→ON一次(即在移位脉冲输入的上升沿),从首通道至末通道的所有“位”均将自己的数据(0或1)传给下一“位”,首通道的第一位(即首通道的第00位)的状态取决于移位脉冲的上升沿所对应的数据输入IN端的状态,即在移位脉冲输入的上升沿所对应的时刻,如果IN端为ON,则首通道的第00位也为ON,否则为OFF。当复位输入R端变为ON时,所有被移位通道中的数据同时被置“0”。如果移位通道是保持继电器通道,则电源掉电时通道中的内容保持不变。
图13中,在复位输入0503为OFF时,0500(即首通道的第一位)的状态取决于数据输入IN(即1000),其它各位在每个时钟脉冲CP的上升沿依次移位。在复位输入0503为ON时,所有位均被置“0”。
图13 SFT指令
7、通道移位指令WSFT(FUN 16)
WSFT指令在梯形图中的符号如图14所示。
图14 WSFT指令在梯形图中的指令
WSFT是通道移位指令,也称为并行移位指令,它以通道(16位)为单位进行移位,所以必须设置两个数据:开始通道号D1和结束通道号D2。WSFT可使用的通道为输出继电器通道、 内部辅助继电器通道、保持继电器通道及数据存储通道。开始通道和结束通道必须是同一类通道,并要保证开始通道号小于结束通道号。(http://www.ippipp.com/版权所有)当移位条件变为ON时,CPU每扫描一次程序就执行一次WSFT指令,进行一次通道移位,执行WSFT时,开始通道的内容移到其下一通道(同时开始通道的内容变为0),下一通道的内容又移到其下一通道……结束通道的内容被其上一通道覆盖。如果只想执行一次通道移位操作,应该使用DIFU或DIFD命令。 如图15所示。
图15 WSFT指令
图15中,设在执行WSFT指令之前10、11和12通道的内容分别为:
8、十进制→二进制转换指令BIN(FUN 23)和二进制→十进制转换指令BCD(FUN 24)
BIN和BCD指令在梯形图中的符号如图16所示。
图16 BIN和BCD指令在梯形图中的符号
BIN指令的功能是将源通道S中的4位十进制数(BCD码)转换成16位二进制数,再存放到目的通道D中。
BCD指令的功能是将源通道S中的16位二进制数转换成4位十进制数(BCD码),存放到目的通道D中去。
BIN和BCD指令可使用的源通道为:输入继电器通道、输出继电器通道、定时器/计数器通道、保持继电器通道和数据存储器通道,可使用的目的通道为:输出继电器通道、保持继电器通道和数据存储器通道。执行BIN或BCD指令时,如转换的结果为“0”,则1906为ON。
图17所示是当0002为ON时,将10通道中的4位十进制数(BCD码形式)转换为16位二进制数,存放到HR1通道中去。如执行BIN指令前10通道存放的数据为3721(见表1),则执行BIN指令后HR1如表2所示。
图17 BIN指令
表1 CH10
表2 HR1
9、比较指令CMP(FUN 20)
CMP指令在梯形图中的符号如果18所示。
图18 CMP指令在梯形图中的符号
CMP为比较指令,其功能是将一个通道的内容或一个4位十六进制常数(S1)与另一个通道的内容或4位十六进制常数(S2)进行比较。S1和S2中至少要有一个是通道内容,不能两个都是常数。
CMP指令可使用的通道或常数为输入/输出继电器通道、 内部辅助继电器通道、保持继电器通道、定时器/计数器通道数据存储通道及0000~FFFF的常数。
比较后,如果S1>S2,则专用内部辅助继电器1905为ON;如果S1=S2,则专用内部辅助继电器1906为ON;如果S1<S2,则专用内部辅助继电器1907为ON。
图19说明了一个将定时器的当前值与一个通道的内容相比较的例子。
图19 CMP指令
10、传送指令MOV(FUN 21)和取反传送指令MVN(FUN 22)
MOV和MVN指令在梯形图中的符号如图20所示。
MOV指令将源通道S中的内容或一个4位十六进制常数传送到目的通道D中去;而MVN指令则是先将源通道S中的内容取反后(即0→1,1→0)再传送到目的通道中去。MOV及MVN指令使用的通道和常数如表3所示。
图20 MOV和MVN指令在梯形图中的符号
表3 MOV及MVN指令使用的通道和常数
执行MOV指令时,如果源通道S中的内容全为“0”,或执行MVN指令时源通道S中的内容全为“1”,则专用内部辅助继电器1906(零标志)为ON。
图21中,当0002为ON时,CPU每扫描一次程序,就执行一次MOV及MVN指令,如果希望0002每得电(ON)一次只进行一次传送,应使用DIFU或DIFD指令。
图21 MOV、MVN指令
应用传送指令还可以实现在程序运行时改变定时器和计数器的设定值(此时通道内容必须是4位BCD码,否则1903为ON,使MOV指令不能执行),如图22所示。
图22 用MOV指令改变定时器的设定值
图22所示是把HR1通道的内容作为定时器TIM01的设定值,当0002为ON时,TIM01的设定值为10 s,10 s后输出继电器0500变为ON。当0003为ON时,TIM01的设定值为30 s,30 s 之后0500变为ON。如果0002和0003同时为ON,TIM01不动作。
11、置进位标志指令STC(FUN 40)和清进位标志指令CLC(FUN 41)
STC和CLC指令在梯形图中的符号如图23所示。
STC指令把进位标志1904置为ON。
CLC指令把进位标志1904置为OFF。在执行ADD和SUB指令前需用CLC指令对进位标志位进行清零。
图23 STC和CLC指令在梯形图中的符号
12. 加法指令ADD(FUN 30)和减法指令SUB(FUN 31)
ADD和SUB指令在梯形图中的符号如图24所示。
图24 ADD和SUB指令在梯形图中的符号
加法指令ADD用于两个4位数的相加,即将被加数通道S1中的内容加上加数通道S2中的内容或一个常数,其结果送到和通道D。
减法指令SUB用于两个4位数的相减,即将被减数通道S1中的内容减去减数通道S2中的内容或一个常数,其结果送到差通道D。
ADD及SUB指令使用的通道和常数如表4所示。
表4 ADD及SUB指令使用的通道和常数
使用ADD及SUB指令时应注意如下问题:
(1)要求通道内容须为BCD码,否则1903变为ON,ADD及SUB指令不能执行。
(2)在执行ADD或SUB指令前,必须先用CLC指令对进(借)位标志位1904进行清零,否则进位标志位也要参加运算。
(3)ADD和SUB指令都是在条件满足时CPU每扫描程序一次就执行一次,如果要求只执行一次加、 减法操作,应使用DIFU或DIFD指令。
两个4位数相加后,其结果可能是4位或5位数,如果进位标志位(1904)为ON,则其和为5位数,可用传送指令MOV将进位标志位存放待用,如图25所示。
图25 ADD指令及进位
在执行SUB指令时,如差值为负,则D通道的内容为差值的反码。为得到差值的原码,可再执行一次用常数0000减去差值反码的减法操作,其结果仍可以送到D通道中。
在图26中,如果12通道的内容为1234,则SUB指令的执行过程见右图。
图26 MLPX和DMPX指令在梯形图中的符号
13、译码指令MLPX(FUN 76)和编码指令DMPX(FUN 77)
MLPX和DMPX指令在梯形图中的符号如图27所示。
图27 MLPX和DMPX指令在梯形图中的符号
MLPX指令的功能是将源通道S中的4位十六进制数的一位或几位进行译码,其结果送到目的通道D的对应位上去。MLPX指令可使用的通道和常数如表6-10所示。
表5 MLPX指令可使用的通道和常数
在MLPX指令中的数字目标使用一个4位数,只有低2位有效。最低位表示从源通道S的第几位数字位开始译码:0、1、2、3表示从第0、1、2、3位开始译码。次低位表示需要译码的位数:0、1、2、3分别表示要译1、2、3、4位。如数字目标为0023,则表示从源通道S的第3位开始译码,共译3位,它们分别是第3位、第0位、第1位。如果要求译码的位数多于1位,则存放译码结果的目的通道D也应多于1个,在程序中的目的通道D仅为存放第一个译码结果的通道号,其它位的译码结果依次存放到通道D+1,D+2,…中。在MLPX指令中,由数字目标指定的源通道和目的通道的对应关系见图28。
图28 MLPX指令中源通道和目的通道的对应关系
图28中,如果10通道中的内容为18A5,其执行过程如图29所示。
图29 MLPX指令
图30 MLPX指令的执行过程
DMPX指令的功能是把源通道S中内容为ON的最高一位是第几位,编为4位二进制数传送到目的通道D中由数字目标指定的位置中去。DMPX指令可使用的通道及常数同MLPX指令。
DMPX指令中的数字目标为一个4位数,低2位有效。最低位表示从目的通道D中的哪一位开始存放编码结果:0、1、2、 3分别表示从通道D中的第0、1、2、3位开始存放编码结果。(http://www.ippipp.com/版权所有)次低位表示要被编码的源通道个数:0、1、2、3分别表示有1、 2、3、4个源通道要被编码。当多于1个源通道要被编码时,程序中的源通道号S表示相邻几个通道的第一个源通道。由数字目标指定的源通道和目的通道的对应关系见图31。
图31 DMPX指令中源通道和目的通道的对应关系
图32中,如执行DMPX指令前10通道和11通道的内容分别为018A和196F,编码指令的工作情况见图33,目的通道中未被编码的位保持其原状态不变。
图32 DMPX指令
图33 DMPX指令的执行过程
14、空操作指令NOP(FUN 00)
NOP指令是让该步序或当前指令不起作用的空操作指令。预先在程序中设置NOP指令,在修改和增加指令时,可使步序号的更改减到最低程度,也可以用NOP指令取代已写入的指令来修改程序。