第六单元程序控制类应用指令任务一跳转程序任务二子程序任务三循环程序任务四外部中断子程序任务五定时中断子程序任务六高速计数器任务一跳转程序一、任务提出为了提高设备的可靠性,在工业控制中许多设备要建立自动及手动两种工作方式。这就要在程序中编排两段程序,一段用于手动,一段用于自动。然后设立一个手动/自动切换开关对程序段进行选择。梯形图一般采用如图6-1所示的结构。X10是自动/手动切换开关,当它为ON时将跳过自动程序,执行手动程序,为OFF时将跳过手动程序,执行自动程序。公用程序用于自动程序和手动程序相互切换的处理,自动程序和手动程序都需要完成的任务也可以用公用程序来处理。图6-1自动/手动程序切换二、原理分析跳转指令CJ可用来选择执行一定的程序段,跳过暂且不执行的程序段,缩短了扫描周期。如图6-2所示,若X0接通,则跳到标号为P8的程序处执行。X0断开时,不执行跳转指令,顺序往下执行。图6-2跳转程序梯形图表6-1给出了图6-2中跳转发生前后相关器件状态发生变化对程序执行结果的影响。表6-1跳转对元器件状态的影响元件跳转前触点状态跳转后触点状态跳转后线圈状态Y,M,SX1,X2,X3OFFX1,X2,X3ONY1,M1.S1OFFX1,X2,X3ONX1,X2,X3OFFY1,Ml,S1ON10ms,100ms定时器X4OFFX4ON定时器不动作X4ONX4OFF定时器停止,X0OFF后接续定时1ms定时器X5OFF,X6OFFX6ON定时器不动作X5OFF,X6ONX6OFF定时器停止,X0OFF后接续定时计数器X7OFF.X10OFFX10ON计数器不动作X7OFF,X10ONXl0OFF计数器停止,X0OFF后接续计数应用指令X11OFFX11ON除FNC52~FNC59之外的其他应用指令不执行X11ONX11OFF1.被跳过的程序段中的输出继电器Y、辅助继电器M、状态继电器S由于该段程序不再执行,即使梯形图中涉及的工作条件发生变化,它们的工作状态将保持跳转发生前的状态不变。2.被跳过的程序段中的定时器及计数器,无论其是否具有掉电保持功能,由于相关程序停止执行,它们的当前值寄存器被锁定,跳转发生后其定时值、计数值保持不变,在跳转中止,程序接续执行时,定时计数将继续进行。另外,定时、计数器的复位指令具有优先权,即使复位指令位于被跳过的程序段中,执行条件满足时,复位工作也将执行。三、知识链接1.编程元件——跳转指针(P)FX2N的指针P有128点(P0~P127),用于分支和跳转程序。指针P使用时要注意:⑴在梯形图中,指针放在左侧母线的左边,一个指针只能出现一次,如出现两次或两次以上,就会出错。⑵多条跳转指令可以使用相同的指针。⑶P63是END所在的步序,在程序中不需要设置P63。2.跳转指令(CJ)跳转指令CJ执行时,PLC将不再扫描执行跳转指令与跳转指针P间的程序,即跳到以指针P为入口的程序段中执行。使用跳转指令要注意:(1)跳转指令具有选择程序段的功能。在同一程序中位于不同程序段的程序不会被同时执行,所以不同程序段中的同一线圈不被视为双线圈。(2)可以有多条跳转指令使用同一指针。(3)指针一般设在相关的跳转指令之后,也可以设在跳转指令之前。但要注意从程序执行顺序来看,如果由于指针在前造成该程序的执行时间超过了警戒时钟设定值,则程序就会出错。(4)使用CJ(P)指令时,跳转只执行一个扫描周期,但若用辅助继电器M8000作为跳转指令的工作条件,跳转就成为无条件跳转。(5)跳转与主控区的关系。(6)在编写跳转程序的指令表时,指针需占一行。3.主程序结束指令FENDFEND为主程序结束指令,FEND指令与END指令一样,进行输出、输入处理、监视定时器刷新,再返回0步的程序。四、任务实施为了更好地观察跳转指令,本任务实施图6-5的程序。1.将两个带自锁的按钮分别连接到PLC的X0、X1,输出用指示灯代替,并连接PLC的电源,确保接线无误。2.输入图6-2的梯形图,检查无误后运行程序。3.按下X0输入按钮,观察输出继电器Y0~Y3的状态有无变化,理解跳转指令。4.按下X1输入按钮,观察输出继电器Y0~Y3的状态有无变化,理解跳转指令。任务二子程序一、任务提出化工企业经常要完成多液体物料的化合工作,需要完成物料的比例投入及送出以及化合炉的温度控制工作。物料的比例投入和化合物的送出可通过特定的运算结果再控制相关阀门的开度实现。温度控制使用加温及降温设备,而温度需维持在一个区间内。二、原理分析在利用PLC实现控制时,常常将以运算为主的程序内容做为主程序。将加温及降温等逻辑控制为主的程序作为子程序。程序结构如图6-6所示。其中X1为上限位温度传感器、X2为下限位温度传感器,X1为ON时,调用降温控制子程序,X2为ON时,调用升温控制子程序。图6-6子程序结构示意图三、知识链接1.子程序调用指令(CALL)子程序调用指令CALL是为一些特定的控制目的编制的相对独立的程序。为了区别于主程序,规定在程序编排时,将主程序写在前边,以FEND指令结束主程序,子程序写在FEND后边,当主程序带有多个子程序时,子程序可依次列在主程序结束指令FEND之后。子程序调用指令CALL安排在主程序段中。如图6-6所示。2.子程序返回指令(SRET)子程序返回指令SRET是不需要驱动触点的单独指令。子程序的范围从它的指针标号开始,到SRET指令结束。每当程序执行到子程序调用指令CALL时,都转去执行相应的子程序,遇到SRET指令即返回原断点继续执行原程序。子程序可以实现五级嵌套。图6-7是一级嵌套的例子。图6-7子程序嵌套结构示意图四、任务实施1.将两个带自锁的按钮分别连接到PLC的X1、X2,输出用指示灯代替,并连接PLC的电源,确保接线无误。2.输入图6-8的梯形图,检查无误后运行程序。3.按下X1输入按钮,观察输出继电器Y1和Y2的状态有无变化,理解子程序。4.按下X2输入按钮,观察输出继电器Y1和Y2的状态有无变化,理解子程序。图6-8子程序实施梯形图任务三循环程序一、任务提出在进行数据处理时,经常要求从某一批数据中找出一些有特征值的数据来,例如找出存储在D0~D9内的数据中的最大值,存储到D10。二、原理分析本任务用循环指令实现,设计出的梯形图如图6-9所示。图6-9求最大值程序三、知识链接循环指令由FOR及NEXT二条指令构成,这二条指令总是成对出现的。如梯形图6-10所示,三条FOR指令和三条NEXT指令相互对应。图6-10是三级循环嵌套的情况。从图中还可看出,每一对FOR指令和NEXT指令间的程序就是执行过程中需按一定的次数进行循环的部分。循环的次数由FOR指令后的源数据给出。该程序最中心的循环内容为向数据存储器D100中加1,它一共执行了2×2×3=12次。图6-10循环指令说明四、任务实施1.连接PLC的电源,确保接线无误。输入图6-9的梯形图,检查无误。2.设置D0~D9的值分别为K10、K5、K100、K40、K30、K20、K318、K9、K123、K56,运行程序,观察Y17~Y0的指示是否为0000000100111110(即K318)。3.改变D0~D9的设置,再调试程序。4.修改程序,将它变为求最小值的程序,并调试。任务四外部中断子程序一、任务提出在日常生活和工作中经常碰到这种情况:正在做某项工作时,有一件更重要的事情要马上处理,这时候必须暂停正在做的工作,处理这一紧急事务,等处理完这一紧急事务,继续完成刚才暂停的工作,PLC也有这样的工作方式,称为中断。中断是指在主程序的执行过程中,中断主程序的执行去执行中断子程序,执行完中断子程序后再回到刚才中断的主程序处继续执行,中断不受PLC扫描工作方式的影响,使PLC能迅速响应中断事件。和前边所谈到过的子程序一样,中断子程序也是为某些特定的控制功能而设定的。和普通子程序不同的是,这些特定的控制功能都有一个共同的特点,即要求响应时间小于机器的扫描周期。因而,中断子程序都不能由程序内安排的条件引出。能引起中断的信号叫中断源,FX2N系列可编程序控制器有三类中断源,即外部中断、定时器中断和高速计数器中断。本任务分析外部中断。二、原理分析图6-12是一个带有外部中断子程序的梯形图。在主程序段程序执行中,特殊辅助继电器M8050为零时,标号为I001的中断子程序允许执行。该中断在输入口X0送入上升沿信号时执行。上升沿信号出现一次该中断执行一次。执行完毕后即返回主程序。本中断子程序完成的功能是M8013驱动输出继电器Y11工作。作为执行结果的输出继电器Y11的状态,取决于X0出现上升沿时M8013秒时钟脉冲的状态。即M8013置1则Y11置l,否则Y11置0。图6-12外部中断子程序梯形图三、知识链接1.编程元件——中断指针I中断指针I用来指明某一中断源的中断程序入口指针,执行到IRET(中断返回)指令时返回主程序。中断指针I应在FEND指令之后使用。外部输入中断从输入端子送入,用于机外突发随机事件引起的中断。图6-13给出了外部输入中断指针编号的意义,输入中断指针为I□0□,最高位与X0~X5的元件号相对应,即输入号分别为0~5(从X0~X5输入),最低位为中断信号的形式,为0时表示下降沿中断,反之为上升沿中断。例如中断指针I001之后的中断程序在输入信号X0的上升沿时执行。图6-13外部中断指针编号含义2.与中断有关的指令与中断有关的指令有中断返回指令IRET、允许中断指令EI和禁止中断指令DI,均无操作数。⑴PLC通常处于禁止中断的状态,指令EI和DI之间的程序段为允许中断的区间,当程序执行到该区间时,如果中断源产生中断,CPU将停止执行当前的程序,转去执行相应的中断子程序,执行到中断子程序中的IRET指令时,返回原断点,继续执行原来的程序。⑵中断程序从它惟一的中断指针开始,到第一条IRET指令结束。中断程序应放在FEND指令之后,IRET指令只能在中断程序中使用,中断程序的结构如图6-14所示。特殊辅助继电器M805△为ON时(△=0~8),禁止执行相应的中断I△口口(口口是与中断有关的数字)。例如M8050为ON时,禁止执行相应的中断I000和I001。M8059为ON时,关闭所有的计数器中断。图6-14中断程序结构⑶由于中断的控制是脱离于程序的扫描执行机制的,多个突发事件同时出现时必须有个处理秩序,这就是中断优先权。中断优先权按中断号的大小决定,号数小的中断优先权高。由于外部中断号整体上高于定时器中断。即外部中断的优先权较高。⑷执行一个中断子程序时,其他中断被禁止,在中断子程序中编入EI和DI,可实现双重中断,只允许两级中断嵌套。一次中断请求,中断程序一般仅能执行一次。⑸如果中断信号在禁止中断区间出现,该中断信号被储存,并在EI指令之后响应该中断。不需要关闭中断时,只使用EI指令,可以不使用DI指令。⑹中断输入信号的脉冲宽度应大于200μs,选择了输入中断时,其硬件输入滤波器自动地复位为50us(通常为10ms)。⑺直接高速输入可用于“捕获”窄脉冲信号。FX系列PLC需要用EI指令来激活X0~X5的脉冲捕获功能,捕获的脉冲状态存放在M8170~M8175中。接收到脉冲后,相应的特殊辅助继电器M变为ON,可用捕获的脉冲来触发某些操作。如果输入元件已用于其他高速功能,脉冲捕获功能将被禁止。四、任务实施1.用一个按钮接到X0模拟外部中断信号,用另一个带自锁的按钮接到X20模拟外部中断禁止信号,输出用指示灯代替,并连接PLC的电源,确保无误。2.输入图6-12的梯形图,检查无误后运行程序。3.先按下X20,再按X0,观察输出继电器Y10、Y11的状态有无变化,判断有无中断。4.再按一下X20,解除M8050的禁止中断后,再按X0,观察输出继电器Y10、Y11的状态有无变化,判断有无中断。任务五定时中断子程序一、任务提出在电动机等设备的软启动控制中经常要用到斜坡信号,FX系列可编程序控制器的斜坡输出指令是用于产生线性变化的模拟量输出的指令,使用定时中断实现。二、原理分析斜坡信号发生电