
程序控制类指令及应用.ppt
25页第九章 程序控制类指令及应用学习目标:学习目标:l了解循环指令及其功能l掌握顺序控制继电器指令及状态法编程l了解子程序指令分类,执行过程及子程序的嵌套l掌握中断与中断源,中断优先级及中断队列,中断指令及中断程序,中断程序的执行及程序数据共享,中断指令应用举例第一节 跳转指令l一、一、 跳转与标号指令跳转与标号指令 l Ø跳跳转转指指令令可可以以使使PLCPLC编编程程的的灵灵活活性性大大大大提提高高,,使使主主机机可可根根据据不不同同条条件的判断,选择不同的程序段执行程序件的判断,选择不同的程序段执行程序ØJMPJMP,,跳转指令使能输入有效时,使程序跳转到标号(跳转指令使能输入有效时,使程序跳转到标号(n n))处执行ØLBLLBL,,标标号号指指令令标标记记指指令令跳跳转转的的目目的的地地的的位位置置((n n))操操作作数数n n为为0 0~~255255 l跳转指令的使用说明:跳转指令的使用说明:l①①跳转指令和标号指令必须配合使用,而且只能使用跳转指令和标号指令必须配合使用,而且只能使用在同一程序块中不能在不同的程序块间互相跳转;在同一程序块中不能在不同的程序块间互相跳转;l②②执行跳转后,被跳过程序段中的各元器件的状态各执行跳转后,被跳过程序段中的各元器件的状态各有不同:有不同:Q、、M、、S、、C等元器件的位保持跳转前的状等元器件的位保持跳转前的状态;计数器态;计数器C停止计数,当前值存储器保持跳转前的计停止计数,当前值存储器保持跳转前的计数值;对定时器来说,因刷新方式不同而工作状态不数值;对定时器来说,因刷新方式不同而工作状态不同。
在跳转期间,分辩率为同在跳转期间,分辩率为1ms和和10ms的定时器会一的定时器会一直保持跳转前的工作状态,原来工作的继续工作,到直保持跳转前的工作状态,原来工作的继续工作,到设定值后其位的状态也会改变,输出触点动作,其当设定值后其位的状态也会改变,输出触点动作,其当前值存储器一直累计到最大值前值存储器一直累计到最大值32767才停止对分辨率才停止对分辨率为为100ms的定时器来说,跳转期间停止工作,但不会复的定时器来说,跳转期间停止工作,但不会复位,存储器里的值为跳转时的值,跳转结束后,若输位,存储器里的值为跳转时的值,跳转结束后,若输入条件允许,可继续计时,但已失去了准确计时的意入条件允许,可继续计时,但已失去了准确计时的意义所以在跳转段里的定时器要慎用所以在跳转段里的定时器要慎用 l第二节第二节 循环指令循环指令l循环指令的引入为解决重复执行相同功能的程循环指令的引入为解决重复执行相同功能的程序段提供了极大方便,并且优化了程序结构序段提供了极大方便,并且优化了程序结构循环指令有两条:循环指令有两条:FOR和和NEXTlFOR,循环开始指令用来标记循环体的开始循环开始指令用来标记循环体的开始。
lNEXT,循环结束指令用来标记循环体的结,循环结束指令用来标记循环体的结束无操作数无操作数lFOR和和NEXT之间的程序段称为循环体,每执之间的程序段称为循环体,每执行一次循环体,当前计数值增行一次循环体,当前计数值增1,并且将其结,并且将其结果同终值进行比较,如果大于终值,则终止循果同终值进行比较,如果大于终值,则终止循环循环指令使用说明:Ø①①FORFOR、、NEXTNEXT指令必须成对使用;指令必须成对使用;Ø②②FORFOR和和NEXTNEXT可可以以循循环环嵌嵌套套,,嵌嵌套套最最多多为为8 8层层,,但但各各个个嵌嵌套套之之间间不不可有交叉现象;可有交叉现象;Ø③③每次使能输入(每次使能输入(ENEN))重新有效时,指令将自动复位各参数;重新有效时,指令将自动复位各参数;Ø④④初值大于终值时,循环体不被执行初值大于终值时,循环体不被执行Ø在在使使用用时时必必须须给给FORFOR指指令令指指定定当当前前循循环环计计数数((INDXINDX)、)、初值(初值(INITINIT))和终值(和终值(FINALFINAL)指令格式:指令格式:FOR INDX, INIT, FINALFOR INDX, INIT, FINAL … … NEXT NEXT第三节第三节 顺控继电器指令顺控继电器指令lS7-200 CPU含有含有256个顺序控制继电器个顺序控制继电器((SCR)用于顺序控制。
用于顺序控制S7-200包含顺包含顺序控制指令,可以模仿控制进程的步骤,序控制指令,可以模仿控制进程的步骤,对程序逻辑分段;可以将程序分成单个对程序逻辑分段;可以将程序分成单个流程的顺序步骤,也可同时激活多个流流程的顺序步骤,也可同时激活多个流程;可以使单个流程有条件地分成多支程;可以使单个流程有条件地分成多支单个流程,也可以使多个流程有条件地单个流程,也可以使多个流程有条件地重新汇集成单个流程从而对一个复杂重新汇集成单个流程从而对一个复杂的工程可以十分方便地编制控制程序的工程可以十分方便地编制控制程序 l 系统提供系统提供3个顺序控制指令:顺序控制个顺序控制指令:顺序控制开始指令(开始指令(LSCR)、顺序控制转移指令)、顺序控制转移指令((SCRT)和顺序控制结束指令)和顺序控制结束指令((SCRE)l1. 顺序继电器指令顺序继电器指令l((1)段开始指令:)段开始指令:LSCRl 定义一个顺序控制继电器段的开始操作数定义一个顺序控制继电器段的开始操作数为顺序控制继电器位,作为本段的段标志位为顺序控制继电器位,作为本段的段标志位当位为当位为1时,允许该时,允许该SCR段工作。
段工作l((2)段结束指令:)段结束指令:SCREl一个一个SCR段必须用该指令来结束段必须用该指令来结束l((3)段转移指令:)段转移指令:SCRTl 该指令用来实现本段与另一段之间的切换该指令用来实现本段与另一段之间的切换操作数为顺序控制继电器位,是下一个操作数为顺序控制继电器位,是下一个SCR段段的标志位当使能输入有效时,一方面对置位,的标志位当使能输入有效时,一方面对置位,以便让下一个以便让下一个SCR段开始工作,另一方面同时段开始工作,另一方面同时对本对本SCR段的标志位复位,以便本段停止工作段的标志位复位,以便本段停止工作 l2. 使用顺序继电器指令的限制使用顺序继电器指令的限制 l只能使用顺序控制继电器位作为段标志位一只能使用顺序控制继电器位作为段标志位一个顺序控制继电器位在程序中只能使用一次个顺序控制继电器位在程序中只能使用一次l在一个在一个SCR段中不能出现跳入、跳出或段内跳段中不能出现跳入、跳出或段内跳转等程序结构即在段中不能使用转等程序结构即在段中不能使用JMP和和LBL指令同样,在一个指令同样,在一个SCR段中不允许出现循环段中不允许出现循环程序结构和条件结束,即禁止使用程序结构和条件结束,即禁止使用FOR、、NEXT和和END指令。
指令l指令格式:指令格式: LSCR bit (段开始指令)(段开始指令)l SCRT bit (段转移指令)(段转移指令)l SCRE (段结束指令)(段结束指令)l3. 顺序结构顺序结构l一个一个SCR段必须用该指令来结束段必须用该指令来结束l4. 程序实例程序实例l根据舞台灯光效果的要求,控制红、绿、黄三根据舞台灯光效果的要求,控制红、绿、黄三色灯要求:红灯先亮,色灯要求:红灯先亮,2s后绿灯亮,再过后绿灯亮,再过3s后黄灯亮待红、绿、黄灯全亮后黄灯亮待红、绿、黄灯全亮3min后后,全部全部熄灭程序如图熄灭程序如图5-29所示l说明:每一个说明:每一个SCR程序段中均包含三个要素:程序段中均包含三个要素:l1)输出对象:在这一步序中应完成的动作;)输出对象:在这一步序中应完成的动作;l2)转移条件:满足转移条件后,实现)转移条件:满足转移条件后,实现SCR段段的转移;的转移;l3)转移目标:转移到下一个步序转移目标:转移到下一个步序 AN Q0.2 //在初始状态下起动,置在初始状态下起动,置,,1 1 //S0.1=1LSCR S0.1 //S0.1=1,激活第一,激活第一SCRSCR程序段,程序段, //进入第一步序进入第一步序,,1 1 //红灯亮,并保持红灯亮,并保持TON T37,,+20+20 //启动启动2s2s定时器定时器LD T37 //2s后程序转移到第二后程序转移到第二SCRSCR段,段,SCRT S0.2 //((S0.2=1S0.2=1,,S0.1=0S0.1=0))SCRE // 第一第一SCRSCR段结束段结束LSCR S0.2 //S0.2=1,激活第二,激活第二SCRSCR程序段,程序段, //进入第二步序进入第二步序S Q1.1 //绿灯亮,并保持绿灯亮,并保持TON T38,,+30+30 //启动启动3s3s定时器定时器 l第四节第四节 子程序调用与返回指令子程序调用与返回指令 l与子程序有关的操作有:建立子程序、子程序的调与子程序有关的操作有:建立子程序、子程序的调用和返回。
用和返回l((1)建立子程序)建立子程序 l((2)子程序调用)子程序调用 Ø建建立立子子程程序序是是通通过过编编程程软软件件来来完完成成的的可可用用编编程程软软件件““编编辑辑””菜菜单单中中的的““插插入入””选选项项,,选选择择““子子程程序序””,,以以建建立立或或插插入入一一个个新新的的子子程程序序,,同同时时,,在在指指令令树树窗窗口口可可以以看看到到新新建建的的子子程程序序图图标标,,默默认认的的程程序序名名是是SBR_NSBR_N,,编编号号N N从从0 0开开始始按按递递增增顺顺序序生生成成,,也也可可以以在在图图标标上上直直接接更更改改子子程程序序的的程程序序名名,,把把它它变变为为更更能能描描述述该该子子程程序序功功能能的的名名字字在在指指令令树树窗窗口双击子程序的图标就可以进入子程序,并对它进行编辑口双击子程序的图标就可以进入子程序,并对它进行编辑 ØCALLCALL,,子子程程序序调调用用指指令令在在使使能能输输入入有有效效时时,,主主程程序序把把程程序序控控制制权权交交给给子子程程序序子子程程序序的的调调用用可可以以带带参参数数,,也也可可以以不不带带参参数。
它在梯形图中以指令盒的形式编程它在梯形图中以指令盒的形式编程指令格式:指令格式:CALL SBR_0CALL SBR_0l(3)子程序返回l子程序调用使用说明: ØCRETCRET,,子子程程序序条条件件返返回回指指令令在在使使能能输输入入有有效效时时,,结结束束子子程程序序的的执执行行,,返返回回主主程程序序中中((指指向向子子程程序序调调用用的的下下一一条条指指令令))梯梯形形图图中中以以线线圈圈的的形形式式编编程程,,指指令令不不带带参参数;数; RETRET,,子程序无条件返回指令子程序无条件返回指令指令格式:指令格式: CRET CRET ((条件返回)条件返回) RET RET ((无条件返回)无条件返回) Ø①①子程序结束要加上无条件返回指令子程序结束要加上无条件返回指令RETRETCRETCRET指令只能用于子程序中;指令只能用于子程序中;Ø②②如如果果在在子子程程序序的的内内部部又又对对另另一一个个程程序序执执行行调调用用指指令令,,则则这这种种调调用用称称为为子子程程序序的的嵌嵌套套。
子程序嵌套的深度最多为子程序嵌套的深度最多为8 8级;级;Ø③③当当一一个个子子程程序序被被调调用用时时,,系系统统自自动动保保存存当当前前的的逻逻辑辑堆堆栈栈数数据据,,并并把把栈栈顶顶置置1 1,,堆堆栈栈中中的的其其它它位位置置设设为为0 0,,子子程程序序占占有有控控制制权权子子程程序序执执行行结结束束,,通通过过返返回回指指令令自自动动恢恢复复原原来来的的逻辑堆栈值,调用程序又重新取得控制权;逻辑堆栈值,调用程序又重新取得控制权; Ø④④累累加加器器可可在在调调用用程程序序和和被被调调用用子子程程序序之之间间自自由由传传递递,,所所以以累累加加器器的的值值在在子子程程序序调调用用时既不保存也不恢复时既不保存也不恢复 l(3)带参数的子程序调用 l 局部变量表中的变量类型区定义的变量有: Ø子子程程序序中中可可以以有有参参变变量量,,带带参参数数的的子子程程序序调调用用扩扩大大了了子子程程序序的的使使用用范范围围,,增增加加了了调调用用的的灵灵活活性性子子程程序序的的调调用用过过程程如如果果存存在在数数据据的的传传递递,,则在调用指令中应包含相应的参数则在调用指令中应包含相应的参数。
Ø子子程程序序的的参参数数在在子子程程序序的的局局部部变变量量表表中中加加以以定定义义参参数数包包含含的的信信息息有有地地址址、、变变量量名名((符符号号))、、变变量量类类型型和和数数据据类类型型子子程程序序最最多多可可以以传传递递1616个参数 Ø①①传传入入子子程程序序参参数数ININININ可可以以是是直直接接寻寻址址数数据据((如如::VB10VB10))、、间间接接寻寻址数据(如:址数据(如:* *AC1AC1)、)、常数(如:常数(如:1616##12341234)或地址(如:)或地址(如:& &VB100VB100););Ø②②传传入入/ /传传出出子子程程序序参参数数IN/OUTIN/OUT调调用用子子程程序序时时,,将将指指定定参参数数位位置置的的值值传传到到子子程程序序,,子子程程序序返返回回时时,,从从子子程程序序得得到到的的结结果果被被返返回回到到指指定定参参数数的的地地址址参参数数可可采采用用直直接接寻寻址址和和间间接接寻寻址址,,但但常常数数和和地地址址不不允允许许作作为输入为输入/ /输出参数;输出参数;7. 与ENO指令 ØAENO AENO ,,与与ENOENO指指令令。
ENOENO是是LADLAD中中指指令令盒盒的的布布尔尔能能流流输输出出端端如如果果指指令令盒盒的的能能流流输输入入有有效效,,则则执执行行没没有有错错误误,,ENOENO就就置置位位,,并并将将能能流流向向下下传传递递ENOENO可以作为允许位表示指令成功执行可以作为允许位表示指令成功执行ØSTLSTL指指令令没没有有ENEN输输入入,,但但对对要要执执行行的的指指令令,,其其栈栈顶顶值值必必须须为为1 1可可用用“与与”ENOENO((AENOAENO))指令来产生指令盒中的指令来产生指令盒中的ENOENO位相同的功能位相同的功能指令格式:指令格式:AENOAENOØAENOAENO指指令令无无操操作作数数,,且且只只在在STLSTL中中使使用用,,它它将将栈栈顶顶值值和和ENOENO位位进进行行逻逻辑辑与运算,运算结果保存到栈顶与运算,运算结果保存到栈顶Ø③③传传出出子子程程序序参参数数OUTOUT将将从从子子程程序序来来的的结结果果返返回回到到指指定定参参数数的的位位置置输出参数可以采用直接寻址和间接寻址,但不可以是常数或地址;输出参数可以采用直接寻址和间接寻址,但不可以是常数或地址;Ø④④暂暂时时变变量量TEMPTEMP。
只只能能在在子子程程序序内内部部暂暂时时存存储储数数据据,,不不能能用用来来传传递递参参数l程序实例: 与ENO指令举例 上图的语句表及注释如下:LD I0.0 //使能输入端+I VW100, VW200 //整数加法,VW100+VW200→VW200AENO //与ENO指令ATCH INT_0, 10 //如果+I指令执行正确,则调用中断程序INT_0, //中断号为10 第五节 中断指令l 所所谓谓中中断断,,是是当当控控制制系系统统执执行行正正常常程程序序时时,,系系统统中中出出现现了了某某些些急急需需处处理理的的异异常常情情况况或或特特殊殊请请求求,,这这时时系系统统暂暂时时中中断断当当前前程程序序,,转转去去对对随随机机发发生生的的紧紧迫迫事事件件进进行行处处理理((执执行行中中断断服服务务程程序序)),,当当该该事事件件处处理理完完毕毕后后,,系系统统自自动动回回到到原原来被中断的程序继续执行来被中断的程序继续执行。
((1)全局中断允许)全局中断允许/禁止指令禁止指令 ØENIENI,,全全局局中中断断允允许许指指令令全全局局性性的的允允许许所所有被连接的中断事件有被连接的中断事件ØDISIDISI,,全全局局中中断断禁禁止止指指令令全全局局性性的的禁禁止止处处理理所所有有的的中中断断事事件件执执行行DISIDISI指指令令后后,,出出现现的的中中断断事事件件就就进进入入中中断断队队列列排排队队等等候候,,直直到到ENIENI指令重新允许中断指令重新允许中断ØCPUCPU进进入入RUNRUN运运行行模模式式时时自自动动禁禁止止所所有有中中断断在在RUNRUN运运行行模模式式中中执执行行ENIENI指指令令后后,,允允许许所所有有中断((2)中断连接)中断连接/分离指令分离指令 ØATCHATCH,,中中断断连连接接指指令令用用来来建建立立某某个个中中断断事事件件((EVNTEVNT))和和某某个个中中断断程程序序((INTINT))之之间间的的联联系系并并允允许许这这个个中中断断事事件指令格式:指令格式:DTCH EVENTDTCH EVENTØ在在调调用用一一个个中中断断程程序序前前,,必必须须用用中中断断连连接接指指令令,,建建立立某某中中断断事事件件与与中中断断程程序序的的连连接接。
当当把把某某个个中中断断事事件件和和中中断断程程序序建建立立连连接接后后,,该该中中断断事事件件发发生生时时会会自自动动开开中中断断多多个个中中断断事事件件可可调调用用同同一一个个中中断断程程序序,,但但一一个个中中断断事事件件不不能能同同时时与与多多个个中中断断程程序序建建立立连连接接否否则则,,在在中中断断允允许许且且某某个个中中断断事事件件发发生生时时,,系系统统默默认认执执行行与与该该事事件件连连接接的的最最后一个中断程序后一个中断程序ØDTCHDTCH,,中中断断分分离离指指令令用用来来解解除除某某个个中中断断事事件件((EVNTEVNT))和和某某个个中中断断程程序序((INTINT))之之间间的的联联系系并并禁禁止止该该中中断断事事件件DTCH指令使中断回到不激活或无效状态指令使中断回到不激活或无效状态指令格式:指令格式:DTCH EVENT DTCH EVENT ((3)中断服务程序标号)中断服务程序标号/返回指令返回指令 Ø中中断断服服务务程程序序由由标标号号开开始始,,以以无无条条件件返返回回指指令令结结束束内内部部或或外外部部的的中中断断事事件件调调用用相相应应的的中中断断服服务务程程序序。
在在中中断断服服务务程程序序中中,,用用户户亦亦可可根根据据前前面面逻逻辑辑条条件件使使用用条条件件返返回回指指令令,,返返回回主主程程序序但但中中断断服服务务程程序序必必须须以以无无条条件件返返回回指指令令作作结结束束中中断断服服务务程程序序中中禁禁止止使使用用以以下下指指令令::DISIDISI、、ENIENI、、CALLCALL、、HDEFHDEF、、FOR/NEXTFOR/NEXT、、LSCRLSCR、、SCRESCRE、、SCRTSCRT、、ENDENDØ中中断断前前后后,,系系统统保保存存和和恢恢复复逻逻辑辑堆堆栈栈、、累累加加寄寄存存器器、、特特殊殊存存储储器器标标志志位(位(SMSM)从而避免了中断服务返回后对主程序执行现场所造成的破坏从而避免了中断服务返回后对主程序执行现场所造成的破坏ØINT INT n n,,中中断断服服务务程程序序标标号号指指令令中中断断服服务务程程序序标标号号INTINT标标示示n n号号中中断断服服务程序的开始(入口)务程序的开始(入口)n n的范围是的范围是0 0~~127127(取决于(取决于CPUCPU的型号)的型号)ØCRETICRETI,,中中断断服服务务程程序序条条件件返返回回指指令令。
CRETICRETI根根据据前前面面逻逻辑辑条条件件决决定定是是否返回ØRETIRETI,,中中断断服服务务程程序序无无条条件件返返回回指指令令RETIRETI是是中中断断服服务务程程序序必必备备的的结结束指令Ø定时中断采集模拟量程序见下图定时中断采集模拟量程序见下图LD SM0.1 //首次扫描时位打首次扫描时位打 //开,用于调用初始化子例行程序开,用于调用初始化子例行程序CALL SBR_0 //调用子程序调用子程序SBR_0SBR_0LD SM0.0 //当系统处于当系统处于RUNRUN模式模式 //时,始终打开(即=时,始终打开(即=1 1))MOVB 100, SMB34 //100毫秒放入特毫秒放入特 //殊内存字节殊内存字节SMB34SMB34((SMB34SMB34和和SMB35SMB35控控 //制中断制中断0 0和中断和中断1 1的时间间隔)的时间间隔)ATCH INT_0, 10 //调用中断程序调用中断程序ENI //全局性启用中断全局性启用中断 LD SM0.0 //RUN模式下,=模式下,=1 1MOVW AIW2, VW100 //模拟量输入映模拟量输入映 //像寄存器像寄存器AIW2AIW2的值装入的值装入VW100VW100定时中断采集模拟量程序例 AN Q0.2 //在初始状态下起动,置在初始状态下起动,置,,1 1 //S0.1=1LSCR S0.1 //S0.1=1,激活第一,激活第一SCRSCR程序段,程序段, //进入第一步序进入第一步序,,1 1 //红灯亮,并保持红灯亮,并保持TON T37,,+20+20 //启动启动2s2s定时器定时器LD T37 //2s后程序转移到第二后程序转移到第二SCRSCR段,段,SCRT S0.2 //((S0.2=1S0.2=1,,S0.1=0S0.1=0))SCRE // 第一第一SCRSCR段结束段结束LSCR S0.2 //S0.2=1,激活第二,激活第二SCRSCR程序段,程序段, //进入第二步序进入第二步序S Q1.1 //绿灯亮,并保持绿灯亮,并保持TON T38,,+30+30 //启动启动3s3s定时器定时器 LD T38 //3s后程序转移到第三后程序转移到第三SCRSCR段,段,SCRT S0.3 //((S0.3=1S0.3=1,,S0.2=0S0.2=0))SCRE //第二第二SCRSCR段结束段结束LSCR S0.3 //S0.3=1,激活第三,激活第三SCRSCR程序段,程序段, //进入第三步序进入第三步序,,1 1 //黄灯亮,并保持黄灯亮,并保持TON T39,,+1800+1800 //启动启动3min3min定时器定时器LD T39 //3min后程序转移到第四后程序转移到第四SCRSCR段,段,SCRT S0.4 //((S0.4=1S0.4=1,,S0.3=0S0.3=0))SCRE //第三第三SCRSCR段结束段结束LSCR S0.4 //S0.4=1,激活第四,激活第四SCRSCR程序段,程序段, //进入第四步序进入第四步序,,4 4,,3 3 //红、绿、黄灯全灭红、绿、黄灯全灭SCRE //第四第四SCRSCR段结束段结束 SCR指令编程 。












