程序控制类指令用于程序运行状态的控制,主要包括系统控制、跳转、循环、子程序调用、顺序控制等指令。
(一)系统控制指令
1.结束指令
(1)END:条件结束指令,执行条件成立(左侧逻辑值为 1)时结束主程序,返回主程序的第一条指令执行。在梯形图中,该指令不连在左侧母线上。END 指令只能用于主程序,不能在子程序和中断程序中使用。END指令无操作数,指令格式如图4.56所示。
图4.56 END /MEND指令格式
(2)MEND:无条件结束指令,结束主程序,返回主程序的第一条指令执行。在梯形图中,无条件结束指令连接左侧母线。用户必须以无条件结束指令结束主程序。条件结束指令,用在无条件结束指令前结束主程序。在编程结束时一定要写上该指令,否则出错;在调试程序时,在程序的适当位置插入MEND指令可以实现程序的分段调试。MEND指令格式如图4.57所示。
必须指出,STEP7-Micro/Win32 编程软件在主程序的结尾会自动生成无条件结束指令(MEND),用户不得输入,否则编译出错。
图4.57 END /MEND指令格式
2.停止指令
STOP:停止指令,执行条件成立,停止执行用户程序,令 CPU 工作方式由 RUN转到STOP。在中断程序中执行STOP指令,该中断立即终止,并且忽略所有挂起的中断,继续扫描程序的剩余部分,在本次扫描的最后,将CPU由RUN切换到STOP。指令格式如图4.58(a)所示。
注意:END 和 STOP 指令的区别。如图4.58(b)所示,当I0.0接通时,Q0.0有输出。若I0.1接通,则执行END指令,终止用户程序,并返回主程序的起点,这样,Q0.0 仍保持接通,但下面的程序不会执行。若I0.1断开,接通I0.2,则Q0.1有输出。若将I0.3接通,则执行STOP指令,立即终止程序执行,Q0.0与Q0.1均复位,CPU转为STOP方式。
图4.58 END和STOP指令
3.警戒时钟刷新指令WDR(又称看门狗定时器复位指令)
警戒时钟的定时时间为300 ms,每次扫描它都被自动复位一次。正常工作时,如果扫描周期小于300 ms,警戒时钟不起作用。如果强烈的外部干扰使可编程控制器偏离正常的程序执行路线,警戒时钟不再被周期性地复位,定时时间到,可编程控制器将停止运行。若程序扫描的时间超过300 ms,为了防止在正常的情况下警戒时钟动作,可将警戒时钟刷新指令(WDR)插入到程序中适当的地方,使警戒时钟复位。这样,可以增加一次扫描时间。指令格式如图4.59所示。
图4.59 WDR指令格式
工作原理:当使能输入有效时,警戒时钟复位,可以增加一次扫描时间。若使能输入无效,警戒时钟定时时间到,程序将终止当前指令的执行,重新启动,返回到第一条指令重新执行。
注意:如果使用循环指令阻止扫描完成或严重延迟扫描完成,下列程序只有在扫描循环完成后才能执行:通信(自由口方式除外)、I/O更新(立即I/O除外)、强制更新、SM更新、运行时间诊断、中断程序中的STOP指令。10 ms和100 ms定时器对于超过 25 s 的扫描不能正确地累计时间。如果预计扫描时间将超过500 ms时,或者预计会发生大量中断活动,可能阻止返回主程序扫描超过500 ms,应使用WDR指令,来重新触发看门狗计时器。
(二)循环、跳转指令
1.循环指令
(1)指令格式。
程序循环结构用于描述一段程序的重复循环执行。由 FOR 和 NEXT 指令构成程序的循环体。FOR指令标记循环的开始,NEXT指令为循环体的结束指令。指令格式如图4.60所示。
图4.60 FOR/NEXT指令格式
在LAD中,FOR指令为指令盒格式。
EN为使能输入端。
INDX为当前值计数器,操作数为VW、IW、QW、MW、SW、SMW、LW、T、C、AC。
INIT为循环次数初始值,操作数为VW、IW、QW、MW、SW、SMW、LW、T、C、AC、AIW、常数。
FINAL 为循环计数终止值,操作数为VW、IW、QW、MW、SW、SMW、LW、T、C、AC、AIW、常数。
工作原理如下:
使能输入EN有效时,循环体开始执行,执行到NEXT指令时返回。每执行一次循环体,当前值计数器INDX增1,达到终止值FINAL时,循环结束。
使能输入无效时,循环体程序不执行。每次使能输入有效,指令自动将各参数复位。
FOR/NEXT指令必须成对使用,循环可以嵌套,最多为8层。
(2)循环指令示例。
循环指令示例如图4.61所示。当I0.0为ON时,1所示的外循环执行3次,由VW200累计循环次数。当I0.1为ON时,外循环每执行一次,2所示的内循环执行3次,且由VW210累计循环次数。
图4.61 循环指令示例
2.跳转指令及标号
(1)指令格式。
JMP:跳转指令,使能输入有效时,把程序的执行跳转到同一程序指定的标号(n)处执行。
LBL:指定跳转的目标标号。
操作数n:0~255。
指令格式如图4.62所示。
必须强调的是:跳转指令及标号必须同在主程序、同一子程序内或在同一中断服务程序内,不可由主程序跳转到中断服务程序或子程序,也不可由中断服务程序或子程序跳转到主程序。
(2)跳转指令示例。
跳转指令示例如图4.63所示。当JMP条件满足(即I0.0为ON)时,程序跳转执行LBL标号以后的指令,而在JMP和LBL之间的指令一概不执行,在这个过程中,即使I0.1接通也不会有Q0.1输出。当JMP条件不满足时,则当I0.1接通时Q0.1有输出。
图4.62 JMP/LBL指令格式
图4.63 跳转指令示例
(3)应用举例。
JMP、LBL指令在工业现场控制中,常用于工作方式的选择。如有3台电动机M1~M3,具有两种启停工作方式:
① 手动操作方式:分别用每台电动机各自的启停按钮控制M1~M3的起停状态。
② 自动操作方式:按下启动按钮,M1~M3 每隔 5 s 依次启动;按下停止按钮,M1~M3同时停止。PLC控制的外部接线图、程序结构图、梯形图分别如图4.64(a)、(b)、(c)所示。
图4.64 应用举例
从控制要求中可以看出,需要在程序中体现两种可以任意选择的控制方式。因此运用跳转指令的程序结构可以满足控制要求。如图 4.64(b)所示,当操作方式选择开关闭合时,I0.0的常开触点闭合,跳过手动程序段不执行;I0.0 的常闭触点断开,选择自动方式的程序段执行。而操作方式选择开关断开时的情况与此相反,跳过自动方式程序段不执行,选择手动方式程序段执行。
(三)子程序调用及子程序返回指令
通常将具有特定功能并且多次使用的程序段作为子程序。主程序中用指令决定具体子程序的执行状况。当主程序调用子程序并执行时,子程序执行全部指令直至结束。然后,系统将返回调用子程序的主程序。子程序用于为程序分段和分块,使其成为较小的、更易于管理的块。在程序中调试和维护时,通过使用较小的程序块,对这些区域和整个程序简单地进行调试和排除故障。只在需要时才调用程序块,可以更有效地使用PLC,因为所有的程序块可能无须执行每次扫描。
若要在程序中使用子程序,必须执行下列三项任务:建立子程序;在子程序局部变量表中定义参数(如果有);从适当的POU(主程序或另一个子程序)中调用子程序。(www.xing528.com)
1.建立子程序
可采用下列几种方法建立子程序:
(1)从“编辑”菜单,选择“插入”(Insert)/“子程序”(Subroutine)。
(2)从“指令树”,用鼠标右键单击“程序块”图标,并从弹出菜单中选择“插入”(Insert)/“子程序”(Subroutine)。
(3)从“程序编辑器”窗口,用鼠标右键单击,并从弹出菜单中选择“插入”(Insert)/“子程序”(Subroutine)。
程序编辑器从先前的POU显示更改为新的子程序。程序编辑器底部会出现一个新标签,代表新的子程序。此时,可以对新的子程序编程。
用右键双击指令树中的子程序图标,在弹出的菜单中选择“重新命名”,可修改子程序的名称。如果为子程序指定一个符号名(如 USR_NAME),则该符号名会出现在指令树的“子例行程序”文件夹中。
2.在子程序局部变量表中定义参数
可以使用子程序的局部变量表为子程序定义参数。注意:程序中每个POU都有一个独立的局部变量表,必须在选择该子程序标签后出现的局部变量表中为该子程序定义局部变量。编辑局部变量表时,必须确保已选择适当的标签。每个子程序最多可以定义16个输入/输出参数。
3.子程序调用及子程序返回指令的指令格式
子程序有子程序调用和子程序返回两大类指令。子程序返回又分为条件返回和无条件返回。指令格式如图4.65所示。
图4.65 子程序调用及子程序返回指令格式
CALL SBRn:子程序调用指令,在梯形图中为指令盒的形式。子程序的编号n从0开始,随着子程序个数的增加自动生成。操作数n:0~63。
CRET:子程序条件返回指令,条件成立时结束该子程序,返回原调用处的指令 CALL的下一条指令。
RET:子程序无条件返回指令,子程序必须以本指令作结束,由编程软件自动生成。
需要说明的是:
(1)子程序可以多次被调用,也可以嵌套(最多8层),还可以自己调自己。
(2)子程序调用指令用在主程序和其他调用子程序的程序中。子程序的无条件返回指令在子程序的最后网络段,梯形图指令系统能够自动生成子程序的无条件返回指令,用户无须输入。
(四)中断指令
S7-200 设置了中断功能,用于实时控制、高速处理、通信和网络等复杂和特殊的控制任务。中断就是终止当前正在运行的程序,去执行为立即响应的信号而编制的中断服务程序,执行完毕再返回原先被终止的程序继续运行。
1.中断源
(1)中断源的类型。
中断源即发出中断请求的事件,又叫中断事件。为了便于识别,系统给每个中断源都分配一个编号,称为中断事件号。S7-200系列可编程控制器最多有34个中断源,分为三大类:通信中断、I/O中断和时基中断。
① 通信中断。
在自由口通信模式下,用户可通过编程来设置波特率、奇偶校验和通信协议等参数。用户通过编程控制通信端口的事件称为通信中断。
② I/O中断。
I/O 中断包括外部输入上升/下降沿中断、高速计数器中断和脉冲输出中断。S7-200 用输入(I0.0、I0.1、I0.2或I0.3)上升/下降沿产生中断。这些输入点用于捕获在发生时必须立即处理的事件。高速计数器中断指对高速计数器运行时产生的事件实时响应,包括当前值等于预设值时产生的中断、计数方向改变时产生的中断或计数器外部复位产生的中断。脉冲输出中断是指预定数目脉冲输出完成而产生的中断。
③ 时基中断。
时基中断包括定时中断和定时器T32/T96中断。定时中断用于支持一个周期性的活动。周期时间从 1 ms 至255 ms,时基是1 ms。使用定时中断0,必须在SMB34中写入周期时间;使用定时中断1,必须在SMB35中写入周期时间。将中断程序连接在定时中断事件上,若定时中断被允许,则计时开始,每当达到定时时间值,执行中断程序。定时中断可以用来对模拟量输入进行采样或定期执行PID回路。定时器T32/T96中断指允许对定时间间隔产生中断。
(2)中断优先级和排队等候。
优先级是指多个中断事件同时发出中断请求时,CPU对中断事件响应的优先次序。S7- 200规定的中断优先级由高到低依次是:通信中断、I/O 中断和定时中断。每类中断中不同的中断事件又有不同的优先权,如表4.17所示。
表4.17 中断事件及优先级
续表
一个程序中总共可有128个中断。S7-200在各自的优先级组内按照先来先服务的原则为中断提供服务。在任何时刻,只能执行一个中断程序。一旦一个中断程序开始执行,则一直执行至完成,不能被另一个中断程序打断,即使是更高优先级的中断程序。中断程序执行中,新的中断请求按优先级排队等候。中断队列能保存的中断个数有限,若超出,则会产生溢出。中断队列的最多中断个数和溢出标志位如表4.18所示。
表4.18 中断队列的最多中断个数和溢出标志位
2.中断指令
中断指令有 4 条,包括开、关中断指令,中断连接、分离指令。指令格式如表4.19所示。
表4.19 中断指令格式
(1)开、关中断指令。
开中断(ENI)指令全局性允许所有中断事件。关中断(DISI)指令全局性禁止所有中断事件。中断事件的每次出现均被排队等候,直至使用全局开中断指令重新启用中断。
PLC转换到RUN(运行)模式时,中断开始时被禁用,可以通过执行开中断指令,允许所有中断事件。执行关中断指令会禁止处理中断,但是现有中断事件将继续排队等候。
(2)中断连接、分离指令。
中断连接指令(ATCH)将中断事件(EVNT)与中断程序号码(INT)相连接,并启用中断事件。
中断分离(DTCH)指令取消某中断事件(EVNT)与所有中断程序之间的连接,并禁用该中断事件。
注意:一个中断事件只能连接一个中断程序,但多个中断事件可以调用一个中断程序。
3.中断程序
(1)中断程序的概念。
中断程序是为处理中断事件而事先编好的程序。中断程序不是由程序调用,而是在中断事件发生时由操作系统调用。在中断程序中不能改写其他程序使用的存储器,最好使用局部变量。中断程序应实现特定的任务,应“越短越好”,中断程序由中断程序号开始,以无条件返回指令(CRETI)结束。在中断程序中禁止使用DISI、ENI、HDEF、LSCR和END指令。
(2)建立中断程序的方法。
方法一:“编辑”/“插入”(Insert)/“中断”(Interrupt)。
方法二:从指令树,用鼠标右键单击“程序块”图标并从弹出菜单选择“插入”(Insert)/“中断”(Interrupt)。
方法三:从“程序编辑器”窗口,从弹出菜单用鼠标右键单击“插入”(Insert)/“中断”(Interrupt)。
程序编辑器从先前的POU显示更改为新中断程序,在程序编辑器的底部会出现一个新标记,代表新的中断程序。
利用定时中断功能编制一个程序,实现如下功能:当I0.0由OFF→ON,Q0.0亮1 s,灭1 s,如此循环反复直至I0.0由ON→OFF,Q0.0变为OFF。程序如图4.66所示。
图4.66 利用定时中断功能编制程序
习题与思考题
完成控制程序的梯形图、语句表程序的相互转换。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。