第5章FX系列PLC的功能指令与常用功能模块5.1功能指令概述5.2功能指令分类5.3FX2N系列PLC的常用功能模块5.1功能指令概述5.1.1功能指令的基本格式5.1.2功能指令的执行方式与数据长度5.1.3功能指令的数据格式5.1.1功能指令的基本格式1.执行条件2.功能号和助记符3.操作数图5-1功能指令的表示方法3.操作数1)源操作数(Source),用[S·]表示。2)目标操作数(Destination),用[D·]表示。3)其他操作数(常数),用m或n表示。5.1.2功能指令的执行方式与数据长度1.功能指令的连续执行与脉冲执行2.数据长度5.1.3功能指令的数据格式1.位元件与字元件2.位元件的组合3.不同长度数据之间的传送4.变址寄存器V、Z3.不同长度数据之间的传送1)“从长到短”的传送,忽略长位数据的高位;2)“从短到长”的传送,长位数据的高位为0。图5-2不同长度数据之间的传送图5-3变址寄存器的使用5.2功能指令分类5.2.1程序流程类指令(FNC00~FNC09)5.2.2传送与比较类指令(FNC10~FNC19)5.2.3算术与逻辑运算类指令(FNC20~FNC29)5.2.4循环与移位类指令(FNC30~FNC39)5.2.5数据处理指令(FNC40~FNC49)5.2.6高速处理指令(FNC50~FNC59)5.2.7方便指令(FNC60~FNC69)5.2.8外部I/O设备指令(FNC70~FNC79)5.2.9外部设备SER指令(FNC80~FNC89)5.2.10浮点数运算指令(FNC110~FNC139)5.2.11数据处理指令2(FNC140~FNC149)5.2.12定位控制指令(FNC155~FNC159)5.2.13时钟处理指令(FNC160~FNC169)5.2.14格雷码变换及触点型比较指令5.2.1FX系列PLC常用功能指令介绍(1)程序流向控制类指令(FNC00~FN09)①条件跳转指令条件跳转指令CJ(P)编号FNC00操作数为指针标号P0~P127其中P63为END所在步序,不需标记。指针标号允许用变址寄存器修改。CJ和CJP都占3个程序步,指针标号占1步程序流向控制类指令(FNC00~FN09)①条件跳转指令注意:1)CJP指令表示为脉冲执行方式;2)在一个程序中一个标号只能出现一次,否则将出错;3)即使被跳过程序的驱动条件改变,但其线圈(或结果)仍保持跳转前的状态。4)在跳转执行期间定时器和计数器将停止工作,到跳转条件不满足后又继续工作。但对于正在工作的定时器T192~T199和高速计数器C235~C255不管有无跳转仍连续工作。5)若积算定时器和计数器的复位(RST)指令在跳转区外,即使它们的线圈被跳转,但对它们的复位仍然有效。5.2.1程序流程类指令(FNC00~FNC09)1.条件跳转指令(CJ)2.子程序调用和子程序返回指令(CALL,SRET)3.与中断有关的指令(IRET,EI,DI)4.主程序结束指令(FEND)5.监控定时器指令(WDT)6.循环指令(FOR,NEXT)1.条件跳转指令(CJ)(1)软元件Y、M、S的状态(2)计数器C的状态(3)定时器T的状态(4)使用跳转指令的几点注意(5)主控区与跳转指令的关系图5-4条件跳转指令应用实例(3)定时器T的状态1)10ms、100ms定时器的状态。2)1ms定时器的状态。3)定时器T192~T199、高速计数器的状态。4)T、C软元件复位指令RST的执行。(4)使用跳转指令的几点注意1)由于跳转指令具有选择程序段的功能,因此两个相同编号的线圈在同一程序内,但位于因跳转而不会被同时执行的两个程序段中时,则不被视为双线圈,即允许存在。2)可以有多条跳转指令使用同一标号。3)标号一般设在相关的跳转指令之后,也可以设在跳转指令之前,如图5-6所示。4)除了FNC52~FNC58指令外,在发生跳转时,不执行其他功能指令。图5-5两条跳转指令使用同一指针标号(5)主控区与跳转指令的关系①跳过整个主控区(MC~MCR)的跳转不受限制。②从主控区外跳到主控区内时,跳转独立于主控操作,CJP1执行时,不论M0状态如何,均作ON处理。③在主控区内跳转时,如M0为OFF,跳转不能执行。④从主控区内跳到主控区外时,M0为OFF时,跳转不能执行;M0为ON时,跳转条件满足,可以跳转,这时MCRN0无效,但不会出错。⑤从一个主控区内跳到另一个主控区内时,当M1为ON时,可以跳转。执行跳转时,不论M2的实际状态如何,均看做ON。MCRN0被忽略。图5-7主控区与跳转指令的关系3.与中断有关的指令(IRET,EI,DI)(1)使用中断相关指令的注意事项(2)中断指令实例图5-8子程序梯形图(1)使用中断相关指令的注意事项1)如果多个中断依次发生,则以发生先后为顺序,即发生越早,级别越高;如果多个中断源同时发出信号,则中断指针号越小,优先级越高。2)当M8050~M8058为ON时,相应地禁止执行I0××~I8××的中断,M8059为ON时则禁止所有计数器中断。3)采用无条件中断禁止时,不必用DI指令(只用EI指令)。4)执行一个中断服务程序时,如果在中断服务程序中有EI和DI,可实现二级中断嵌套,否则,禁止其他中断。(2)中断指令实例1)时间中断子程序。2)斜坡输出中断子程序。图5-10时间中断子程序图5-12FEND指令的应用图5-13循环程序5.2.2传送与比较类指令(FNC10~FNC19)1.比较指令(CMP)2.区间比较指令(ZCP)3.传送指令(MOV)4.移位传送指令(SMOV)5.取反传送指令(CML)6.块传送指令(BMOV)7.多点传送指令(FMOV)8.数据交换指令(XCH)9.数据变换指令(BCD,BIN)图5-14比较指令的使用2.区间比较指令(ZCP)1)[S1·]、[S2·]可取任意数据格式,目标操作数[D·]可取Y、M和S。2)使用ZCP时,[S2·]的数值不能小于[S1·]。3)所有的源数据都被看成二进制值处理。图5-15区间比较指令的使用图5-16传送指令与移位传送指令图5-17移位传送图5-18取反传送6.块传送指令(BMOV)1)源操作数可取KnX、KnY、KnM、KnS、T、C、D和文件寄存器,目标操作数可取KnT、KnM、KnS、T、C和D。2)如果元件号超出允许范围,传送只在允许范围内的元件间进行。图5-19块传送7.多点传送指令(FMOV)1)源操作数可取所有的数据类型,目标操作数可取KnX、KnM、KnS、T、C和D,n小于或等于512。2)如果元件号超出允许范围,数据仅送到允许范围的元件中。图5-20多点数据传送与数据交换9.数据变换指令(BCD,BIN)1)BCD变换指令。2)BIN变换指令。图5-21BCD变换与BIN变换5.2.3算术与逻辑运算类指令(FNC20~FNC29)1.加法指令(ADD)2.减法指令(SUB)3.乘法指令(MUL)4.除法指令(DIV)5.加1和减1指令(INC和DEC)6.逻辑与指令(WAND)7.逻辑或指令(WOR)8.逻辑异或指令(WXOR)9.求补指令(NEC)图5-22二进制加减法运算2.减法指令(SUB)1)源操作数可取所有数据类型,目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。2)有16位运算和32位运算两种,16位运算占7个程序步,32位运算占13个程序步。3)数据为有符号二进制数,最高位为符号位(0为正,1为负)。4)加法指令有3个标志:零标志(M8020)、借位标志(M8021)和进位标志(M8022)。3.乘法指令(MUL)图5-23二进制乘除法运算4.除法指令(DIV)1)源操作数可取所有数据类型,目标操作数可取KnY、KnM、KnS、T、C、D、V和Z,其中Z只有在16位乘法时能用,在32位乘法时不可用。2)32位乘法运算中,如用位元件作目标,则只能得到乘积的低32位,高32位将丢失,如果先将数据移入字元件再运算则不会有此问题;除法运算中将位元件指定为[D·],则无法得到余数,除数为0时,将发生运算错误。3)积、商和余数的最高位为符号位。5.加1和减1指令(INC和DEC)1)指令的操作数可为KnY、KnM、KnS、T、C、D、V和Z。2)当进行16位操作时为3个程序步,32位操作时为5个程序步。3)在INC或DEC运算时,如果数据为16位,32767再加1就变成-32767,但标志不动作;32位运算时,+2147483647再加1就会变为-2147483648,但标志不会动作。图5-24二进制加1、减1运算9.求补指令(NEC)1)WAND、WOR、WXOR指令的[S1·]和[S2·]均可取所有的数据类型,目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。2)NEG指令只有目标操作数,且可取KnY、KnM、KnS、T、C、D、V和Z。3)WAND、WOR、WXOR指令16位运算时占7个程序步,32位运算时占13个程序步,NEG在两种情况下分别占3步和5步。图5-25字逻辑运算5.2.4循环与移位类指令(FNC30~FNC39)1.循环移位指令(ROR,ROL)2.带进位的循环移位指令(RCR,RCL)3.位右移和位左移指令(SFTR,SFTL)4.字右移和字左移指令(WSFR,WSFL)5.先入先出写入指令(SFWR)6.先入先出读出指令(SFRD)2.带进位的循环移位指令(RCR,RCL)1)目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。2)16位指令占5个程序步,32位指令占9个程序。3)用连续指令执行时,循环移位操作每个周期执行一次。图5-26右循环和左循环3.位右移和位左移指令(SFTR,SFTL)1)源操作数可取X、Y、M、S,目标操作数可取Y、M、S。2)只有16位操作,占9个程序步。3)对于图5-28,用脉冲指令时,X0由OFF→ON变化时,指令被执行一次,进行n2位移位;而用连续指令执行时,移位操作是每个扫描周期执行一次,使用该指令时必须注意。图5-28位移位指令的使用a)位右移指令b)位左移指令4.字右移和字左移指令(WSFR,WSFL)1)源操作数可取KnX、KnY、KnM、KnS、T、C和D,目标操作数可取KnY、KnM、KnS、T、C和D。2)字移位指令只有16位操作,占用9个程序步。图5-29字移位指令a)字右移指令b)字左移指令5.先入先出写入指令(SFWR)图5-30先入先出写入指令6.先入先出读出指令(SFRD)1)目标操作数可取KnY、KnM、KnS、T、C和D,源操作数可取所有的数据类型。2)指令只有16位运算,占7个程序步。图5-31先入先出读出指令5.2.5数据处理指令(FNC40~FNC49)1.区间复位指令(ZRST)2.译码指令(DECO)3.编码指令(ENCO)4.ON位数统计指令(SUM)5.ON位判别指令(BON)6.平均值指令(MEAN)7.报警器置位复位指令(ANS,ANR)8.二进制平方根指令(SQR)9.二进制整数→二进制浮点数转换指令(FLT)1.区间复位指令(ZRST)1)[D1·]和[D2·]可取Y、M、S、T、C、D且应为同类元件,同时[D1·]的元件号应小于[D2·]指定的元件号,若[D1·]的元件号大于[D2·]元件号,则只有[D1·]指定元件被复位。2)ZRST指令只有16位处理,占5个程序步,但[D1·]、[D2·]也可以指定32位计数器。图5-32区间复位指令2.译码指令(DECO)1)位源操作数可取X、T、M和S,位目标操作数可取Y、M和S,字源操作数可取K、H、T、C、D、V和Z,字目标操作数可取T、C和D。2)若[D·]指定的目标元件是字元件T、C、D,则n≤4;若是位元件Y、M、S,则n=,译码指令为16位指令,占7个程序步。图5-33译码指令的使用图5-34编码指令的使用3.编码指令(ENCO)1)源操作数是字元件时,可以是T、C、D、V和Z;源操作数是位元件时,可以是X、Y、M、S