三菱PLC技术完全攻略
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1.3 应用指令

程序编制过程中,为了进一步简化编程、增强PLC的应用功能和范围,常采用应用指令进行编程。FX系列PLC共有136条应用指令,根据型号不同,所对应的应用指令有所不同,这里将对FX系列PLC中常用的应用指令进行说明。

3.1.3.1 程序流程指令

PLC用于程序流程控制的常用应用指令共有10条,见表3-10。

表3-10 程序流程指令

(1)条件跳转指令[CJ(FNC00)]

①指令格式 该指令的指令名称、助记符、功能号、操作数和程序步长如表3-11所示。

表3-11 条件跳转指令的指令格式

②指令说明 该指令为条件跳转指令,指令说明如图3-12所示。在图3-12中,若X0为ON,程序跳转到标号P1处;若X0为OFF,则按顺序执行程序;这称为条件转移。当执行条件为M8000时,称为无条件转移。指令中的跳转标记P□□不可重复使用,但两条跳转指令可以使用同一跳转标记。使用CJP跳转指令时,跳转只执行一个扫描周期。编程时,跳转标记占一行,当程序需要直接跳转到END指令时,可以将跳转标记指定为P63,而无需在END前标记P63。CJP指令为该指令的脉冲执行型指令。

图3-12 条件跳转指令的指令说明

③应用举例 应用举例如图3-13所示。它采用CJ指令完成手动和自动控制切换的程序,其中X0为方式切换开关,X1为计数脉冲输入,M8013为1Hz脉冲信号,X10为清零开关。

图3-13 条件跳转指令应用举例

当X0为OFF时,执行手动程序,X1输入3个脉冲信号,Y0有输出;当X0为ON时,执行自动程序,Y1为1Hz脉冲状态指示输出,C1对M8013计数,计满5个数时,Y2有输出。

(2)子程序调用指令[CALL、SRET(FNC01、FNC02)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长,如表3-12所示。

表3-12 子程序调用指令的指令格式

②指令说明 CALL指令为子程序调用指令,指令的基本使用格式如图3-14所示。子程序调用CALL指令一般安排在主程序中,子程序的结束用FEND指令。子程序的开始以PXX指针标记,最后由SRET指令返回主程序。在图3-14中,X0为调用子程序的条件。当X0为ON时,调用P1~SRET段子程序,并执行;当X0为OFF时,程序顺序执行。CALLP指令为该指令的脉冲执行型指令。

图3-14 子程序调用指令说明

③应用举例 应用举例如图3-15所示,子程序P1的调用因采用CALLP指令,是脉冲执行方式,所以在X0由OFF→ON时,仅执行一次。即当X0从OFF→ON时,调用P1程序。P1子程序执行时,若X11=1,又要调用P2子程序并要执行,当P2子程序执行完毕后,又要返回到P1原断点处执行P1程序,当执行到SRET处时,又返回到主程序。

图3-15 子程序调用指令的应用举例

(3)中断指令[IRET、EI、DI(FNC03、FNC04、FNC05)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-13所示。

表3-13 中断指令的指令格式

②指令说明 在程序中的应用如图3-16所示。EI~FEND为允许中断区间,I001、I101分别为中断子程序I和中断子程序Ⅱ的指针标号。FX系列PLC中断有三类中断:一是外部输入中断;二是内部定时器中断;三是计数器中断方式。中断方式是计算机所特有的一种工作方式,是指在执行主程序的过程中,暂停主程序的执行而去执行中断子程序。中断子程序的功能实际上和子程序的功能一样,也是完成某一特定的控制功能。但中断子程序又和子程序有所区别,即中断响应(执行中断子程序)的时间应小于机器的扫描周期。因而,中断子程序的条件都不能由程序内部安排的条件引出,而是直接将外部输入端子或内部定时器作为中断的信号源。

图3-16 中断指令说明

中断标号共有15个,其中外部输入中断标号有6个,内部定时器中断标号有3个,计数器中断标号有6个,如表3-14~表3-16所示。

表3-14 输入中断标号指针

表3-15 定时器中断指针

注:M8050~M8058=“0”允许,M8050~M8058=“1”禁止。

表3-16 计数器中断标号指针

从表3-14中可以看出,对应外部中断信号输入端子有X0~X5(6个)。每个输入只能用一次,这些中断信号可应用于一些突发事件的场合。

定时器中断有3个中断标号(适用于FX2N、FX3U,参见表3-15),分别为I6××~I8××,××分别为10~99的整数,时间单位为ms,如I610则意味着每10ms执行一次中断。若在程序中要对某一中断信号源禁止封锁,将对应的某一特殊内部继电器(M8050~M8058)置“1”即可。对于计数器中断信号源,仅适用于FX2N、FX3UC,其中,中断标号指针如表3-16所示。当M8059=“1”时,禁止所有的计数器中断。当M8059=“0”时,允许计数器中断。当多个中断信号同时出现时,中断指针号小的有优先权。IRET为中断子程序返回指令。每个中断子程序后均有IRET作为结束返回标志。中断子程序一般出现在主程序后面。中断子程序可以进行嵌套,最多为二级。

③应用举例 应用举例如图3-17所示,为一外部输入中断子程序。在主程序执行时,若特殊内部继电器M8050=0,标号为I001的中断子程序允许执行。当PLC外部输入端X0有上升沿信号时,中断就执行一次,执行完毕后,返回主程序。在本程序中,Y10由M8013驱动。每秒闪烁一次,而Y0输出是当X0在上升沿脉冲时,驱动其为“1”信号,此时Y11输出就由M8013当时状态所决定。

图3-17 外部输入中断子程序

当X10=1时,使M8050为“1”状态,则I001中断禁止。

(4)子程序结束指令[FEND(FNC06)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-17所示。

表3-17 主程序结束指令的指令格式

②指令说明 该指令为子程序结束指令,执行此指令,功能同END指令。在跳转(CJ)指令的程序中,用FEND作为子程序及跳转程序的结束。但在调用子程序(CALL)中,子程序、中断子程序应写在FEND指令之后,且其结束端均用SRET和IRET作为返回指令。

注意:若FEND指令在CALL或CALLP指令执行之后、SRET指令执行之前出现,则程序认为是错误的。另一类似的错误是FEND指令处于FOR-NEXT循环之中。子程序及中断子程序必须写在FEND与END之间,若使用多个FEND指令的话,则在最后的FEND与END之间编写子程序或中断子程序。

(5)监视定时器刷新指令[WDT(FNC07)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-18所示。

表3-18 监视定时器刷新指令的指令格式

②指令说明 WDT指令是在PLC顺序执行程序中,进行监视定时器刷新的指令。当PLC的运算周期超过监视定时器规定的某一值时,PLC将停止工作,此时CPU的出错指示灯亮。因此,编程过程中插入WDT指令,可以检测PLC的运行周期是否超过规定的扫描周期数值,即监视定时器值。WDTP为脉冲执行型指令。若要改变监视定时器的数值,只需改变D8000的内容即可。

(6)循环指令[FOR、NEXT(FNC08、FNC09)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-19所示。

表3-19 循环指令的指令格式

②指令说明 循环次数n由FOR指令指定,在1~32767时有效,在n为-32767~0时,n将当作1处理。当n=K4,FOR-NEXT循环执行4次;若n=D0,并且D0=5时,对应的FOR、NEXT循环执行5次。FOR、NEXT循环次数一共可以嵌套5层。

应当注意的是,循环次数多时,会延长PLC的扫描周期,可能出现监视定时器出错;编写程序时,若NEXT指令编写在FOR指令之前,或FOR指令无对应的NEXT指令,或在FEND、END指令以后再有NEXT指令,或FOR指令与NEXT指令的个数不相等时,都会出错。

3.1.3.2 传送指令

其常用的程序流程指令有10条,如表3-20所示。

表3-20 程序流程指令

(1)传送指令[MOV(FNC12)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-21所示。

表3-21 传送指令的格式指令

②指令说明 图3-18所示为MOV指令的基本格式,MOV指令的功能是将源数据送到目标数据中,即当X0为ON时,[S.]→[D.]。当X0断开时,指令不执行,D10数据保持不变。MOV指令为连续执行型,MOVP指令为脉冲执行型。编程时若[S.]源数据是一个变量,则要用脉冲型传送指令MOVP。对于32位数据的传送,需要用DMOV指令。

图3-18 传送指令说明

(2)移位传送指令[SMOV(FNC13)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-22所示。该指令仅适用于FX2N、FX3UC。

表3-22 移位传送指令的指令格式

②指令说明 如图3-19所示,当X0为ON时,先将数据寄存器D1中的二进制数转换成BCD码,然后把BCD码传送至数据寄存器D2中,再把D2中的BCD码数转换成二进制数。

图3-19 移位传送指令说明

图3-19所示,将源数据(D1)中的数据(已转换成BCD码)第4位(103位,因为m1=K4)起的低2位部分(103位与102位,因m2=K2)向目标D2中传送,传送至D2的第3位和第2位(102位与101位,因n=K3)。(D2)中的103、101位源数据不变。传送完毕后,再转换成二进制数。

若BCD码的数值超过9999将会出错。SMOVP指令为该指令的脉冲执行型指令。

(3)求反传送指令[CML(FNC14)]

①指令格式 该指令的指令名称、助记符、操作数及程序步长如表3-23所示。该指令仅适用于FX2N、FX3UC。

表3-23 求反传送指令的指令格式

②指令说明 图3-20所示为求反传送指令功能说明。当X0为ON时,将[S.]的数据求反后传送到[D.],即把操作数源数据(二进制数)每位取反后送到目标数据中。若源数据为常数时,将自动地转换成二进制数。CML为连续执行型指令,CWLP为脉冲执行型指令。当进行32位数据传送时,采用DCML指令。本指令可作为PLC的输入求反或输出求反指令。

图3-20 求反传送指令说明

(4)块传送指令[BMOV(FNC15)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-24所示。

表3-24 块传送指令的指令格式

②指令说明 块传送指令是成批传送数据,将操作数中的源数据[S.]传送到目标数据[D.]中,传送的长度由n指定。如图3-21所示,当X0为0N时,将D7、D6、D5的内容传送到D12、D11、D10中。在指令格式中操作数只写指定元件的最低位地址,如D5、D10。BMOVP为脉冲执行型指令。当进行32位数据传送时,采用DBMOV指令。

图3-21 块传送指令说明

注:a.若块传送指令传送的是位元件的话,则目标数与源操作的位数要相同;

b.在传送数据的源与目标地址号范围重叠时,为了防止输送源数据在未传输前被改写,PLC将自动地确定传送顺序;

c.当特殊内部继电器M8024置于ON时,BMOV指令的数据传送将变反向传送,即从[D.]→[S.],若M8024再次为OFF时,块传送指令仍恢复到原来的功能。

(5)多点传送指令[FMOV(FNC16)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-25所示。该指令仅适用于FX2N、FX3UC。

表3-25 多点传送指令的指令格式

②指令说明 多点传送指令的功能为数据多点传送,其功能说明如图3-22所示。当X0为ON时,将同一数据值K1分别传送至D0~D4(n=K5)中。如果元件号超出允许的元件号范围,数据仅传送到允许的范围内。FMOVP为脉冲执行型指令。当进行32位数据传送时,采用DFMOV指令。

图3-22 多点传送指令说明

(6)数据交换指令[XCH(FNC17)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-26所示。该指令仅适用于FX2N、FX3UC。

表3-26 数据交换指令的指令格式

②指令说明 数据交换指令功能是将两个指定的目标数据进行相互交换,如图3-23所示。当X0为ON时,D0与D1的内容进行互换。若执行前(D0)=100、(D1)=150,则执行该指令后,变为(D0)=150,(D1)=100。XCHP为脉冲执行型指令。当[D1.]与[D2.]为同一地址号,且特殊继电器M8160接通时,则同一地址对应元件的低8位与高8位进行互换,32位指令的互换为高16位和低16位互换。当进行32位数据交换时,采用DXCH指令。

图3-23 数据交换指令说明

(7)BFM读出指令[FROM(FNC78)]

①指令格式 该指令的指令名称、助记符、功能号、操作数和程序步长如表3-27所示。

表3-27 特殊功能模块数据读出指令的指令格式

②指令说明 该指令为特殊功能模块缓冲存储器数据读出指令。当执行条件满足时,通过FROM指令将编号为m1的特殊功能模块从模块缓冲存储器(BFM)编号为m2开始的n个数据读入PLC,并存入[D.]指定元件中的n个数据寄存器中。

m1表示特殊功能模块号,m1=0~7。

m2表示缓冲寄存器(BFM)号,m2=0~32767。

n表示待传送数据的字节数,n=1~32767。

接在FX2N基本单元右边扩展总线上的功能模块(例如模拟量输入单元、模拟量输出单元、高速计数器单元等),从最靠近基本单元那个开始,顺次编号0~7。

FROMP为脉冲执行型指令。当进行32位数据读出时,采用DFROM指令。

(8)BFM写入指令[TO(FNC79)]

①指令格式 该指令的指令名称、助记符、功能号、操作数和程序步长如表3-28所示。

表3-28 特殊功能模块数据写入指令的指令格式

②指令说明 该指令为PLC向特殊功能模块缓冲器BFM写入数据的指令。当条件满足时,将PLC指定的传送源数据送至特殊功能模块中指定的BFM号中,传送字数在指令中给定。

m1表示特殊功能模块号,m1=0~7。

m2表示缓冲器首元件号,m2=0~31。

n表示待传送数据的字数,n=1~16(16位),n=1~32(32位)。

FROM和TO指令是特殊功能模块编程必须使用的指令。

TOP为脉冲执行型指令。当进行32位数据写入时,采用DTO指令。

3.1.3.3 比较与移位指令

其常用的程序流程指令共有12条,如表3-29所示。

表3-29 比较与移位指令

(1)比较指令[CMP、ZCP(FNA10、FNC11)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-30所示。

表3-30 比较指令的指令格式

②指令说明 比较指令CMP是将源数据[S1.]、[S2.]的数据进行比较,比较结果送到操作数[D.]中,如图3-24所示。当X0为OFF时,不执行CMP指令,M0、M1、M2保持不变;当X0为ON时,[S1.]、[S2.]进行比较,即C1计数器与K10(常数10)比较。若C1当前值小于10,则M0=1;若C1当前值等于10,则M1=1;若C1当前值大于10,则M2=1。比较数据均为二进制数且带符号,如-5<2。存放比较结果的操作数地址应为Y、M、S,若把结果存放到其他继电器(例如X、D、T、C)中,则会出错。若要清除比较结果,需要用RST和ZRST指令。

图3-24 比较指令说明

区间比较指令ZCP使用说明如图3-25所示。它是将一个数据[S.]与两个源数据[S1.]、[S2.]进行代数比较,比较结果影响目标存储到操作数[D.]中。X0为ON,C1的当前值与K10和K12比较,若C1<10,则M0=1,若10≤C1≤12时,则M1=1;若C1>12时,则M2=1。区间比较指令的数据均为二进制数,见带符号位比较。

图3-25 比较指令说明

③应用举例 比较指令的应用如图3-26所示。图3-26(a)所示是CMP指令的应用。当X0=1时,若C0计数器计数个数小于10,即C0<10,Y0=1;若计数器C0=10,Y1=1;若计数器C0>10,Y2=1。当计数器C0计数到15时,Y3为ON。

图3-26 比较指令的应用实例

图3-26(b)所示为ZCP指令的应用。X0为ON,当C1<10时,Y0=1;当10≤C1≤12时Y1=1;当C1>12时,Y2=1。

当计数器C1=15时,C1清零,在下一个扫描周期,PLC又开始循环工作。

(2)循环右移指令[ROR(FNC30)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-31所示。

表3-31 循环右移指令的指令格式

②指令说明 使用循环右指令功能时,当执行条件满足时,则[D.]的各位数据向右移n位,最后一次从最低位移出的状态存于进位标志M8022中。循环右移指令中[D.]可以是16位数据寄存器,也可以是32位数据寄存器。有脉冲型和连续型指令,其循环移位操作每个周期执行一次。若在目标元件中指定“位”数,则只能用K4(16位指令)和K8(32位指令)表示。

(3)循环左移指令[ROL(FNC31)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-32所示。

表3-32 循环左移指令的指令格式

②指令说明 使用循环左指令功能时,当执行条件满足,则[D.]的各位数据向左移n位,最后一次从最高移出的状态存于进位标志M8022中。和循环右移指令一样,[D.]可以是16位数据寄存器,也可以是32位数据寄存器,有脉冲型和连续型指令。若目标元件中指定“位”数,则用K4(16位指令)和K8(32位指令)表示。

(4)带进位的循环右移、左移指令[RCR、RCL(FNC32、FNC33)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-33所示。该指令仅适用于FX2N、FX3UC。

表3-33 带进位的循环右移、左移指令的指令格式

②指令说明 带进位的循环左移是用来移位的指令,当执行条件满足时,[D.]中的各位数据(各位)向左移n位,若n=K4,则向左移动4位,此时,移位是带着进位M8022一起移位的。RCL为连续型指令,而RCLP是脉冲型指令。带进位的循环右移指令功能与左移相似。

操作数[D.]中的数据寄存器可以是16位或32位数据寄存器。若用位元件表示,则用K4(16位)或K8(32位)表示。

(5)位右移、位左移指令[SFTR、SFTL(FNC34、FNC35)]

①指令格式 这两条指令的指令名称、助记符、功能号、操作数及程序步长如表3-34所示。

表3-34 位移位指令的指令格式

②指令说明 SFTR和SFTL这两条指令使位元件中的状态向右、向左移位,n1指定位元件长度,n2指定移位的位数,且n2≤n1≤1024。如图3-27所示为位右移指令说明。当X0为ON时,执行该指令,向右移位。每次4位向前一移,其中X3~X0→M15~M12,M15~M12→M11~M8,M11~M8→M7~M4,M7~M4→M3~M0,M3~M0移出,即从高位移入,低位移出。用SFTRP脉冲型指令时,仅执行一次,而用SFTR连续指令执行时,移位操作是每个周期执行一次。

图3-27 位右移指令说明

位左移指令说明如图3-28所示。当X0为ON时,数据向左移位,每次向左移4位,其中X3~X0→M3~M0,M3~M0→M7~M4,M7~M4→M11~M8,M11~M8→M15~M12,M15~M12移出。

图3-28 位左移指令说明

(6)字右移、字左移指令[WSFR、WSFL(FNC36、FNC37)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-35所示。这两条指令仅适用于FX2N、FX3UC。

表3-35 字移位指令的指令格式

②指令说明 字左、右移指令的功能与位左、右移指令功能相似,所不同的是,位的左、右移动指令是指将指定位元件的状态向左或向右移动,而字的左、右移动是以字为单位向左或向右移动。指令说明和使用注意点可以参见位左移或右移指令说明。

(7)移位写入、移位读出指令[SFWR(FNC38)、SFRD(FNC39)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-36所示。

表3-36 移位写入、移位读出指令的指令格式

②指令说明 移位写入(先入先出写入)控制的数据写入指令,其说明如图3-29所示。当X0由OFF→ON时,将[S.]所指定的D0数据存储在D2内,D1的内容变为1(执行该指令前预先将D1复位成0)。当D0的数据发生变更后,当X0再一次由OFF→ON时,又将D0的数据存储在D3中,而D1指针的内容被置成2。依此类推,源数据D0的数据依次写入数据存储器中。

图3-29 移位写入(先入先出写入)指令说明

D1内的数为数据存储点数,如超过n-1,则不处理,同时进位标志M8022动作。若是连续指令执行时,则在各个周期扫描都执行。

移位读出(先入先出读出)指令说明如图3-30所示。该指令用SFRD表示,当X0从OFF→ON时,将D2的内容传送到D10中,与此同时,指针D1的内容减少,左侧的数据逐字向右侧移动。数据的读出通常从D2开始。指针的内容为0时,则不处理,同时零点标志M8020动作。

图3-30 移位读出(先入先出读出)指令说明

3.1.3.4 数据运算指令

常用的数据运算指令共有10条,如表3-37所示。

表3-37 数据运算指令

(1)加法、减法指令[ADD(FNC20)、SUB(FNC21)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-38所示。

表3-38 加法指令的指令格式

②指令说明 加法指令是将指定的源元件[S1.]、[S2.]中的二进制数相加,结果送到指定的目标元件中去。加法指令说明如图3-31所示。

图3-31 加法指令说明

当执行条件X0由OFF→ON时,(D0)+(D2)→(D5)。运算是代数运算,例如5+(-8)=-3。

加法指令操作影响3个常用标志,即M8020零标志、M8021借位标志、M8022进位标志。

如果运算结果为0,则零标志M8020置1;如果运算结果超过32767(16位)或2147483647(32位),则进位标志M8022置1;如果运算结果小于-32767(16位)或-2147483647(32位),则借位标志M8021置1。

在32位运算中,被指定的字元件是低16位元件,而下一个元件是高16位元件。

而对于减法指令SUB而言,其功能和使用方法与加法指令相似,它是将指定的源元件[S1.]、[S2.]中的二进制数相减,把结果送到指定的目标[D.]中。其他各种标志、32位运算中编程元件的指定方法、连续执行型和脉冲执行型的差异等均与加法指令相同,在此不再赘述。

(2)乘法指令[MUL(FNC22)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-39所示。

表3-39 乘法指令的指令格式

②指令说明 MUL指令为乘法指令,该指令是将指定的源操作元件中的二进制数相乘,结果存储在目标地址[D.]中。指令说明如图3-32(a)所示,它分16位和32位两种运算。

图3-32 乘法和除法指令说明

当进行16位运算、执行条件满足时,(D0)×(D2)→(D5,D4)。源数据是16位,目标数据是32位。当(D0)=8、(D2)=9时,(D5,D4)=72。最高位为符号位,“0”为正,“1”为负。若为32位运算、执行条件满足时,(D1,D0)×(D3,D2)→(D7,D6,D5,D4)。源数据是32位,目标数据是64位。当(D1,D0)=150、(D3,D2)=189时,(D7,D6,D5,D4)=28350。最高位为符号位,“0”为正,“1”为负。

如将位组合元件用于目标数据,限于K的取值,只能得到低位32位的结果,不能得到高位32位的结果。这时,应将数据移入字元件再进行计算。当采用字元件时,也不可能监视64位数据,只能通过监视高32位和低32位。V、Z不能用于[D.]目标操作元件中。

(3)除法指令[DIV(FNC23)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-40所示。

表3-40 除法指令的指令格式

②指令说明 DIV指令为除法指令,该指令是将指定的源数据中的二进制数相除,[S1.]为被除数,[S2.]为除数,运算结果存储在[D.]中,余数送到[D.]的下一个目标元件。除法指令说明如图3-32(b)所示。

当进行16位运算且执行条件满足时,(D0)÷(D2)→(D4)。当(D4)=14,(D2)=5时,(D2)=2,(D5)=4。V和Z不能用于[D.]中。若为32位运算且执行条件满足时,(D1、D0)÷(D3、D2),商存储在(D5、D4)中,余数存储在(D7、D6)中。Y和Z不能用于[D.]中。当除数是0时,不执行指令。

(4)加1、减1指令[INC(FNC24)、DEC(FNC25)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-41所示。

表3-41 加1、减1指令的指令格式

②指令说明 INC指令为加1指令,功能说明如图3-33所示。当执行条件满足时,由[D.]指定的元件D0中的二进制数自动加1。当用连续指令时,每个扫描周期加1。

图3-33 加1指令说明

当进行16位数据运算时。+326767再加1就变为-32768,但标志不置位。同样,在进行32位运算时,+2147483647再加1就变为-2147483648,但标志不置位。

对于减1指令DEC而言,其功能与加1指令相似,它是在执行条件满足的时候,将指定元件的二进制数减1。16位数据运算时,-326768再减1就变为+32767,但标志不置位。同样,在32位运算时,-2147483647再减1就变为+2147483647,但标志不置位。

(5)字逻辑与、或、异或指令[WAND、WOR、WXOR(FNC26、FNC27、FNC28)]

这三条指令的指令名称、助记符、功能号、操作数及程序步长如表3-42所示。

表3-42 字逻辑与、或、异或指令

在上表中,当执行条件满足时,以上指令指定的数据进行相应的逻辑操作运算。

(6)求补指令[NEG(FNC29)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-43所示。该指令仅适用于FX2N、FX3UC。

表3-43 求补指令的指令格式

②指令说明 该指令为求补码运算,如图3-34所示为求补指令功能说明,其操作为:

图3-34 求补指令功能说明

其中,NEGP为脉冲执行型指令,而NEG指令为连续执行型指令。

(7)应用实例

应用实例为某控制程序要进行运算式(2A+3)/5的运算。式中,“A”代表输入端口K2X0送入的二进制数,运算结果需要送输出口K2Y0;X20为启停开关,其梯形图如图3-35所示。

图3-35 四则运算式应用举例梯形图

3.1.3.5 代码处理指令

常用的代码处理指令共有10条,如表3-44所示。

表3-44 代码处理指令

(1)区间复位指令[ZRST(FNC40)]

①指令格式 区间复位指令的指令名称、功能号、操作数及程序步长如表3-45所示。

表3-45 全部复位指令的指令格式

②指令说明 当执行条件满足时,区间复位指令执行被指定的[D1.]到[D2.]之间的位元件执行成批复位操作。应当注意的是,目标数据[D1.]和[D2.]指定的元件应为同类元件;[D1.]指定的元件号应小于[D2.]指定的元件号。若[D1.]的元件号大于[D2.]的元件号,则只有[D1.]指定的元件号复位。该指令为16位处理指令,但是在对计数器执行复位操作时,可在[D1.]、[D2.]中指定32位计数器。不过不能混合指定,即不能在[D1.]中指定16位计数器,在[D2.]中指定32位计数器。

(2)译码指令[DECO(FNC41)]

①指令格式标 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-46所示。

表3-46 译码指令的指令格式

②指令说明 DECO指令为译码指令,该指令的使用大致可以分为两类,分别为用位元件指定[D.]和用字元件指定[D.]。其中n指定的是源数据的位数。

当[D.]指定的是位元件时,如图3-36所示。由图可知n=3,所以运算结果Q=□×20+□×21+…+□×2n-1=0×20+1×21+0×22=2(式中,□表示相应位的状态),因此从M10开始的第2位M12为1。若运算结果Q为0,则第0位(即M10)为1。当n=0时,程序不执行;当n=0~8以外的值时,出现运算错误。若n=8时,[D.]位数为28=256。当执行条件X4为OFF时,不执行指令,上一次译码输出置1位保持不变。

图3-36 译码指令说明

当[D.]指定的是字元件时,使用方法与位元件类似。如当[D.]=D0,n=K3时,运算结果通过b0~b3位计算。

(3)编码指令[ENCO(FNC42)]

①指令格式 该指令的指令名称、操作数及程序步长如表3-47所示。

表3-47 编码指令的指令格式

②指令说明 ENCO指令为编码指令,该指令为译码的逆运算,[D.]中的数值的范围由n确定。功能说明如图3-37(a)所示,其中n=3,即23=8,所以指定的源数据为M10~M17,其最高置1位是M13,即第3位,将“3”的二进制存放到D10的低3位中。当源数据中无1时,出现运算错误。

图3-37 编码指令说明

当n=0时,程序不执行;当n=1~8以外的值时,出现运算错误;当n=8时,[S.]位数为28=256。当驱动输入X5为OFF时,不执行指令,上一次编码输出保持不变。

当[S.]是字元件时,在其可读长度为2n中,最高置1的位被存放到目标元件[D.]指定的元件中去,[D.]中的数值的范围由n确定。功能说明如图3-37(b)所示,源数据的长度2n=23=8位,其最高置1位是b7位。将“7”的二进制存放到D1的低3位中。当源数据中无1时,出现运算错误。

当n=0时,程序不执行;当n=1~4以外数时,出现运算错误;当n=4时,[S.]位数为24=16。当驱动输入X5为OFF时,不执行指令,上一次编码输出保持不变。

(4)求1位数总和指令[SUM(FNC43)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-48所示。该指令仅适用于FX2N、FX3UC。

表3-48 求1位数总和指令的指令格式

②指令说明 该指令为求1位数总和指令。当执行条件满足时,执行SUM指令,即将源[S.]中的“1”进行求和,结果存入目标[D.]中。例如,源(D0)中有3个“1”,则目标[D.](D2)中存入3,且为二进制0011。若用到DSUMP32位指令操作时,则将(D1、D2)的32位中的“1”的总和数3写到(D3、D2),其中D3全为0,而D2中存入3。

(5)置1位判断指令[BON(FNC44)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-49所示。该指令仅适用于FX2N、FX3UC。

表3-49 置1位判断指令的指令格式

②指令说明 如图3-38所示,当X000接通时,判断D10中的第n(此处n=15)位是否为1,若为1则M0接通。此时即使X000断开,M0状态也不变化。

图3-38 置1位(ON位)判断指令FNC44 BON的说明

(6)平均值指令[MEAN(FNC45)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-50所示。该指令仅适用于FX2N、FX3UC。

表3-50 平均值指令的指令格式

②指令说明 图3-39所示为平均值指令说明。当X0为ON时,源[S.]指定的n个数据的代数和被n除得的商(即平均值)送到[D.]指定的目标中,而除得的余数舍去。n应在1~64,超过64则出错。

图3-39 平均值指令说明

(7)报警信号置位指令[ANS(FNC46)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-51所示。该指令仅适用于FX2N、FX3UC。

表3-51 报警信号置位指令的指令格式

②指令说明 图3-40所示为报警信号置位指令功能说明。若X0接通1s以上,则S900被置位(置1),以后即使X0断开,S900仍为1状态,但定时器被复位。

图3-40 报警信号置位指令说明

若报警信号器S900~S999中,任意一个为ON时,则报警信号动作,继电器M8048为ON。

(8)报警信号复位指令[ANR(FNC47)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-52所示。

表3-52 报警信号复位指令的指令格式

②指令说明 图3-41所示为报警信号复位指令说明。当X0为ON时,则报警信号器S900~S999中正在动作的报警信号被复位。若超过1个报警信号位被置1,则元件号最低的那个报警信号被复位。X0再一次变为ON时,下一个被置1的报警器复位。

图3-41 报警信号复位指令说明

若采用ANRP指令,仅为脉冲指令,X0接通一次,进行一次操作。若采用ANR指令,则为连续指令,当X0为ON时,每个扫描周期执行一次,这一点要注意。

(9)数据开方运算指令[SQR(FNC48)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-53所示。

表3-53 平方根指令的指令格式

②指令说明 图3-42所示为数据开方运算平方根指令说明。当X0为ON时,将源[S.]的内容进行开方,结果送入目标[D.]中,即该指令(D10)中存放的数只有正数才有效。若为负数,指令不执行,且运算错误标志M8067为ON。此时,运算结果为整数,小数舍去。舍去小数时,标志位M8021为ON。若运算结果全“0”,零标志位M8020为ON。

图3-42 数据开方运算平方根指令说明

(10)浮点操作指令[FLT(FNC49)]

①指令格式 该指令的指令名称、功能号、操作数及程序步长如表3-54所示。

表3-54 浮点操作指令的指令格式

②指令说明 图3-43所示为浮点操作指令功能说明。当X0为ON时,将源[S.]中的数据转换成浮点数存入目标数[D.]中,即将D10中的二进制转换成浮点数存入D12中。该指令还有32位操作和脉冲指令操作,使用时要注意这一点。FLT指令的逆指令为INT(FNC129),即把浮点数转换成二进制数操作。

图3-43 浮点操作指令功能说明

3.1.3.6 高速处理指令

常用的高速处理指令共有10条,如表3-55所示。

表3-55 高速处理指令

(1)输入、输出刷新指令[REF(FNC50)]

①指令格式 该指令的指令名称、功能号、操作数及程序步长如表3-56所示。

表3-56 输入、输出刷新指令的指令格式

②指令说明 图3-44所示为输入、输出刷新指令说明。FX系列PLC是采用I/O批处理的方法,即输入数据在程序处理之前成批读入到映像寄存器,而输出数据是在END结束指令执行后由输出映像寄存器通过锁存器到输出端子。刷新指令用于在某段程序处理时开始读入最新信息或用于在某一操作结束之后立即将操作结果输出。刷新又分为输入刷新和输出刷新两种。

图3-44 输入、输出刷新指令说明

图3-44(a)所示是输入刷新指令应用说明。当X0为ON时,X10~X17(n=K8,指定的8点)被刷新。图3-44(b)所示是输出刷新指令应用说明。当X1为ON时,输出端Y0~Y7、Y10~Y17、Y20~Y27共24点(n=K24指定的24点)被刷新。

需要说明的是,目标元件[D.]的首元件必须是10的倍数,即X0、X10、X20……或Y0、Y10、Y20……刷新点数n应为8的倍数,即8、16、24、32、40、…、256,否则会出错。

(2)刷新及滤波时间调整指令[REFF(FNC51)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-57所示。

表3-57 刷新及滤波时间调整指令的指令格式

②指令说明 FX系列PLC的输入端X0~X17使用了数字滤波器,通过指令REFF可将滤波时间的值改变为0~60ms。

图3-45所示为刷新及滤波时间调整指令说明。当X10为ON时,X0~X17的映像寄存器被刷新,输入滤波时间为1ms。而在指令REFF执行前,滤波时间为10ms。当M8000为ON时,REFF指令被执行,因n取K20,所以,这条指令执行以后的输入滤波时间为20ms。

图3-45 刷新及滤波时间调整指令说明

当X10为OFF时,REFF指令不执行,X0~X17的滤波时间为10ms。另外,有可以通过MOV指令把D8020数据寄存器的内容改写,来改变输入滤波时间。因为X10~X17的初始滤波值(10ms)一开始就被传送到特殊数据寄存器D8020中。此外,当中断指针、高速计数器或者SPD(FNC56)速度测试指令在采用X0~X7作为输入条件时,这些输入端的滤波器的时间已自动设置为50μs(X1、X0为20μs)。本指令有REFF连续执行和REFFP脉冲执行两种方式。

(3)矩阵输入指令[MTR(FNC52)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-58所示。

表3-58 矩阵输入指令的指令格式

②指令说明 图3-46所示为矩阵输入指令说明。当执行条件满足时,可以分别将8×n的矩阵输入开关信号存到内部继电器中,即存入[D2.]指定的内部继电器中。

图3-46 矩阵输入指令说明

在图3-46中,Y20~Y22依次输入一定宽度的脉冲,当Y20接通时,将X20~X27的状态存到M30~M37中;当Y21接通时,将X20~X27的状态存到M40~M47中;当Y22接通时,将X20~X27的状态存到M50~M57中。矩阵输入指令最多存储开关信号是8×8,最少存储开关信号是8×2。当读入8×8=64输入点时,读取总的时间需要20ms×8列=160ms,所以,这种矩阵输入法不适宜高速输入操作。通常情况下,MTR指令的输入地址是用X20以后的地址作为矩阵指令的输入。

(4)高速计数器置位指令[HSCS(FNC53)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-59所示。

表3-59 高速计数器置位指令的指令格式

②指令说明 图3-47所示为高速计数器置位指令说明。X0为1时,高速计数器C255的当前值由99变为100,或由101变为100,Y0立即置1,该指令仅有32位指令操作,即DHSCS操作。

图3-47 高速计数器置位指令说明

(5)高速计数器复位指令[HSCR(FNC54)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-60所示。

表3-60 高速计数器复位指令的指令格式

②指令说明 图3-48所示为高速计数器复位指令说明。当M8000为ON时,由于比较外部输出采用中断处理,C255的当前值变为200,Y10立即复位。

图3-48 高速计数器复位指令说明

(6)高速计数器区间比较指令[HSZ(FNC55)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-61所示。

表3-61 高速计数器区间比较指令的指令格式

②指令说明 高速计数器区间比较指令(HSZ)与传送比较功能指令组中的区间比较指令(ZCP)相类似。图3-49所示为高速计数器区间比较指令说明。当X0合上后,C251计数器的值大小与K1000和K2000比较,满足下列条件时,相应的Y0、Y1、Y2有输出。

图3-49 高速计数器区间比较指令说明

当K1000>(C251)时,Y0=ON,Y1=OFF,Y2=OFF;

当K1000≤(C251)≤K2000时,Y0=OFF,Y1=ON,Y2=OFF;

当(C251)>K2000时,Y0=OFF,Y1=OFF,Y2=ON。

HSZ指令是32位专用指令,所以必须以DHSZ指令输入。此外,Y0、Y1、Y2的动作仅仅是在计数器C251有脉冲信号输入时,其当前值从999~1000或1999~2000变化时,输出Y0、Y1、Y2才有变化。因此在图3-50所示中,若没有脉冲输入,即使X0=ON时,给C251传送K3000,即C251=K3000,输出Y2也不会变为ON。

图3-50 脉冲输入指令说明

(7)速度检测指令[SPD(FNC56)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-62所示。

表3-62 速度检测指令的指令格式

②指令说明 速度检测是用来检测在约定时间内编码器的脉冲个数的指令。当执行条件满足时,执行速度检测指令,[S1.]指定输入点,[S2.]指定计数时间,单位为ms。[D.]共有3个单元指定存放计数结果。其中D0存放计数个数;D1存放计数当前值;D2存放剩余时间。

通过测定,转速N即可利用下述公式求出:

(8)脉冲输出指令[PLSY(FNC57)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-63所示。

表3-63 脉冲输出指令的指令格式

②指令说明 图3-51所示为脉冲输出指令功能说明。当X0为ON时,以[S1.]指令的频率,按[S2.]指定的脉冲个数输出,输出端为[D.]指定的输出端。[S1.]指定脉冲频率,其中FX2N、FX3UC为2~20000Hz;FX1S、FX1N为1~32767Hz(16位),1~1000000Hz(32位)。[S2.]指定脉冲个数,16位指令为1~32767,32位指令为1~2147483647。

图3-51 脉冲输出指令说明

[D.]指定输出口仅为Y0和Y1,PLC机型要选用晶体管输出型。

PLSY指令输出脉冲的占空比为50%。由于采用中断处理,所以输出控制不受扫描周期的影响。设定的输出脉冲发送完毕后,执行结束标志位M8029置1。若X10为OFF,则M8029也复位。

另外,指令PLSY、PLSR(FNC59)两条指令Y0或Y1输出的脉冲个数分别保存在(D8141,D8140)和(D8143,D8142)中,Y0和Y2的总数保存在(D8137,D8136)中。

(9)脉宽调制指令[PWM(FNC58)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-64所示。

表3-64 脉宽调制指令的指令格式

②指令说明 脉宽调制指令(PWM)用来产生的脉冲宽度和周期是可以控制的,其功能说明如图3-52所示。当X0合上时,Y0有脉冲信号输出,其中[S1.]是指定脉宽,[S2.]是指定周期,[D.]是指定脉冲输出口。要求[S1.]≤[S2.],[S2.]在1~32767ms内,[D.]只能指定Y0、Y1。PWM指令仅适用于晶体管方式输出的PLC。

图3-52 脉宽调制指令说明

在工程实践中,经常通过PWM指令来实现变频器的控制,从而实现电动机的速度控制。

(10)可调脉冲输出指令[PLSR(FNC59)]

①指令格式 该指令的指令名称、助记符、功能号、操作数及程序步长如表3-65所示。

表3-65 带加减功能脉冲输出指令功能的指令格式

②指令说明 图3-53所示为可调脉冲输出指令(或称带加减功能脉冲输出指令)功能说明。当X10为ON时,从[D.]输出频率从0加速到达[S1.]指定的最高频率,减速时由最高频率减速到达0。输出脉冲的总数由[S2.]指定,加速、减速的时间由[S3]指定。

图3-53 可调脉冲输出指令说明

[S1.]的设定范围是10~20000Hz,若是16位操作,[S2.]是110~32767;若是32位操作,[S2.]是110~2147483647。若[S2.]设定值小于110时,脉冲不能正常输出;[S3.]为加减速度时间,范围是0~5000ms,其值应大于PLC扫描周期最大值(D8012)中的10倍,且应满足:

加减速的变速次数固定为10次;[D.]用来指定脉冲输出的元件号(Y0或Y1)。

当X10为OFF时,中断输出,X10再次为ON时,从初始值开始动作。在指令执行过程中变操作数,指令运行不受影响。变更内容只有从下一次指令执行开始有效。

当[S2.]设定的脉冲数输出结束后,执行结束标志继电器M8029动作(为ON)。

本指令在程序中只能使用一次,且要选择晶体管方式输出的PLC。此外,Y0、Y1输出的脉冲数存入以下特殊寄存器。

[D8141,D8140]存放Y0的脉冲总数,[D8143,D8142]存放Y1的脉冲总数;[D8137,D8136]存放Y0和Y1的脉冲数之和。要清除以上数据寄存器的内容,可通过传送指令做到,即DMOVK0×××可清除。

对于FX1S、FX1N来说,[S1.]为10~10000Hz,[S2.]同上述FX2N数值,[S3.]为50~5000ms,[D.]为Y0或Y1(晶体管方式输出)。