第十章功能指令主要内容1.功能指令概述:特点、分类等;2.简单介绍一些常用的功能指令:程序流程指令;算术、逻辑运算指令;循环、移位指令等。功能指令的产生1.计算机、半导体、网络技术发展推动的结果;2.PLC制造和开发商的定位:特殊的工控机。工控机和工业对象决定了PLC必须具备通用性,不能局限于逻辑控制,还必须能够处理数据量。3.数据量的处理内容非常丰富——功能指令的多样性。•数据处理远比逻辑处理复杂。•直接面向应用,故也称应用指令。应用指令是PLC数据处理能力的标志。•具有子程序功能的指令-PID指令。•FX2N系列共有128种298条应用指令。(使用类似查字典)孵化箱温度控制:孵小鸡的环境温度要求稳定在特定温度附近,可采用PID算法或者模糊控制等算法来控制。这些算法需要进行四则运算和函数运算。可能涉及的计算有:整数、浮点数等运算和函数调用。数值运算-以数据或数据地址为处理对象1)变量参与运算可以将程序设计者从繁琐的地址操作中解放出来。2)变量操作:包括算术和函数运算,程序控制等都需要赋值语句。赋值-以数据或数据地址为处理对象下图为电梯上行时判断下一层是否要停的流程,其中的逻辑判断比较复杂。采用比较判断+程序分支可以方便实现。比较判断+程序流程控制-以数据、数据地址、程序地址为处理对象产品质量控制需要求累加值和平均值。工业中常用的移动平均滤波也要求累加值和平均值。用循环实现非常方便。循环迭代-程序控制的一种21nii将D0-D30中的内容转移到D100-D130。也可以用循环语句。见书中设计的例子(第十一章)方便指令-实现一系列辅助操作类似于高级语言中的一些固定子程序或函数。PID指令:•工业中常用,70%以上回路控制使用PID控制。•控制算法简单且固定,参数有限。•有成熟的参数优化方法。后两点决定了普通技术员也能方便地使用PID算法。将这种常用算法作为指令使用有很大的好处:计算精度、运算速度等都可以提高,甚至可以硬件实现。子程序类的指令•数据处理类(四则运算、函数处理)•程序控制类(循环、跳转、子程序等)•特殊应用类(高速计数器等)•外部设备类(I/O接口等)功能指令的分类FX系列PLC功能指令的表示格式•指令编号(45)、助记符(MEAN)•操作数:大多数功能指令有1至4个操作数,有的没有;[S]源操作数,[D]目标操作数;如果可使用变址功能,用[S·]和[D·]表示。•n和m表示其它操作数,常用于表示常数K和H,或作为源和目标操作数的补充说明。•程序步数:程序存储器中该指令所占步数。•上图含义:X0为1时,[(D0)+(D1)+(D2)]÷3→(D4Z0)•连续执行与脉冲执行有“P”表示脉冲执行,即该指令仅在接通时执行一次。没有“P”则表示连续执行,即在接通的每一个扫描周期指令都被执行。功能指令的执行方式功能指令的数据长度•处理32位数据的指令是在助记符前加“D”标志,无此标志即为处理16位数据的指令。•注意32位计数器(C200~C255)的一个软元件为32位,不可作为处理16位数据指令的操作数使用。•在使用32位数据时建议使用首编号为偶数的操作数。D11D10→D13D12(32位)功能指令的数据格式①位元件与字元件只处理ON/OFF信息的软元件称为位元件;可处理数值的软元件则称为字元件,1个字元件16位。位元件可以通过组合使用,4个位元件为一个单元,通用表示方法是由Kn加起始的软元件号组成,n为单元数。例如K2M0表示M0~M7组成两个位元件组(K2表示2个单元),它是一个8位数据,M0为最低位。功能指令的数据格式•在FX系列PLC内部,数据是以二进制(BIN)补码的形式存储,所有的四则运算都使用二进制数。•二进制补码的最高位为符号位,正数符号位为0,负数符号位为1。•为更精确地进行运算,可采用浮点数运算。在FX系列PLC中提供了二进制浮点运算和十进制浮点运算。不含表达梯形图符号间相互关系的成分,而是直接表达本指令要做什么。功能指令与逻辑指令的比较各触点构成特定逻辑关系,实现逻辑运算功能。FX系列PLC常用功能指令分类•程序流向控制类指令(FNC00~FNC09)•传送与比较类指令(FNC10~FNC19)•算术和逻辑运算类指令(FNC20~FNC29)•循环与移位类指令(FNC30~FNC39)•数据处理指令(FNC40~FNC49)•其它功能指令(FNC50~)程序流向控制类(FNC00~FN09)①条件跳转指令条件跳转指令CJ(P)编号FNC00操作数为指针标号P0-P127。指针标号允许用变址寄存器修改。CJ和CJP都占3个程序步,指针标号占1步。程序流向控制类(FNC00~FN09)注意:1)CJP指令表示为脉冲执行方式;2)一个程序中一个标号只能出现一次,否则将出错;3)即使被跳过程序的驱动条件改变,但其线圈(或结果)仍保持跳转前的状态。(未执行该指令)4)在跳转执行期间定时器和计数器将停止工作,到跳转条件不满足后又继续工作。但对于正在工作的定时器T192-T199和高速计数器C235-C255不管有无跳转仍连续工作。(未执行,中断方式)5)若积算定时器和计数器的复位(RST)指令在跳转区外,即使它们的线圈被跳转,但对它们的复位仍然有效。(RST指令已经改变其触点状态)■子程序调用指令CALL编号FNC01操作数为P0~P127,占3个程序步■子程序返回指令SRET编号FNC02无操作数,占1个程序步。②子程序调用与子程序返回指令注意:1)转移标号不能重复,也不可与跳转指令的标号重复;2)子程序可以嵌套调用,最多可5级嵌套。■中断返回指令IRET编号FNCO3■中断允许指令EI编号FNCO4■中断禁止DI编号FNC05它们均无操作数,各占1个程序步③与中断有关的指令注意:1)如果多个中断依次发生,则以发生先后为序,如果多个中断源同时发出信号,则中断指针号越小优先级越高;2)当M8050~M8058为ON时,禁止执行相应I0□□~I8□□的中断,M8059为ON时则禁止所有计数器中断;3)无需中断禁止时,可只用EI指令,不必用DI指令;4)执行一个中断服务程序时,如果在中断服务程序中有EI和DI,可实现二级中断嵌套,否则禁止其它中断。④主程序结束指令FENDP223•编号:FNC06,无操作数,占用1个程序步。•FEND表示主程序结束,当执行到FEND时,PLC进行输入/输出处理,监视定时器刷新,完成后返回启始步。•使用FEND指令时应注意:1)子程序和中断服务程序应放在FEND之后;2)子程序和中断服务程序必须写在FEND和END之间,否则出错。(程序结构示例)⑤监视定时器指令WDT(P)•编号:FNC07,没有操作数,占1个程序步。•WDT指令是对PLC的监视定时器进行刷新,FX系列PLC的监视定时器缺省值为200ms(可用D8000来设定)注意:1)如果在后续的FOR-NEXT循环中,执行时间可能超过监控定时器的定时时间,可将WDT插入循环程序中。2)当与条件跳转指令CJ对应的指针标号在CJ指令之前时(即程序往回跳)就有可能连续反复跳步使它们之间的程序反复执行,使执行时间超过监控时间,可在CJ指令与对应标号之间插入WDT指令。⑥循环指令■循环区起点指令FOR编号FNC08,占3个程序步,无操作数■循环结束指令NEXT编号FNC09,占1个程序步,无操作数运行时,位于FOR~NEXT间的程序反复执行n次后再继续执行后续程序。循环的次数n=1~32767。如果N=-32767~0之间,则当作n=1处理。注意:1)FOR和NEXT必须成对使用;2)FX2N系列PLC可循环嵌套5层;3)在循环中可利用CJ指令在循环没结束时跳出循环体;4)FOR应放在NEXT之前,NEXT应在FEND和END之前,否则出错。传送与比较类指令(FNC10~FN19)①比较指令(D)CMP(P)•编号:FNC10•将源操作数[S1.]和源操作数[S2.]的数据进行比较,比较结果用目标元件[D.]的状态来表示。使用比较指令CMP时应注意:1)[S1.]、[S2.]可取任意数据格式,目标操作数[D.]可取Y、M和S。2)所有的源数据都被看成二进制值处理;②传送类指令MOV(D)MOV(P)•传送指令编号:FNC12,将源数据传送到指定的目标。•使用应用MOV指令时应注意:1)源操作数可取所有数据类型,目标操作数可以是KnY、KnM、KnS、T、C、D、V、Z。2)16位运算时占5个程序步,32位运算时则占9个程序步。③数据交换指令(D)XCH(P)•编号:FNC17,将数据在指定的目标元件之间交换。•使用数据交换指令应该注意:1)操作数的元件可取KnY、KnM、KnS、T、C、D、V和Z。2)一般采用脉冲执行方式,否则在每个扫描周期都要交换一次。3)16位运算时占5个程序步,32位运算时占9个。算术与逻辑运算类指令(FNC20~FN29)循环与移位类指令(FNC30~FN39)数据处理类指令(FNC40~FN49)高速处理类指令(FNC50~FN59)方便类指令(FNC60~FN69)外部I/O设备类指令(FNC70~FN79)外围设备类指令(FNC80~FN89)浮点数运算类指令(FNC110~FN132)高低字节交换、定位类指令时钟运算类指令(FNC160~FN169)外围设备类指令(FNC170~FN177)外围设备类指令(FNC170~FN177)建议今后应用时,若你觉得PLC本该提供而没有提供某些方便的功能,那么很可能就需要一个新的功能指令。