《第六章S7 200PLC功能指令二课件.ppt》由会员分享,可在线阅读,更多相关《第六章S7 200PLC功能指令二课件.ppt(160页珍藏版)》请在三一办公上搜索。
1、第六章S7-200PLC功能指令,主讲:李宏伟,4:子程序及应用,5:中断程序及应用,6:高速计数器功能及应用,7:高速脉冲输出功能及应用,第四节 子程序及应用,一、子程序简介,子程序可以对程序 进行分块,使用子程序将程序分成容易管理的小块,使程序结构简单清晰,易于查错和维护。,子程序常用于需要多次反复执行相同任务的地方,只需要写一次子程序,别的程序在需要的时候调用它,而无需重写该程序。,子程序的调用是有条件的,未调用它时不会执行子程序中的指令,因此使用子程序可以减少扫描时间。,S7-200 CPU的控制程序由主程序、子程序和中断程序组成。STEP7-Micro/WIN在程序编辑器窗口里为每个
2、POU(程序组织单元)提供一个独立的页。主程序总是第1页,后面是子程序和中断程序。,各个程序在编辑器窗口里被分开,编译时在程序结束的地方自动加上无条件结束/返回指令,用户程序可使用有条件结束/返回指令。,二、局部变量表,1、局部变量与全局变量,在SIMATIC符号表或IEC的全局变量表中定义的变量为全局变量。程序中的每个POU(Program Organizational Unit,程序组织单元)均有自己的由64B L存储器组成的局部变量表。它们用来定义有范围限制的变量,局部变量只在它被创建的POU中有效。与之相反,全局符号在各POU中均有效,只能在符号表/全局变量表中定义。全局符号与局部变量
3、名称相同时,在定义局部变量的POU中,该局部变量的定义优先,该全局定义则在其它POU中使用。,局部变量优点:,在子程序中只用局部变量,不用绝对地址或全局符号,子程序可以移植到别的项目去。,如果使用临时变量(TEMP),同一片物理存储器可以在不同的程序中重复使用。,局部变量还用来在子程序和调用它的程序之间传递输入参数和输出参数。,2、局部变量的类型,局部变量表中的变量类型区定义的变量有:,IN:传入子程序参数,由调用它的POU提供的输入参数。,OUT:传出子程序参数,将从子程序来的结果值返回到指定参数的位置。,IN/OUT:传入/传出子程序参数。,TEMP:暂时变量,只能在子程序内部暂时存储数据
4、。不能用来传递参数。,注意:,只有在执行该POU时,定义的临时变量才被使用,POU执行完后,不再使用临时变量的数值。在主程序或中断程序中,局部变量表只包含TEMP变量。,3、局部变量的赋值,在局部变量表中赋值时,只需指定局部变量的类型(TEMP、IN、IN_OUT或OUT)和数据类型,不用指定存储器地址,程序编辑器按照子程序指令的调用顺序,将参数值分配给局部变量存储器,起始地址是L0.0;8个连续位的参数值分配一个字节,从LX.0到LX.7。,4、在局部变量表中增加新的变量,对于主程序与中断程序,局部变量表显示一组已被预先定义为TEMP变量的行。要在表中增加行,只需用右键单击表中的某一行,在弹
5、出的菜单中执行“插入”“行”命令,在所选行的上部插入新的行。执行菜单命令“插入”“下一行” 在所选行的下部插入新的行。 对于子程序,局部变量表显示数据类型被预先定义为IN、IN_OUT、OUT和TEMP的一系列行,不能改变它们的顺序。如果要增加新的局部变量,必须用鼠标右键单击已有的行,并用弹出菜单在所击行的上面或下面插入相同类型的另一局部变量。,5、局部变量数据类型检查,局部变量作为参数向子程序传递时,在该子程序的局部变量表中指定的数据类型必须与调用它的POU中的数据类型值匹配。,例如:在主程序OB1中调用子程序SBR0,使用名为INPUT1的全局符号作为子程序的输入参数。在SBR0的局部变量
6、表中,已经定义了一个名为FIRST的局部变量作为该输入参数。当OB1调用SBR0时,INPUT1的数值被传入FIRST,INPUT1和FIRST的数据类型必须完全匹配。,三、建立子程序,在“编辑”菜单中执行命令“插入”“子程序”;,在程序编辑器视窗中点击鼠标右键,从弹出的菜单中执行命令“插入”“子程序”;,新建的子程序,默认的程序名是SBR_n,编号n从0(063)开始按递增顺序生成。用鼠标右键点击指令树中的子程序的图标,在弹出的菜单中选择“重新命名”,可以修改它们的名称。注意:CPU226的项目中最多可以创建128个子程序。,四、子程序的调用(CALL指令),可以带参数或不带参数调用子程序。
7、每个子程序必须以无条件返回(RET)指令作结束,STEP7-Micio/WIN编程软件为每个子程序自动加入无条件返回(RET)指令。有条件子程序返回(CRET)指令,在控制条件有效时,终止子程序(n)。子程序执行完毕,控制程序回到主程序中子程序调用(CALL)指令的下一条指令。,主程序可以用子程序调用(CALL)指令来调用一个子程序。子程序调用(CALL)指令把程序控制权交给子程序(n)。子程序结束后,必须返回主程序。,子程序被调用时,系统会保存当前的逻辑堆栈。保存后再置栈顶值为1,堆栈的其他值为零,把控制权交给被调用的子程序。子程序执行完毕,通过返回指令自动恢复逻辑堆栈原调用点的值,把控制权
8、交还给调用程序。,因为累加器可在调用程序和被调用程序之间自由传递数据,所以累加器的值在子程序调用开始时不需要另外保存,在子程序调用结束时也不用恢复。,说明:,在中断程序、子程序中也可调用子程序;主程序中可以嵌套调用子程序,嵌套深度为8层。中断程序中,不能嵌套调用子程序。,五、带参数子程序的调用,1、子程序参数,由不超过23个字符的字母和数字组成,但第一个字符必须是字母。,2、变量名,在子程序带参数调用时可以使用4种变量类型。,3、变量类型,IN类型(传入子程序)IN/OUT类型(传入传出子程序)OUT类型(传出子程序)TEMP类型(暂时型),子程序在带参数调用时,最多可以带16个参数,每个参数
9、包含变量名、变量类型和数据类型。这些参数在子程序的局部变量表中进行定义。,4、使用局部变量表,当给子程序传递数据时,这些参数被存放在子程序的局部变量存储器中,当调用子程序时,输入参数被拷贝到子程序的局部变量存储器中,当子程序完成时,从局部变量存储器拷贝输出参数到指定的输出参数地址。,局部变量表使用局部变量存储器L,CPU在执行子程序时,自动分配给每个子程序64个局部变量存储器单元,在进行子程序参数调用时,将调用参数按照变量类型IN,IN/OUT,0UT和TEMP的顺序依次存入局部变量表中。,5、将参数值指定给子程序中的局部内存时应遵守下列规则:,字节、字和双字数值被指定给局部内存,位于字节边界
10、(LBx、LWx或LDx)位置。在带参数的“调用子程序”指令中,参数必须与子程序局部变量表中定义的变量完全匹配。参数顺序必须以输入参数开始,其次是输入输出参数,然后是输出参数。,一至八个连续位参数值被指定给从Lx.0开始持续至Lx.7的单字节。,参数值指定给局部内存的顺序由CALL指定,参数从L0.0开始。,例:带参数的子程序调用如下所示。,注释:Micro/WIN保留L内存的最上方的4个字节(LB60-LB63),用于调用参数数据。,/ L内存被用于保存布尔输入参数状态,/ 此类参数在LAD和FBD中被显示为使能位输入。/ 从而允许本网络在LAD、FBD和STL编辑器中显示。,名为“模拟量计
11、算”的子程序如下图所示,在该子程序的局部变量表中,定义了名为“转换值”、“系数1”和“系数”的输入(IN)变量,名为“模拟值”的输出(OUT)变量,和名为“暂存”的临时(TEMP)变量。局部变量表最左边的一列是每个参数在局部存储器(L)中的地址。 #表示局部变量,软件自动添加。,如果用语句表编程,子程序调用指令的格式为: CALL 子程序号,参数1,参数2,参数n, n=116。上梯形图对应的语句表程序为:LD I0.1CALL 模拟量计算,AIW2,VW20,+2356,VD40,六、子程序中定时器的使用,调用子程序时,子程序中的定时器正常计时;停止调用子程序时,线圈在子程序内的位元件的ON
12、/OFF状态保持不变。如果在停止调用时子程序中的定时器正在定时,100ms定时器将停止定时,当前值保持不变,重新调用时继续定时;但1ms和10ms定时器将继续定时,定时时间到时,它们的定时器位变为1状态,且可以在子程序之外起作用。,七、子程序应用举例,例1:用两个子程序分别控制两台电动机的启停,主程序中调用子程序实现控制。,OB1,SBR0,SBR1,方案一:无参数传递,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.0
13、LD I1.1= L63.7LD I1.2= L63.6LD L60.0CALL SBR_0:SBR0, L63.7, L63.6, Q1.0,SBR0,方案二:带参数传递,LD #启动:L0.0O #电机:L0.2AN #停止:L0.1= #电机:L0.2,例2:设计一记录设备运行时间的子程序,符号名为“运行时间”。设备运行时I0.0为ON,用I0.0的常开触点调用子程序。,OB1,SBR0,第五节 中断程序及应用,一、中断程序简介,中断程序可以为PLC内部或外部的特殊事件提供快速反应,在PLC控制系统中,对于不定期产生的继续处理事件,常通过采用中断处理技术来完成。,中断程序不是由程序调用,
14、而是在中断事件发生时由系统调用。,当CPU响应中断请求后,会暂时停止当前正在执行的程序,进行现场保护,然后转到相应的中断服务程序中去处理。,一旦中断程序处理结束,立即恢复现场,将保存起来的现场数据和状态重新装入,返回到源程序继续执行。,在S7-200中,中断服务程序的调用和处理由中断指令来完成。一般中断程序都较为短小和简明扼要,这样可以加快中断程序执行的速度,使其他程序不会受到长时间的延误。,二、中断源及中断事件,1、中断源及种类,中断源,即中断事件发出中断请求的来源。S7-200PLC具有最多可达34个中断源,每个中断源都分配一个编号用以识别,称为中断事件号。这些中断源大致分为三大类:通信中
15、断、输入输出中断和时基中断。,S7-200中,过程中断分为通信中断和输入输出中断。通信中断包括通信口0和通信口1产生的中断;输入输出中断包括外部输入中断、高速计数器中断和高速脉冲串输出中断。,1)通信中断:是指S7-200的串行通信口可以通过梯形图或语句表编程的方法来设置波特率、奇偶校验和通信协议等参数,对通信口的这种操作方式,又称为自由口通信。利用接收和发送中断可简化程序对通信的控制。,2)外部输入中断:来自过程中断的信息可通过I0.0,I0.1,I0.2,I0.3的上升沿或下降沿输入到PLC中。,3)高速计数器中断:应用高速计数器场合,当其当前值等于设定值时,或当计数方向发生改变时,或当其
16、外部复位时,都可能使其向CPU提出中断请求。,S7-200中,时基中断分为定时中断和定时器中断。,4)高速脉冲串输出中断:当PLC完成输出给定数量的高速脉冲串时,可引起中断。,1)定时中断:定时中断响应周期性的事件,周期时间以1ms为计量单位,最小周期为5ms,最大周期为255ms。,定时中断有两种类型:定时中断0和定时中断1。对于定时中断0,把周期时间写入特殊继电器SMB34;对于定时中断1,把周期时间写入特殊继电器SMB35。利用定时中断可以设定采样周期,实现对模拟量的数据采样。,2)定时器中断:定时器中断是利用指定的定时器设定的时间产生中断。在S7-200中,指定的定时器为1ms的通电延
17、时定时器T32和断电延时定时器T96。,S7-200的CPU中可响应最多34个中断事件,见下表。,2、中断优先级 中断优先级由高到低依次是:通信中断、输入输出中断、时基中断。每种中断中的不同中断事件又有不同的优先权。 主机中的所有中断事件及优先级参照上表所示。,在PLC中,CPU一般在指定的优先级内按照先来先服务的原则响应中断事件的中断请求,在任何时刻,CPU只执行一个中断程序。当CPU按照中断优先级响应并执行一个中断程序时,就不会响应其他中断事件的中断请求(尽管此时可能会有更高级别的中断事件发出中断请求),直到将当前的中断程序执行结束。在CPU执行中断程序期间,对新出现的中断事件仍然按照中断
18、性质和优先级的顺序分别进行排队,形成中断队列。CPU22x系列的中断队列的长度如下表所示。如果超过规定的中断队列长度,则产生溢出,使特殊继电器置位。,表中断队列的长度及溢出位,表中断数量及事件,三、中断程序的相关指令,中断允许(ENI)指令,全局地开放所有被连接的中断事件,允许CPU接收所有中断事件。,1、中断允许指令ENI和中断禁止指令DISI,中断禁止(DISI)指令,全局地关闭所有被连接的中断事件,禁止CPU接收各个中断事件的中断请求。,执行DISI指令后,出现的中断事件就进入中断队伍排队等候,直到ENI指令重新允许中断。,CPU进入RUN模式时,系统自动禁止了中断。在RUN模式执行EN
19、I指令后,开放所有中断。,中断允许指令ENI、中断禁止指令DISI以线圈的形式编程,无操作数。,2、中断连接指令(ATCH),中断连接(ATCH)指令,用来建立某个中断事件(EVNT)和某个中断程序(INT)之间的联系。并允许这个中断事件。,在调用一个中断程序前,必须用中断连接指令,建立某中断事件与中断程序的连接,当把某个中断事件和中断程序建立连接后,该中断事件发生时会自动 执行中断。多个中断事件可调用同一个中断程序,但一个中断事件不能同时与多个中断程序建立连接,否则,在中断允许且某个中断事件发生时,系统默认执行与该事件建立连接的最后一个中断程序。,3、中断分离指令(DTCH),中断分离(DT
20、CH)指令,用来解除某个中断事件(EVNT)和某个中断程序之间的联系,并禁止该中断事件。指令操作数EVNT的数据类型均为BYTE。,可以用DTCH指令截断中断事件和中断程序之间的联系,以单独禁止某中断事件。DTCH指令使中断回到不激活或无效状态。,4、中断返回指令(RETI)、(CRETI),中断返回指令的功能是,当中断结束时,通过中断返回指令退出中断服务程序,返回到主程序。RETI是无条件返回指令,CRETI是有条件返回指令。,指令使用举例:程序实现的功能是调用I0.1输入点的上升沿中断,若发现I/O错误,则禁止本中断,用外部条件可以禁止全局中断。,四、中断应用举例,例1:利用定时中断指令实
21、现对模拟量的等间隔采样,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 /使Q
22、0.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
23、,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,将中断的时间间隔设为
24、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定时器
25、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)编程要求用中断程序的标
26、号来区别每个中断程序。中断服务程序越短越好,以减少中断程序执行时间。在中断程序中不能使用ENI、DISI、HDEF、LSCR、END指令。中断服务程序的最后一条指令一定是RETI或CRETI(其中RETI指令会由编程软件自动添加)。,第六节 高速计数器功能及应用,一、高速计数器概述,PLC的普通计数器的计数过程与扫描工作方式有关,CPU通过每一个扫描周期读取一次被测信号的方法来捕捉被测信号的上升沿,被测信号的频率较高时,会丢失计数脉冲,因此普通计数器的工作频率很低,一般仅有几十赫兹。高速计数器可以对普通计数器无能为力的事件进行计数,S7-200有6个高速计数器HSC0HSC5,可以设置多达12
27、中不同的操作模式。,1、高速计数器的数量及编号,高速计数器在程序中使用时的地址编号用HSCn来表示,HSC表编程元件名称为高速计数器,n(n=05)为编号。,每个高速计数器的计数结果都对应有一个当前值寄存器。编程时可通过地址HCx(x=05)来读取高速计数器的当前值。,不同型号的PLC主机,高速计数器的数量对应如下表所示。,2、高速计数器的外部输入信号,每个高速计数器对它所支持的时钟、方向控制、复位和启动都有专用的输入点,通过中断控制完成预定的操作。每个高速计数器所需的外部输入点如下图所示。,3、高速计数器相关的中断事件,高速计数器的计数和动作可采用中断方式进行控制,与CPU的扫描周期关系不大
28、,各种型号的PLC可用的高速计数器的中断事件大致分为3类:当前值等于预设值中断、输入方向改变中断和外部复位中断。所有高速计数器都支持当前值等于预设值中断。,每个高速计数器的3种中断的优先级由高到低,不同高速计数器之间的优先级又按编号顺序由高到低。具体对应关系如下表所示。,4、高速计数器的状态字节与控制字节,在特殊存储器(SM)区,每个高速计数器都有一个状态字节、一个设置参数用的控制字节、一个32位预置值寄存器和一个32位当前值寄存器。,状态字节给出了当前计数方向和当前值是否大于或等于预置值等信息。只有在执行高速计数器的中断程序时,状态位才有效。,控制字节的各位用来设置高速计数器的属性。,高速计
29、数器的状态字节表,高速计数器的控制字节表,高速计数器的当前值和设定值寄存器,二、高速计数器的工作模式,S7-200的高速计数器有4类工作模式,共有12种。每个模式各有不同,可通过编程,使用定义高速计数器指令HDEF来选定工作模式。,1、高速计数器的工作模式,2、高速计数器的工作模式说明,从各个高速计数器的工作模式的描述可知:6个高速计数器具有不完全相同的功能,最多可能有12种工作模式,可分为四种类型。下面以HC1的工作模式为例加以说明。,具有内部方向控制的单相增/减计数器(模式02),用高速计数器的控制字节的第3位来控制加计数或减计数。该位为1时为加计数,为0时为减计数。,具有外部方向控制的单
30、相增/减计数器(模式35),方向输入信号为1时为加计数,为0时为减计数。,具有增/减计数脉冲输入的双向计数器(模式68),若加计数脉冲和减计数脉冲的上升沿出现的时间间隔不到0.3ms,高速计数器认为这两个事件是同时发生的,当前值不变,也不会有计数方向变化的指示。反之,高速计数器能捕捉到每一个独立事件。,A/B相正交计数器(模式911),正交:是指A、B两相输入脉冲相位互差90。,当A相脉冲超前B相脉冲90时,计数为增计数;当A相脉冲滞后B相脉冲90时,计数为减计数。,正交计数器有两种工作状态: 一种是输入1个计数脉冲时,当前值计1个数,此时的计数倍率为1。 另一种工作状态是输入1个计数脉冲时,
31、当前值计4个数,此时的计数倍率为4。,1倍率正交计数器时序图,4倍率正交计数器时序图,三、高速计数器指令,1、高速计数器定义指令HDEF,使能输入有效时,为指定的高速计数器分配一种工作模式,即用来建立高速计数器与工作模式之间的联系。梯形图指令盒中有两个数据输入端:HSC,高速计数器编号,为05的常数,字节型;MODE,工作模式,为011的常数,字节型。,2、高速计数器指令HSC,使能输入有效时,根据高速计数器特殊存储器位的状态,并按照HDEF指令指定的工作模式,设置高速计数器并控制其工作。梯形图指令盒数据输入端N:高速计数器编号,为05的常数,字型。,四、高速计数器的使用,使用高速计数器时,每
32、个高速计数器只能用一条HDEF指令,可以用首次扫描存储器位SM0.1,在第一个扫描周期调用包含HDEF指令的子程序来定义高速计数器。,1、设置的一般步骤,选择计数器及工作模式 设置控制字节 执行HDEF指令 设定当前值和预设值 设置中断事件并全局开中断 执行HSC指令,2、应用举例,例1: 要对一高速事件精确控制,通过对脉冲信号进行增计数,计数当前值达到24产生中断,重新从0计数,对中断次数进行累计。计数方向用一个外部信号控制,并能实现外部复位。所用的主机型号为CPU221。,设计步骤:选择高速计数器HSC0,并确定工作方式4;令SM37=16#F8; 执行HDEF指令,输入端HSC为0,MO
33、DE为4;装入当前值,令SMD38=0;装入设定值,令SMD42=24;执行中断连接ATCH指令,输入端INT为INT0,EVNT为12。,五、旋转编码器,在工业控制中的某些场合,PLC高速计数器输入的高速脉冲信号一般可通过旋转编码器获得。,1、增量式编码器,光电增量式编码器的码盘上有均匀刻制的光栅。码盘旋转时,输出与转角的增量成正比的脉冲,需要用计数器来计脉冲数。根据输出信号的个数,有三种增量式编码器:, 单通道增量式编码器,单通道增量式编码器内部只有一对光耦合器,只能产生一个脉冲序列。, 双通道增量式编码器,双通道增量式编码器又称为A、B相型编码器,内部有两对光耦合器,能输出相位差为90
34、的两组独立脉冲序列。正转和反转时两路脉冲的超前和滞后关系刚好相反(如下图),如果使用A、B相型编码器,PLC可以识别出转抽旋转的方向。, 三通道增量式编码器,编码器内部除了有双通道增量式编码器的两对光耦合器外,在脉冲码盘的另外一个通道有一个透光段,每转一圈,输出一个脉冲,该脉冲称为Z相零位脉冲,用作系统清零信号,或坐标的原点,以减少测量的积累误差。,A相,B相,A相,B相,a)正转,b)反转,N位绝对式编码器有N个码道,最外层的码道对应编码的最低位。每一码道有一个光耦合器,用来读取该码道的0、1数据。绝对式编码器输出的N位二进制数反映了运动物体所处的绝对位置,根据位置的变化情况,可以判别出旋转
35、的方向。,2、绝对式编码器,例2:控制要求,包装箱用传送带输送,当箱体到达检测传感器A时,开始计数。计数到2000个脉冲时,箱体刚好到达封箱机下进行封箱,此时传送带并没有停下,而是继续运转。则在封箱过程中,箱体还在前行。假设封箱过程共用300个脉冲,然后封箱机停止工作。继续前行,当计数脉冲又累加到1500个码时,开始喷码,喷码机开始工作,假设喷码机共用5秒钟进行喷码,喷码结束后,整个工作过程结束。,主程序,子程序,注意:,使用高速计数器时,需要根据有关的特殊存储器的意义来编写初始化程序和中断程序。这些程序的编写繁琐,容易出错。,STEP7-Micro/WIN的向导功能很强,使用向导来完成某些功
36、能的编程既简单方便,又不容易出错。使用指令向导能简化高速计数器的编程过程。,例3:用指令向导生成高速计数器HSC0的初始化程序和中断程序,HSC0为无外部方向输入信号的单相加/减计数器(模式0),计数值为1000020000时Q4.0输出1。,执行菜单命令“工具” “指令向导”,按下面的步骤设置高速计数器的参数:,1)在第1页选择“HSC”(配置高速计数器),每次操作完成后点击“下一步”按钮。,2)在第2页选择HSC0和模式0。,3)在第3页设置计数器的预置值为10000,当前值为0,初始计数方向为加(增)计数。使用默认的初始化子程序符号名HSC_INIT。,4)在第4页设置当前值等于预置值时
37、产生中断(中断事件编号为12),使用默认的中断程序符号名COUNT_EQ。,向导允许高速计数器按多个步骤进行计数,即在中断程序中修改某些参数,例如修改计数器的计数方向、当前值和预置值,并将另一个中断程序连接至相同的中断事件。,本例设置编程2步,在中断程序COUNT_EQ中,修改预置值为20000,计数当前值和计数方向不变。完成设置后自动生成下述的初始化子程序HSC_INIT、中断程序COUNT_EQ和HSC0_STEP1。在主程序中,首次扫描时调用HSC_INIT,中断程序中对Q4.0置位和复位的语句是用户添加的。 最后一个步骤可以重新连接第一个中断程序,使计数过程循环进行。,主程序LDSM0
38、.1CALLHSC_INIT,初始化子程序HSC_INITLDSM0.0MOVB16#F8,SMB37MOVD+0,SMD38MOVD+10000,SMD42HDEF0,0ATCHCOUNT_EQ,12ENIHSC0,中断程序COUNT_EQLDSM0.0MOVB16#A0,SMB37MOVD+20000,SMD42ATCHHSC0_STEP1,12HSC0SIQ4.0,1/用户添加,中断程序HSC0_STEP1LDSM0.0MOVB16#80,SMB37DTCH12HSC0RIQ4.0,1/用户添加,第七节 高速脉冲输出功能及应用,一、高速脉冲输出概述,小型PLC的脉冲量输出一般都采用晶体管
39、输出形式,用于支持位置控制功能。位置控制功能的目的是通过速度的设定将物体从当前位置准确转移到预设位置。当连接到不同的伺服驱动装置或步进电动机控制装置时,可通过脉冲信号控制位置的高精确度,如下图:,1、高速脉冲输出的形式,高速脉冲输出有两种输出形式:高速脉冲序列(高速脉冲串)输出PTO和脉冲宽度调制输出PWM,可通过特殊继电器来定义输出形式。,脉冲串输出PTO可以输出一串脉冲(占空比为50%),用户可以控制脉冲的周期和个数。,脉冲调制输出PWM可以输出连续的、占空比可以调制的脉冲串,用户可以控制脉冲的周期和脉宽。,2、输出端子的确定,在S7-200中,只有输出继电器Q0.0和Q0.1具有高速脉冲
40、输出功能,如果不需要进行高速脉冲输出时, Q0.0和Q0.1可以作为普通的数字量输出点使用。一旦需要使用高速脉冲输出功能时,必须通过Q0.0和Q0.1输出高速脉冲。 在使用PTO和PWM操作之前,需要将两者的过程映像寄存器清零。,3、脉冲输出指令,高速脉冲输出指令在梯形图中以功能框的形式编程,指令名称是PLS,其功能是当允许输入EN有效时,检测各个相关特殊继电器的状态,激活由控制字节定义的高速脉冲输出操作。PLS指令只有一个输入端Q,字型数据,只能取常数0或1,对应从Q0.0或Q0.1输出高速脉冲。,4、相关的寄存器,每个高速脉冲发生器对应一定数量特殊标志寄存器,这些寄存器包括控制字节寄存器、
41、状态字节寄存器和参数数值寄存器,用以控制高速脉冲的输出形式、反映输出状态和参数值。各寄存器分配如下表所示。,状态字节,状态字节在程序运行时根据运行状况自动使某些位置位,可以通过程序来读相关位的状态,用以作为判断条件实现相应的操作。状态字节中各状态位的功能如下表所示。,控制字节,通过对控制字节中指定位的编程,根据操作要求设置字节中各控制位,如脉冲输出允许、PTO/PWM模式选择、单段/多段选择、更新方式、时间基准、允许更新等。控制字节中各控制位的功能如下表所示。,二、高速脉冲串输出(PTO),脉冲宽度与脉冲周期之比称为占空比,脉冲序列(PTO)功能提供周期与脉冲数目可以有用户控制的占空比为50%
42、的方波脉冲输出。,脉冲计数范围用双字长无符号数表示,脉冲数的取值范围是14294967295。如果编程时指定脉冲数为0,则系统默认脉冲数为1个。,PTO可提供单脉冲串或多脉冲串(脉冲轮廓)。用户可以指定脉冲数和周期(以微妙或毫秒递增),周期范围为1065535m或265535ms。周期值一般设定为偶数,若指定周期值为奇数(如75ms)会引起占空比的轻微失真。,1、周期和脉冲数,PTO方式中,如果要输出多个脉冲串,每个脉冲串的周期和脉冲数可以不同。当需要输出多个脉冲串时,允许脉冲串进行排队,形成管线,当前输出的脉冲串完成之后,立即输出新脉冲串,这保证了脉冲串顺序输出的连续性。 单段管线 多段管线
43、,2、PTO输出方式,单段管线PTO,在单段管线PTO输出时,管线中只能存放1个脉冲串的控制参数(入口地址)。在当前脉冲串输出期间,就要对与下一个脉冲串相关的特殊继电器进行更新,待当前的脉冲串输出完成后,通过执行PLS指令,就可以立即输出新的脉冲串,实现多段脉冲串的连续输出。,采用单段管线PTO的优点是:各个脉冲串的时间基准可以不同。 采用单段管线PTO的缺点是:编程复杂且烦琐,当参数设置不当时,会造成各个脉冲串连接的不平滑。,多段管线PTO,当采用多段管线PTO输出高速脉冲串时,需要在变量存储器区(V)中建立一个包络表,在包络表中存储各个脉冲串的参数,当执行PTO指令时,CPU自动按顺序从包
44、络表中调出各个脉冲串的入口地址,连续输出各个脉冲串。,采用多段管线PTO的优点是:编程简单,可按照程序设定的周期增量值自动增减脉冲周期。 采用多段管线PTO的缺点是:所有脉冲串的时间基准必须一致,当执行PLS指令时,包络表中的所有参数均不能改变。,PTO包络表,包络表由包络段数和各段构成。每段长度为8个字节,包括: 脉冲周期值(16位); 周期增量值(16位); 脉冲计数值(32位)。 以3段包络的包络表为例,包络表的结构如下表所示。,3、中断事件类型,高速脉冲串输出可以采用中断方式进行控制,各种型号的PLC可用的高速脉冲串输出的中断事件有两个,如下表所示。,4、PTO的使用,使用高速脉冲串输
45、出时,要按以下步骤进行:确定脉冲发生器及工作模式 设置控制字节写入周期值、周期增量值和脉冲数装入包络的首地址设置中断事件并全局开中断执行PLS指令,三、高速脉冲串输出应用举例,1、控制要求 步进电机转动过程中,要从A点加速到B点后恒速运行,又从C点开始减速到D点,完成这一过程时用指示灯显示。电机的转动受脉冲控制,A点和D点的脉冲频率为2kHz,B点和C点的频率为10kHz,加速过程的脉冲数为400个,恒速转动的脉冲数为4000个,减速过程脉冲数为200个。工作过程如下图所示。,2、分析确定脉冲发生器及工作模式 设置控制字节 写入周期值、周期增量值和脉冲数 装入包络表首地址 中断调用 执行PLS
46、指令,确定脉冲发生器及工作模式 选择由Q0.0输出,由上图选择3段管线(AB段、BC段、CD段)PTO的输出形式。,设置控制字节 确定周期值的时基单位,由于在BC段输出的频率最大为10kHz,对应的周期值为100s,因此选择时基单位s,向SMB67写入控制字16#A0。,确定周期初始值、周期增量值,、初始值确定较为容易,只需将每段初始频率转换为时间即可:AB段为500s, BC段为100s, CD段为100s。,、周期增量值的确定:,Tn+1:该段结束的周期时间;Tn: 该段开始的周期时间;N: 该段的脉冲数。,建立包络表 设包络表的首地址为VB400,包络表如下:,确定中断 PTO0高速脉冲
47、串输出完成中断事件19,对应中断程序中设置控制指示灯的输出点置位。,程序实现 本控制系统主程序、初始化子程序SBR_1、包络表子程序及中断程序如下:,三、宽度可调脉冲输出(PWM),脉冲宽度调制功能提供连续的、周期与脉冲宽度可以由用户控制的输出。时间基准可设置为m或ms,周期范围为1065535m或265535ms,脉冲宽度的变化为065535m或065535ms 。,当指定的脉冲宽度值大于周期值时,占空比为100%,输出连续接通;当脉冲宽度为0时,占空比为0%,输出断开。PWM的高频输出波形经滤波后可以得到与占空比成正比的模拟量输出电压。,1、周期和脉冲宽度,2、更新方式,同步更新:PWM的
48、典型操作是当周期时间保持常数时变化脉冲宽度。所以不需要改变时间基准。不改变时间基准,就可以进行同步更新。同步更新时,波形特性的变化发生在周期边沿,可提供平滑过渡。,异步更新:若需改变PWM发生器的时间基准,就要使用异步更新。异步更新会造成PWM功能被瞬时禁止,和PWM输出波形不同步。这会引起 被控设备的振动。因此,建议选择一个适合于所有周期时间的时间基准来采用PWM同步更新。,3、PWM指令,执行菜单命令“工具” “位置控制向导”,打开位置控制向导。在第1页选择“配置S7-200PLC内置PTO/PWM操作”。在第2页选择组态Q0.0或Q0.1。在第3页选择组态PWM,并选择脉冲宽度和周期的时
49、间基准(ms或s),就完成了对PWM的组态。向导将生成PWM指令PWMx_RUN,指令命中x是Q0.0或Q0.1的位地址。,此指令有PTO/PWM向导生成,用于输出点Q0.0。此输出点用于带有同步更新和毫秒时间基准的PWM。,四、用位置控制向导组态脉冲列输出,PTO主要通过包络来实现位置控制。位置控制向导通过参数设置来创建包络,并用图形方式显示包络曲线,自动生成位置控制用的子程序。下面先回顾一些基本概念:,包络是一个预先定义的以位置为横坐标、以速度为纵坐标的曲线,包络是运动的图形描述,如下图:,1、包络,一个包络由多段组成,每一段包含一个达到目标速度的加速/减速过程和以目标速度匀速运行的一串指
50、定数量的脉冲。如果是单段运动控制或者是多段运动控制中的最后一段,还应该包括一个由目标速度到停止的减速过程。 PTO支持两种操纵模式:相对位置和单速连续转动。,MAX_SPEED是运动速度的最大值,它应在电动机转矩允许的范围内,驱动负载所需的转矩由摩擦力、惯性及加速/减速时间决定。,2、最大速度与启动/停止速度,对于PTO输出,必须指定期望的启动/停止速度SS_SPEED,它应满足电动机在低速时驱动负载的能力。如果SS_SPEED的值过低,电动机和负载在运动的开始和结束时可能会摇摆或颤动。如果SS_SPEED的值过高,电动机会在启动时丢失脉冲,在负载停止时会使电动机过载。 SS_SPEED通常是