S7-200程序控制类指令及应用2020/5/131王兵跳转指令、循环指令、子程序指令、中断指令统称为程序控制类指令。程序控制类指令用于程序执行流程的控制。对一个扫描周期而言,跳转指令可以使程序出现跨越或跳跃以实现程序段的选择;子程序指令可调用某段子程序;循环指令可多次重复执行指定的程序段;中断指令则用于中断信号引起的子程序调用。程序控制类指令可以影响程序执行的流向及内容,对合理安排程序的结构,提高程序功能以及实现某些技巧性运算,具有重要的意义。2020/5/132第一节跳转指令一、跳转及标号指令跳转指令使程序流程跳转到指定标号N处的程序分支执行。(JMP)NJMPN跳转指令LBLN标号指令LBLN2020/5/133左图是跳转指令在梯形图中应用的例子。Network4中的跳转指令使程序流程跨过一些程序分支(Network5~15)跳转到标号3处继续运行。跳转指令中的“N”与标号指令中的“N”值相同。2020/5/134可以有多条跳转指令使用同一标号,但不允许一个跳转指令对应两个标号,即在同一程序中不允许存在两个相同的标号。可以在主程序、子程序或者中断服务程序中使用跳转指令,跳转与之相应的标号必须位于同一段程序中。一般将标号指令设在相关跳转指令之后,这样可以减少程序的执行时间。在跳转条件中引入上升沿或下降沿脉冲指令时,跳转只执行一个扫描周期,但若用特殊辅助继电器SM0.0作为跳转指令的工作条件,跳转就成为无条件跳转。2020/5/135使用跳转指令应注意以下几点:二、跳转指令的应用实例2020/5/1362020/5/137第二节循环指令一、循环指令及其功能FOR-NEXT指令循环执行FOR(开始)指令和NEXT(结束)指令之间的循环体(程序)指令段一定次数。FOR—NEXT指令可以实现8层嵌套。FOR指令和NEXT指令必须成对使用,在嵌套程序中距离最近的FOR指令及NEXT指令是一对。2020/5/138ENFORENOINDXFINALINIT(NEXT)FORINDX,INIT,FINALNEXT有效操作数:2020/5/139二、循环指令的应用实例122020/5/1310第三节子程序指令一、子程序指令子程序调用指令将程序控制权交给子程序SBR-N,该子程序执行完毕,程序控制权回到子程序调用指令的下一条指令。子程序指令含子程序调用指令和子程序返回指令。子程序条件返回指令(CRET)在条件满足时中止子程序执行。CALLSBR-NSBR-NENLADSTL子程序调用指令LADSTL子程序条件返回指令(RET)CRET2020/5/1311子程序是为一些特定的控制要求编制的相对独立的程序。为了和主程序区别,S7—200规定子程序与中断子程序分区排列在主程序的后边,且当子程序或中断子程序数量多于1时,分序列编号加以区别。如子程序中没有安排CRET指令,子程序将在子程序运行完毕后返回。2020/5/1312二、子程序的执行过程及子程序的嵌套当有一个子程序被调用时,系统会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为零,把控制权交给被调用的子程序。当子程序完成后,恢复逻辑堆栈,把控制权交还给调用程序。S7-200具有子程序嵌套调用功能,嵌套可以达到8层。但在中断子程序中仅能有一次子程序调用。2020/5/1313子程序举例:2020/5/1314子程序的嵌套举例:2020/5/1315第四节中断指令一、中断与中断源中断是计算机特有的工作方式,指主程序执行过程中,中断主程序的执行去执行中断子程序。和前节谈到的子程序一样,中断子程序也是为某些特定的控制功能而设定的。和普通子程序不同的是,中断子程序是为随机发生且必须立即响应的事件安排的,其响应时间应小于机器的扫描周期。能引起中断的信号叫中断源,S7-200系列CPU支持34种中断源,如表9-5所示。从表中可以看出,不同的CPU对中断事件的支持是不同的(表中Y表示该型号CPU具有该种中断功能)。2020/5/1316表9—5S7—200系列CPU支持的中断(事件)源:2020/5/13172020/5/131821221.通讯口中断通讯口中断含端口0及端口1接收及发送相关中断。PLC的串行通讯口可由梯形图或指令表程序来控制,这种通讯口的操作模式称为自由端口模式。在自由端口模式下,可由用户程序设置波特率、字符的位数、奇偶校验及通信协议。接收及发送中断可以简化程序对中断的控制。中断事件可分为以下三大类:2020/5/13192.I/O中断I/O中断包括上升沿中断及下降沿中断、高速计数器中断和脉冲串输出中断。S7-200CPU可用输入I0.0~I0.3的上升沿或下降沿产生中断,并可用这些上升沿或下降沿信号来表示某些需要及时响应的故障状态。2020/5/13203.时基中断时间中断包括定时中断及定时器T32/96中断,S7-200CPU可支持2个定时中断。定时中断按周期时间反复执行。周期时间范围为5ms~255ms,增量为lms。定时中断0的周期时间应写入SMB34,定时中断1的周期时间应写入SMB35。每当定时器溢出时,定时中断事件把控制权交给相应的中断程序,通常可用定时中断以固定的时间间隔去控制模拟量输入的采样或者去执行一个PID回路。定时器T32/96中断允许及时地响应一个给定的时间间隔。这些中断只支持1ms分辨率的延时接通定时器(TON)和延时断开定时器(TOF)T32和T96。T32和T96的工作方式与普通定时器相同。中断允许时且定时器的当前值等于预置值时,执行被连接的中断程序。2020/5/1321二、中断优先级及中断队列由于中断控制是脱离于程序的扫描执行机制的,如有多个突发事件出现时处理也必须有个秩序,这就是中断优先级。S7—200PLC中断优先组别从大的方面按下列顺序分级:通信(最高级);I/O(含HSC和脉冲列输出)(中极);定时(最低级)。在每一级中又可分别分级。优先级还有以下约定。2020/5/1322中断事件的优先级顺序:2020/5/13232020/5/1324三、中断指令及中断程序中断是计算机为应对紧急事件而设立的一种运行机制,但是并不一定在计算机的任何运行时间点上都可以允许中断的发生。对于PLC应用程序的运行来说,任何时候都响应内部及外部的所有中断称为全局开中断,任何时候都不响应各种中断称为全局禁止中断。当PLC进入RUN状态时,自动进入全局禁止中断状态,如需在适当的时候开放全局中断时,可在用户程序中使用全局中断允许指令(ENI),反之,如需全局禁止中断时,可在应用程序中的适当位置使用全局中断禁止指令(DISI)。执行DISI指令不会影响当前正在执行中的中断程序的执行,只有当该中断程序执行完毕后,DISI功能才有效。2020/5/1325相对全局开放中断的条件下,单个中断可独立地开放与禁止,所用的指令分别为中断连指令(ATCH)及中断分离指令(DTCH)。ATCH指令更重要的职能是将中断事件与该事件发生时需执行的中段程序段连接起来。在ATCH指令参数中,设有中断事件号及所对应的中段程序号,而所有的中断程序都依次排列在主程序之后,并用中断标号指令(INT)标示号码。在ATCH指令指定相应中断子程序时,自动允许中断。与此相反,中断分离指令DTCH分离中断事件与中断子程序的联系,自动关闭中断。2020/5/1326ENIINTLADSTL中断允许指令LADSTL(ENI)DISI中断禁止指令(DISI)(RETI)(RETI)中断条件返回指令LADSTLCRETI中断无条件返回指令LADSTLRETI中断标号LADSTLINTNN2020/5/1327ENATCHENOINTEVNTATCHINT,EVNT中断连接指令DTCHEVNT中断分离指令ENDTCHENOEVNT操作数:2020/5/1328中断是随机产生的,即在主程序执行的过程中随时都可能产生中断,为了减少主程序中断的不良影响,被中断的时间越短越好,这就要求中断子程序尽可能简洁。在CPU接到中断申请且准备响应时,系统先将反映指令执行情况及累加器状态的逻辑堆栈、累加器、寄存器及特殊标志位保存,然后再去执行中断程序。对于通讯及外部中断,每一个中断申请一般只执行中断程序一次。对于时基或定时器中断,每隔一定的时间执行中断程序一次。当中断程序执行完毕时,恢复中断执行前保存的数据,程序返回主程序原断点执行。2020/5/1329四、中断程序的执行下降沿中断服务程序举例:2020/5/1330用定时中断读取模拟量数值举例:2020/5/1331