第六章S7-200PLC功能指令二课件.ppt
第六章第六章S7-200PLCS7-200PLC功能指令功能指令主讲:李宏伟主讲:李宏伟4 4:子程序及应用子程序及应用5 5:中断程序及应用中断程序及应用6 6:高速计数器功能及应用高速计数器功能及应用7 7:高速脉冲输出功能及应用高速脉冲输出功能及应用第四节第四节 子程序及应用子程序及应用一、子程序简介一、子程序简介 子程序可以对程序子程序可以对程序 进行分块,使用子程序将进行分块,使用子程序将程序分成容易管理的小块,使程序结构简单清晰,程序分成容易管理的小块,使程序结构简单清晰,易于查错和维护。易于查错和维护。子程序常用于需要多次反复执行相同任务的子程序常用于需要多次反复执行相同任务的地方,只需要写一次子程序,别的程序在需要的时地方,只需要写一次子程序,别的程序在需要的时候调用它,而无需重写该程序。候调用它,而无需重写该程序。子程序的调用是有条件的,未调用它时不会子程序的调用是有条件的,未调用它时不会执行子程序中的指令,因此使用子程序可以减少执行子程序中的指令,因此使用子程序可以减少扫描时间。扫描时间。S7-200 CPU的控制程序由主程序、子程序和的控制程序由主程序、子程序和中断程序组成。中断程序组成。STEP7-Micro/WIN在程序编辑器在程序编辑器窗口里为每个窗口里为每个POU(程序组织单元)提供一个独(程序组织单元)提供一个独立的页。主程序总是第立的页。主程序总是第1页,后面是子程序和中断页,后面是子程序和中断程序。程序。各个程序在编辑器窗口里被分开,编译时在各个程序在编辑器窗口里被分开,编译时在程序结束的地方自动加上无条件结束程序结束的地方自动加上无条件结束/返回指令,返回指令,用户程序可使用有条件结束用户程序可使用有条件结束/返回指令。返回指令。二、局部变量表二、局部变量表1、局部变量与全局变量局部变量与全局变量 在在SIMATIC符符号号表表或或IEC的的全全局局变变量量表表中中定定义义的的变变量量为为全全局局变变量量。程程序序中中的的每每个个POU(Program Organizational Unit,程程序序组组织织单单元元)均均有有自自己己的的由由64B L存存储储器器组组成成的的局局部部变变量量表表。它它们们用用来来定定义义有有范范围围限限制制的的变变量量,局局部部变变量量只只在在它它被被创创建建的的POU中中有有效效。与与之之相相反反,全全局局符符号号在在各各POU中中均均有有效效,只只能能在在符符号号表表/全全局局变变量量表表中中定定义义。全全局局符符号号与与局局部部变变量量名名称称相相同同时时,在在定定义义局局部部变变量量的的POU中中,该该局局部部变变量量的的定定义义优优先,该全局定义则在其它先,该全局定义则在其它POU中使用。中使用。局部变量优点:局部变量优点:在在子子程程序序中中只只用用局局部部变变量量,不不用用绝绝对对地地址址或或全全局符号,子程序可以移植到别的项目去。局符号,子程序可以移植到别的项目去。如如果果使使用用临临时时变变量量(TEMP),同同一一片片物物理理存存储器可以在不同的程序中重复使用。储器可以在不同的程序中重复使用。局局部部变变量量还还用用来来在在子子程程序序和和调调用用它它的的程程序序之之间间传传递输入参数和输出参数。递输入参数和输出参数。2、局部变量的类型局部变量的类型 局部变量表中的变量类型区定义的变量有:局部变量表中的变量类型区定义的变量有:IN:传传入入子子程程序序参参数数,由由调调用用它它的的POU提提供供的的输入参数。输入参数。OUT:传传出出子子程程序序参参数数,将将从从子子程程序序来来的的结结果果值返回到指定参数的位置。值返回到指定参数的位置。IN/OUT:传入:传入/传出子程序参数。传出子程序参数。TEMP:暂暂时时变变量量,只只能能在在子子程程序序内内部部暂暂时时存存储储数据。不能用来传递参数。数据。不能用来传递参数。注意:注意:只只有有在在执执行行该该POU时时,定定义义的的临临时时变变量量才才被被使使用用,POU执执行行完完后后,不不再再使使用用临临时时变变量量的的数数值值。在在主主程序或中断程序中,局部变量表只包含程序或中断程序中,局部变量表只包含TEMP变量。变量。3、局部变量的赋值局部变量的赋值 在在局局部部变变量量表表中中赋赋值值时时,只只需需指指定定局局部部变变量量的的类类型型(TEMP、IN、IN_OUT或或OUT)和和数数据据类类型型,不不用用指指定定存存储储器器地地址址,程程序序编编辑辑器器按按照照子子程程序序指指令令的的调调用用顺顺序序,将将参参数数值值分分配配给给局局部部变变量量存存储储器器,起起始始地地址址是是L0.0;8个个连连续续位位的的参参数数值值分分配配一一个个字字节节,从从LX.0到到LX.7。4、在、在局部变量表中增加新的变量局部变量表中增加新的变量 对对于于主主程程序序与与中中断断程程序序,局局部部变变量量表表显显示示一一组组已已被被预预先先定定义义为为TEMP变变量量的的行行。要要在在表表中中增增加加行行,只只需需用用右右键键单单击击表表中中的的某某一一行行,在在弹弹出出的的菜菜单单中中执执行行“插插入入”“行行”命命令令,在在所所选选行行的的上上部部插插入入新新的的行行。执执行行菜菜单单命命令令“插插入入”“下下一一行行”在在所所选行的下部插入新的行。选行的下部插入新的行。对对于于子子程程序序,局局部部变变量量表表显显示示数数据据类类型型被被预预先先定定义义为为IN、IN_OUT、OUT和和TEMP的的一一系系列列行行,不不能能改改变变它它们们的的顺顺序序。如如果果要要增增加加新新的的局局部部变变量量,必必须须用用鼠鼠标标右右键键单单击击已已有有的的行行,并并用用弹弹出出菜菜单单在在所所击行的上面或下面插入相同类型的另一局部变量。击行的上面或下面插入相同类型的另一局部变量。5、局部变量数据类型检查局部变量数据类型检查 局局部部变变量量作作为为参参数数向向子子程程序序传传递递时时,在在该该子子程程序序的的局局部部变变量量表表中中指指定定的的数数据据类类型型必必须须与与调调用用它它的的POU中的数据类型值匹配。中的数据类型值匹配。例例如如:在在主主程程序序OB1中中调调用用子子程程序序SBR0,使使用用名名为为INPUT1的的全全局局符符号号作作为为子子程程序序的的输输入入参参数数。在在SBR0的的局局部部变变量量表表中中,已已经经定定义义了了一一个个名名为为FIRST的的局局部部变变量量作作为为该该输输入入参参数数。当当OB1调调用用SBR0时时,INPUT1的的数数值值被被传传入入FIRST,INPUT1和和FIRST的数据类型必须完全匹配。的数据类型必须完全匹配。三、建立子程序三、建立子程序在在“编辑编辑”菜单中执行命令菜单中执行命令“插入插入”“子程序子程序”;在在程程序序编编辑辑器器视视窗窗中中点点击击鼠鼠标标右右键键,从从弹弹出出的的菜菜单单中中执行命令执行命令“插入插入”“子程序子程序”;新新建建的的子子程程序序,默默认认的的程程序序名名是是SBR_n,编编号号n从从0(063)开开始始按按递递增增顺顺序序生生成成。用用鼠鼠标标右右键键点点击击指指令令树树中中的的子子程程序序的的图图标标,在在弹弹出出的的菜菜单单中中选选择择“重重新新命命名名”,可可以以修修改改它它们们的的名名称称。注注意意:CPU226的项目中最多可以创建的项目中最多可以创建128个子程序个子程序。四、子程序的调用(四、子程序的调用(CALLCALL指令)指令)可可以以带带参参数数或或不不带带参参数数调调用用子子程程序序。每每个个子子程程序序必必须须以以无无条条件件返返回回(RET)指指令令作作结结束束,STEP7-Micio/WIN编编程程软软件件为为每每个个子子程程序序自自动动加加入入无无条条件件返返回回(RET)指指令令。有有条条件件子子程程序序返返回回(CRET)指指令令,在在控控制制条条件件有有效效时时,终终止止子子程程序序(n)。子子程程序序执执行行完完毕毕,控控制制程程序序回回到到主主程程序序中中子程序调用(子程序调用(CALL)指令的下一条指令。)指令的下一条指令。主程序可以用子程序调用(主程序可以用子程序调用(CALL)指令来)指令来调用一个子程序。子程序调用(调用一个子程序。子程序调用(CALL)指令把)指令把程序控制权交给子程序(程序控制权交给子程序(n)。子程序结束后,)。子程序结束后,必须返回主程序。必须返回主程序。子程序被调用时,系统会保存当前的逻辑堆栈。子程序被调用时,系统会保存当前的逻辑堆栈。保存后再置栈顶值为保存后再置栈顶值为1,堆栈的其他值为零,把控制,堆栈的其他值为零,把控制权交给被调用的子程序。子程序执行完毕,通过返权交给被调用的子程序。子程序执行完毕,通过返回指令自动恢复逻辑堆栈原调用点的值,把控制权回指令自动恢复逻辑堆栈原调用点的值,把控制权交还给调用程序。交还给调用程序。因因为为累累加加器器可可在在调调用用程程序序和和被被调调用用程程序序之之间间自自由由传传递递数数据据,所所以以累累加加器器的的值值在在子子程程序序调调用用开开始始时时不不需要另外保存,在子程序调用结束时也不用恢复。需要另外保存,在子程序调用结束时也不用恢复。说明:说明:在中断程序、子程序中也可调用子程序;主程序在中断程序、子程序中也可调用子程序;主程序中可以嵌套调用子程序,嵌套深度为中可以嵌套调用子程序,嵌套深度为8层。中断程层。中断程序中,不能嵌套调用子程序。序中,不能嵌套调用子程序。五、带参数子程序的调用五、带参数子程序的调用1、子程序参数、子程序参数 由不超过由不超过23个字符的字母和数字组成,但第一个字符的字母和数字组成,但第一个字符必须是字母。个字符必须是字母。2、变量名、变量名 在子程序带参数调用时可以使用在子程序带参数调用时可以使用4种变量类型。种变量类型。3、变量类型、变量类型ININ类型(传入子程序)类型(传入子程序)IN/OUTIN/OUT类型(传入传出子程序)类型(传入传出子程序)OUTOUT类型(传出子程序)类型(传出子程序)TEMPTEMP类型(暂时型)类型(暂时型)子程序在带参数调用时,最多可以带子程序在带参数调用时,最多可以带16个参数,个参数,每个参数包含变量名、变量类型和数据类型。这些每个参数包含变量名、变量类型和数据类型。这些参数在子程序的局部变量表中进行定义。参数在子程序的局部变量表中进行定义。4、使用局部变量表、使用局部变量表 当给子程序传递数据时,这些参数被存放在子当给子程序传递数据时,这些参数被存放在子程序的局部变量存储器中,当调用子程序时,输入程序的局部变量存储器中,当调用子程序时,输入参数被拷贝到子程序的局部变量存储器中,当子程参数被拷贝到子程序的局部变量存储器中,当子程序完成时,从局部变量存储器拷贝输出参数到指定序完成时,从局部变量存储器拷贝输出参数到指定的输出参数地址。的输出参数地址。局部变量表使用局部变量存储器局部变量表使用局部变量存储器L L,CPUCPU在执行在执行子程序时,自动分配给每个子程序子程序时,自动分配给每个子程序6464个局部变量存个局部变量存储器单元,在进行子程序参数调用时,将调用参数储器单元,在进行子程序参数调用时,将调用参数按照变量类型按照变量类型ININ,IN/OUTIN/OUT,0UT0UT和和TEMPTEMP的顺序依次的顺序依次存入局部变量表中。存入局部变量表中。5、将参数值指定给子程序中的局部内存时应、将参数值指定给子程序中的局部内存时应遵守下列规则:遵守下列规则:字节、字和双字数值被指定给局部内存,位于字节、字和双字数值被指定给局部内存,位于字节边界(字节边界(LBx、LWx或或LDx)位置。在带参数的)位置。在带参数的“调用子程序调用子程序”指令中,参数必须与子程序局部变量表指令中,参数必须与子程序局部变量表中定义的变量完全匹配。参数顺序必须以输入参数开中定义的变量完全匹配。参数顺序必须以输入参数开始,其次是输入输出参数,然后是输出参数。始,其次是输入输出参数,然后是输出参数。一至八个连续位参数值被指定给从一至八个连续位参数值被指定给从Lx.0开始开始持续至持续至Lx.7的单字节。的单字节。参数值指定给局部内存的顺序由参数值指定给局部内存的顺序由CALL指定,指定,参数从参数从L0.0开始。开始。例:带参数的子程序调用如下所示。例:带参数的子程序调用如下所示。注释:注释:Micro/WIN保留保留L内存的最上方的内存的最上方的4个字节个字节(LB60-LB63),用于调用参数数据。),用于调用参数数据。/L内存被用于保存布尔输入参数状态,内存被用于保存布尔输入参数状态,/此类参数在此类参数在LAD和和FBD中被显示为使能位输入。中被显示为使能位输入。/从而允许本网络在从而允许本网络在LAD、FBD和和STL编辑器中显示。编辑器中显示。名为名为“模拟量计算模拟量计算”的子程序如下图所示,在该子的子程序如下图所示,在该子程序的局部变量表中,定义了名为程序的局部变量表中,定义了名为“转换值转换值”、“系数系数1 1”和和“系数系数”的输入(的输入(ININ)变量,名为)变量,名为“模拟值模拟值”的的输出(输出(OUTOUT)变量,和名为)变量,和名为“暂存暂存”的临时(的临时(TEMPTEMP)变量。)变量。局部变量表最左边的一列是每个参数在局部存储器(局部变量表最左边的一列是每个参数在局部存储器(L L)中的地址。中的地址。#表示局部变量,软件自动添加表示局部变量,软件自动添加。如果用语句表编程,子程序调用指令的格式为:如果用语句表编程,子程序调用指令的格式为:CALL 子程序号,参数子程序号,参数1,参数,参数2,参数参数n,n=116。上梯形图对应的语句表程序为:上梯形图对应的语句表程序为:LD I0.1CALL 模拟量计算,模拟量计算,AIW2,VW20,+2356,VD40六、子程序中定时器的使用六、子程序中定时器的使用 调用子程序时,子程序中的定时器正常计时;调用子程序时,子程序中的定时器正常计时;停止调用子程序时,线圈在子程序内的位元件的停止调用子程序时,线圈在子程序内的位元件的ON/OFF状态保持不变。如果在停止调用时子程序状态保持不变。如果在停止调用时子程序中的定时器正在定时,中的定时器正在定时,100ms定时器将停止定时,定时器将停止定时,当前值保持不变,重新调用时继续定时;但当前值保持不变,重新调用时继续定时;但1ms和和10ms定时器将继续定时,定时时间到时,它们的定时器将继续定时,定时时间到时,它们的定时器位变为定时器位变为1状态,且可以在子程序之外起作用。状态,且可以在子程序之外起作用。七、子程序应用举例七、子程序应用举例例例1:用两个子程序分别控制两台电动机的启停,:用两个子程序分别控制两台电动机的启停,主程序中调用子程序实现控制。主程序中调用子程序实现控制。OB1SBR0SBR1方案一:无参数传递方案一:无参数传递OB1方案二:带参数传递方案二:带参数传递LD I0.0=L60.0LD I0.1=L63.7LD I0.2=L63.6LD L60.0CALL SBR_0:SBR0,L63.7,L63.6,Q0.0LD I1.0=L60.0LD I1.1=L63.7LD I1.2=L63.6LD L60.0CALL SBR_0:SBR0,L63.7,L63.6,Q1.0SBR0方案二:带参数传递方案二:带参数传递LD#启动启动:L0.0O#电机电机:L0.2AN#停止停止:L0.1=#电机电机:L0.2例例2:设计一记录设备运行时间的子程序,符号名:设计一记录设备运行时间的子程序,符号名为为“运行时间运行时间”。设备运行时。设备运行时I0.0为为ON,用,用I0.0的的常开触点调用子程序。常开触点调用子程序。OB1SBR0第五节第五节 中断程序及应用中断程序及应用一、中断程序简介一、中断程序简介 中断程序可以为中断程序可以为PLC内部或外部的特殊事件内部或外部的特殊事件提供快速反应,在提供快速反应,在PLC控制系统中,对于不定期产控制系统中,对于不定期产生的继续处理事件,常通过采用中断处理技术来完生的继续处理事件,常通过采用中断处理技术来完成。成。中断程序不是由程序调用,而是在中断事件中断程序不是由程序调用,而是在中断事件发生时由系统调用。发生时由系统调用。当当CPU响应中断请求后,会暂时停止当前正响应中断请求后,会暂时停止当前正在执行的程序,进行现场保护,然后转到相应的在执行的程序,进行现场保护,然后转到相应的中断服务程序中去处理。中断服务程序中去处理。一旦中断程序处理结束,立即恢复现场,将一旦中断程序处理结束,立即恢复现场,将保存起来的现场数据和状态重新装入,返回到源程保存起来的现场数据和状态重新装入,返回到源程序继续执行。序继续执行。在在S7-200中,中断服务程序的调用和处理由中,中断服务程序的调用和处理由中断指令来完成。一般中断程序都较为短小和简明中断指令来完成。一般中断程序都较为短小和简明扼要,这样可以加快中断程序执行的速度,使其他扼要,这样可以加快中断程序执行的速度,使其他程序不会受到长时间的延误。程序不会受到长时间的延误。二、中断源及中断事件二、中断源及中断事件1、中断源及种类、中断源及种类 中断源中断源,即中断事件发出中断请求的来源。,即中断事件发出中断请求的来源。S7-200PLC具有最多可达具有最多可达34个中断源,每个中断源都分个中断源,每个中断源都分配一个编号用以识别,称为配一个编号用以识别,称为中断事件号中断事件号。这些中断源。这些中断源大致分为三大类:大致分为三大类:通信中断通信中断、输入输出中断输入输出中断和和时基中时基中断断。S7-200中,过程中断分为通信中断和输入输出中,过程中断分为通信中断和输入输出中断。通信中断包括通信口中断。通信中断包括通信口0和通信口和通信口1产生的中断;产生的中断;输入输出中断包括外部输入中断、高速计数器中断输入输出中断包括外部输入中断、高速计数器中断和高速脉冲串输出中断。和高速脉冲串输出中断。1)通信中断:是指)通信中断:是指S7-200的串行通信口可以通过梯的串行通信口可以通过梯形图或语句表编程的方法来设置波特率、奇偶校验形图或语句表编程的方法来设置波特率、奇偶校验和通信协议等参数,对通信口的这种操作方式,又和通信协议等参数,对通信口的这种操作方式,又称为自由口通信。利用接收和发送中断可简化程序称为自由口通信。利用接收和发送中断可简化程序对通信的控制。对通信的控制。2)外部输入中断:来自过程中断的信息可通过)外部输入中断:来自过程中断的信息可通过I0.0,I0.1,I0.2,I0.3的上升沿或下降沿输入到的上升沿或下降沿输入到PLC中中。3)高速计数器中断:应用高速计数器场合,当其当)高速计数器中断:应用高速计数器场合,当其当前值等于设定值时,或当计数方向发生改变时,或当前值等于设定值时,或当计数方向发生改变时,或当其外部复位时,都可能使其向其外部复位时,都可能使其向CPU提出中断请求。提出中断请求。S7-200中,时基中断分为定时中断和定时器中断。中,时基中断分为定时中断和定时器中断。4)高速脉冲串输出中断:当)高速脉冲串输出中断:当PLC完成输出给定数量完成输出给定数量的高速脉冲串时,可引起中断。的高速脉冲串时,可引起中断。1)定时中断:定时中断响应周期性的事件,周期时)定时中断:定时中断响应周期性的事件,周期时间以间以1ms为计量单位,最小周期为为计量单位,最小周期为5ms,最大周期,最大周期为为255ms。定时中断有两种类型:定时中断定时中断有两种类型:定时中断0和定时中断和定时中断1。对于定时中断对于定时中断0,把周期时间写入特殊继电器,把周期时间写入特殊继电器SMB34;对于定时中断;对于定时中断1,把周期时间写入特殊继,把周期时间写入特殊继电器电器SMB35。利用定时中断可以设定采样周期,实。利用定时中断可以设定采样周期,实现对模拟量的数据采样。现对模拟量的数据采样。2)定时器中断:定时器中断是利用指定的定时器设)定时器中断:定时器中断是利用指定的定时器设定的时间产生中断。在定的时间产生中断。在S7-200中,指定的定时器为中,指定的定时器为1ms的通电延时定时器的通电延时定时器T32和断电延时定时器和断电延时定时器T96。S7-200的的CPU中可响应最多中可响应最多34个中断事件,见下表。个中断事件,见下表。事件事件号号中断事件描述中断事件描述优先优先级别级别CPU221CPU222CPU224CPU2260I0.0上升边沿中断上升边沿中断2 2Y YY YY YY Y1I0.0下降边沿中断下降边沿中断6 6Y YY YY YY Y2I0.1上升边沿中断上升边沿中断3 3Y YY YY YY Y3I0.1下降边沿中断下降边沿中断7 7Y YY YY YY Y事件事件号号中断事件描述中断事件描述优先优先级别级别CPU221CPU222CPU224CPU2264I0.2上升边沿中断上升边沿中断4 4Y YY YY YY Y5I0.2下降边沿中断下降边沿中断8 8Y YY YY YY Y6I0.3上升边沿中断上升边沿中断6 6Y YY YY YY Y7I0.3下降边沿中断下降边沿中断9 9Y YY YY YY Y8端口端口 0:接收字符:接收字符0 0Y YY YY YY Y9端口端口0:传输完成:传输完成0 0Y YY YY YY Y10定时中断定时中断00 0Y YY YY YY Y11定时中断定时中断11 1Y YY YY YY Y12HSC0,CV=PV1010Y YY YY YY Y事件事件号号中断事件描述中断事件描述优先优先级别级别CPU221CPU222CPU224CPU22613HSC1,CV=PV1313Y YY Y14HSC1方向改变方向改变1414Y YY Y15HSC1外部复原外部复原1515Y YY Y16HSC2,CV=PV1616Y YY Y17HSC2方向改变方向改变1717Y YY Y18HSC2外部复原外部复原1818Y YY Y19PTO 0完成中断完成中断0 0Y YY YY YY Y20PTO 1完成中断完成中断1 1Y YY YY YY Y21定时器定时器T32,CT=PT中断中断2 2Y YY YY YY Y事件事件号号中断事件描述中断事件描述优先优先级别级别CPU221CPU222CPU224CPU22622定时器定时器T96,CT=PT中断中断2 2Y YY YY YY Y23端口端口0:接收信息完成:接收信息完成0 0Y YY YY YY Y24端口端口1:接收信息完成:接收信息完成1 1Y Y25端口端口1:接收字符:接收字符1 1Y Y26端口端口1:传输完成:传输完成1 1Y Y27HSC0方向改变方向改变1111Y YY YY YY Y28HSC0外部复原外部复原1212Y YY YY YY Y29HSC4,CV=PV2020Y YY YY YY Y30HSC4方向改变方向改变2121Y YY YY YY Y2、中断优先级、中断优先级 中中断断优优先先级级由由高高到到低低依依次次是是:通通信信中中断断、输输入入输输出出中中断断、时时基基中中断断。每每种种中中断断中中的的不不同同中中断断事事件件又有不同的优先权。又有不同的优先权。主机中的所有中断事件及优先级参照上表所示。主机中的所有中断事件及优先级参照上表所示。事件事件号号中断事件描述中断事件描述优先优先级别级别CPU221CPU222CPU224CPU22631HSC4外部复原外部复原2222Y YY YY YY Y32HSC3,CV=PV1919Y YY YY YY Y33HSC5,CV=PV2323Y YY YY YY Y 在在PLC中,中,CPU一般在指定的优先级内按照先一般在指定的优先级内按照先来先服务的原则响应中断事件的中断请求,在任何时来先服务的原则响应中断事件的中断请求,在任何时刻,刻,CPU只执行一个中断程序。当只执行一个中断程序。当CPU按照中断优按照中断优先级响应并执行一个中断程序时,就不会响应其他中先级响应并执行一个中断程序时,就不会响应其他中断事件的中断请求(尽管此时可能会有更高级别的中断事件的中断请求(尽管此时可能会有更高级别的中断事件发出中断请求),直到将当前的中断程序执行断事件发出中断请求),直到将当前的中断程序执行结束。在结束。在CPU执行中断程序期间,对新出现的中断事执行中断程序期间,对新出现的中断事件仍然按照中断性质和优先级的顺序分别进行排队,件仍然按照中断性质和优先级的顺序分别进行排队,形成中断队列。形成中断队列。CPU22x系列的中断队列的长度如下系列的中断队列的长度如下表所示。如果超过规定的中断队列长度,则产生溢出,表所示。如果超过规定的中断队列长度,则产生溢出,使特殊继电器置位。使特殊继电器置位。中断队列中断队列CPU221CPU222CPU224CPU226溢出位溢出位通信中断通信中断4个个4个个4个个8个个SM4.0I/O中断中断16个个16个个16个个16个个SM4.1时基中断时基中断8个个8个个8个个8个个SM4.2表中断队列的长度及溢出位表中断队列的长度及溢出位CPU型号型号CPU221CPU222CPU224CPU226可连接中断事件数可连接中断事件数253134可连接中断事件号可连接中断事件号012,1923,2733023,2733033表中断数量及事件表中断数量及事件三、中断程序的相关指令三、中断程序的相关指令 中断允许(中断允许(ENI)指令,全局地开放所有被连接)指令,全局地开放所有被连接的中断事件,允许的中断事件,允许CPU接收所有中断事件。接收所有中断事件。1、中断允许指令中断允许指令ENI和中断禁止指令和中断禁止指令DISI 中断禁止(中断禁止(DISI)指令,全局地关闭所有被连)指令,全局地关闭所有被连接的中断事件,禁止接的中断事件,禁止CPU接收各个中断事件的中断接收各个中断事件的中断请求。请求。执行执行DISI指令后,出现的中断事件就进入中断指令后,出现的中断事件就进入中断队伍排队等候,直到队伍排队等候,直到ENI指令重新允许中断。指令重新允许中断。CPU进入进入RUN模式时,系统自动禁止了中断。模式时,系统自动禁止了中断。在在RUN模式执行模式执行ENI指令后,开放所有中断。指令后,开放所有中断。中断允许指令中断允许指令ENI、中断禁止指令、中断禁止指令DISI以线圈以线圈的形式编程,无操作数。的形式编程,无操作数。2、中断连接指令(中断连接指令(ATCH)中断连接(中断连接(ATCH)指令,用来建立某个中断事)指令,用来建立某个中断事件(件(EVNT)和某个中断程序()和某个中断程序(INT)之间的联系。)之间的联系。并允许这个中断事件。并允许这个中断事件。在调用一个中断程序前,必须用中断连接指令,在调用一个中断程序前,必须用中断连接指令,建立某中断事件与中断程序的连接,当把某个中断事建立某中断事件与中断程序的连接,当把某个中断事件和中断程序建立连接后,该中断事件发生时会自动件和中断程序建立连接后,该中断事件发生时会自动 执行中断。执行中断。多个中断事件可调用同一个中断程序,但多个中断事件可调用同一个中断程序,但一个中断事件不能同时与多个中断程序建立连接,否一个中断事件不能同时与多个中断程序建立连接,否则,在中断允许且某个中断事件发生时,系统默认执则,在中断允许且某个中断事件发生时,系统默认执行与该事件建立连接的最后一个中断程序。行与该事件建立连接的最后一个中断程序。3、中断分离指令(中断分离指令(DTCH)中断分离(中断分离(DTCH)指令,用来解除某个中断事)指令,用来解除某个中断事件(件(EVNT)和某个中断程序之间的联系,并禁止该)和某个中断程序之间的联系,并禁止该中断事件。指令操作数中断事件。指令操作数EVNT的数据类型均为的数据类型均为BYTE。可以用可以用DTCH指令截断中断事件和中断程序之间指令截断中断事件和中断程序之间的联系,以单独禁止某中断事件。的联系,以单独禁止某中断事件。DTCH指令使中断指令使中断回到不激活或无效状态。回到不激活或无效状态。4、中断中断返回返回指令(指令(RETI)、(、(CRETI)中断返回指令的功能是,当中断结束时,通过中断返回指令的功能是,当中断结束时,通过中断返回指令退出中断服务程序,返回到主程序。中断返回指令退出中断服务程序,返回到主程序。RETI是无条件返回指令,是无条件返回指令,CRETI是有条件返回指令。是有条件返回指令。指令使用举例:指令使用举例:程程序序实实现现的的功功能能是是调调用用I0.1输输入入点点的的上上升升沿沿中中断断,若若发发现现I/O错错误误,则则禁禁止止本本中中断断,用用外外部部条条件件可可以以禁禁止全局中断。止全局中断。四、中断应用举例四、中断应用举例例例1:利用定时中断指令实现对模拟量的等间隔采样:利用定时中断指令实现对模拟量的等间隔采样OB1:LD SM0.1CALL SBR_0:SBR0SBR0:LD SM0.0MOVB 100,SMB34ATCH INT_0:INT0,10ENIINT0:LD SM0.0MOVW AIW4,VW100例例2:在:在I0.0的上升沿通过中断使的上升沿通过中断使Q0.0立即置位;在立即置位;在I0.1的下降沿通过中断使的下降沿通过中断使Q0.0立即复位。立即复位。/主程序主程序OB1LD SM0.1 /第一次扫描时第一次扫描时ATCH INT_0,0 /I0.0上升沿执行上升沿执行0号中断程序号中断程序ATCH INT_1,3 /I0.1下降沿执行下降沿执行1号中断程序号中断程序ENI /允许全局中断允许全局中断/中断程序中断程序0(INT_0)LD SM0.0 /常常ONSI Q0.0,1 /使使Q0.0立即置位立即置位/中断程序中断程序1(INT_1)LD SM0.0RI Q0.0,1 /使使Q0.0立即复位立即复位例例3:定时中断的定时时间最长为:定时中断的定时时间最长为255ms,如何用定,如何用定时中断时中断1实现周期为实现周期为2s的高精度定时?的高精度定时?/主程序主程序OB1LD SM0.1 /第一次扫描时第一次扫描时MOVB 0,VB10 /中断次数计数器清零中断次数计数器清零MOVB 250,SMB34 /设定中断设定中断0时间间隔为时间间隔为250msATCH INT_0,10 /指定定时中断指定定时中断0执行执行0号中断程序号中断程序ENI /允许全局中断允许全局中断/中断程序中断程序0(INT_0),每隔),每隔250ms中断一次中断一次LD SM0.0 /常常ONINCB VB10 /中断次数计数器加中断次数计数器加1LDB=8,VB10 /比较,如果中断比较,如果中断8次(次(2s)MOVB 0,VB10 /中断次数计数器清零中断次数计数器清零INCB QB0 /每每2s将将QB0加加1例例4:出现事故时,:出现事故时,I0.0的上升沿产生中断,使输的上升沿产生中断,使输出出Q1.0立即置位,同时将事故发生的日期和时间立即置位,同时将事故发生的日期和时间保存在保存在VB10VB17中。中。/主程序主程序OB1LD SM0.1 /第一次扫描第一次扫描ATCH 0,0 /指定在指定在I0.0上升沿上升沿 /执行中断程序执行中断程序0ENI /开中断开中断/中断程序中断程序INT0LD SM0.0SI Q1.0,1 /使使Q1.0立即置位立即置位TODR VB10 /读实时时钟读实时时钟例例5:使用定时中断的彩灯控制程序,控制:使用定时中断的彩灯控制程序,控制8个彩个彩灯循环左移。灯循环左移。定时中断定时中断0的中断号为的中断号为10,SMB34中的定时时中的定时时间为间为1255ms。彩灯移位的延时时间一般大于。彩灯移位的延时时间一般大于255ms,将中断的时间间隔设为,将中断的时间间隔设为250ms,用,用VB0做做中断次数计数器,在中断服务程序中将中断次数计数器,在中断服务程序中将VB0加加1,然,然后用比较触点指令判断后用比较触点指令判断VB0是否等于设置的次数是否等于设置的次数N。若相等则将若相等则将QB0循环左移一位,同时循环左移一位,同时VB0清零。移清零。移位时间间隔为位时间间隔为0.25N(s)。)。主程序主程序OB1LD SM0.1CALL SBR_0:SBR0子程序子程序SBR0LD SM0.0MOVB 16#07,QB0MOVB 0,VB0MOVB 250,SMB34ATCH INT_0:INT0,10ENI中断程序中断程序INT0LD SM0.0INCB VB0LDB=VB0,4RLB QB0,1MOVB 0,VB0例例6:使用:使用T32中断的彩灯控制程序,控制中断的彩灯控制程序,控制8个彩个彩灯循环左移。灯循环左移。1ms定时器定时器T32和和T96的定时时间到时可以产生的定时时间到时可以产生中断,中断号分别为中断,中断号分别为21和和22,最长定时时间为,最长定时时间为32.767s。对于分辨率为。对于分辨率为1ms和和10ms的定时器,不的定时器,不能使用定时器本身触点作为自复位控制,应使用下能使用定时器本身触点作为自复位控制,应使用下面主程序方法。面主程序方法。主程序主程序OB1LD SM0.1CALL SBR_0:SBR0LDN M0.0TON T32,+500LD T32=M0.0子程序子程序SBR0LD SM0.0MOVB 7,QB0ATCH INT_0:INT0,21ENI中断程序中断程序INT0LD SM0.0RLB QB0,1总总 结结(1)中断程序构成)中断程序构成 中断程序必须由三部分构成:中断程序标号、中断程序必须由三部分构成:中断程序标号、中断程序指令和无条件返回指令。中断程序指令和无条件返回指令。(2)编程要求)编程要求用中断程序的标号来区别每个中断程序。用中断程序的标号来区别每个中断程序。中断服务程序越短越好,以减少中断程序执行时间。中断服务程序越短越好,以减少中断程序执行时间。在中断程序中不能使用在中断程序中不能使用ENIENI、DISIDISI、HDEFHDEF、LSCRLSCR、ENDEND指令。指令。中断服务程序的最后一条指令一定是中断服务程序的最后一条指令一定是RETIRETI或或CRETICRETI(其中(其中RETIRETI指令会由编程软件自动添加)。指令会由编程软件自动添加)。第六节第六节 高速计数器功能及应用高速计数器功能及应用一、高速计数器概述一、高速计数器概述 PLC的普通计数器的计数过程与扫描工作方式的普通计数器的计数过程与扫描工作方式有关,有关,CPU通过每一个扫描周期读取一次被测信号通过每一个扫描周期读取一次被测信号的方法来捕捉被测信号的上升沿,被测信号的频率的方法来捕捉被测信号的上升沿,被测信号的频率较高时,会丢失计数脉冲,因此普通计数器的工作较高时,会丢失计数脉冲,因此普通计数器的工作频率很低,一般仅有几十赫兹。高速计数器可以对频率很低,一般仅有几十赫兹。高速计数器可以对普通计数器无能为力的事件进行计数,普通计数器无能为力的事件进行计数,S7-200有有6个高速计数器个高速计数器HSC0HSC5,可以设置多达,可以设置多达12中不中不同的操作模式。同的操作模式。1、高速计数器的数量及编号、高速计数器的数量及编号 高速计数器在程序中使用时的地址编号用高速计数器在程序中使用时的地址编号用HSCn来表示,来表示,HSC表编程元件名称为高速计数器,表编程元件名称为高速计数器,n(n=05)为编号。为编号。每个高速计数器的计数结果都对应有一个当前值寄存器。每个高速计数器的计数结果都对应有一个当前值寄存器。编程时可通过地址编程时可通过地址HCx(x=05)来读取高速计数器的当前值。)来读取高速计数器的当前值。不同型号的不同型号的PLC主机,高速计数器的数量对应如下表所示。主机,高速计数器的数量对应如下