工控网首页
>

应用设计

>

PLC编程中构造定时器的几种方法

PLC编程中构造定时器的几种方法

2007/4/13 9:03:00
在现代工业现场控制中,PLC作为控制系统的重要组成部分,起着不可替代的作用。现代PLC的功能不仅局限于简单的逻辑运算,而且具备了定时、计数、数值计算、中断处理、网络配置等多种强大的功能,使之应用于工业现场时更能发挥其作用。作为PLC重要功能之一的定时,在PLC程序中,可以进行时序构造、等待响应、人为制造中断、产生时间脉冲等多种应用,是PLC编程中不可或缺的重要手段。在PLC编程中构造定时器常用的方法是使用PLC内部的计时器资源,另外还可以利用其扫描周期和周期性的中断来构造定时器,下面将以上三种方法进行介绍。 一. 计时器定时 这种方式是应用最普遍也是最便捷的方式,广泛地应用于PLC程序之中。各种厂家及型号的PLC,在其软件内部都提供有限的计时器资源。当条件满足时,计时器启动,根据计时器的类型及所定时间的长度执行。以SIEMENS公司的S7-400系列PLC为例,其提供的计时器(TIMER)资源类型有:S_ODT(导通延时)、S_ODTS(导通同步延时)、S_OFFDTS(关断同步延时)、S_PULSE(脉冲延时)、S_PEXT(扩展脉冲延时)等五种。各种计时器都有自己不同的通断特性,例如S_ODT(导通延时)的通断特性如图1所示。这五种计时器资源可以单独
使用,也可以任意组合,满足各种工程需要。这种计时器方式最大的特点是方法简单、易于操作,但其也有一定的局限性,主要表现在占用过多的系统资源,并且各种PLC对计时器个数有一定限制,以S7-400系列PLC来说,允许系统使用的计时器为512个。所以在一些大型的项目中,会出现不够用的情况;即使够用,也会因为占用过多资源而使扫描周期变长,对于精度要求比较高的系统,会有一定影响。 二. 扫描周期累加编程定时 所周知,PLC执行程序的工作方式就是扫描,而CPU对所有程序的一个遍历所经过的时间就是一个扫描周期。对于PLC来说,每个扫描周期会因为程序长度、程序中信号和中断的不同而不同。虽然这样,但扫描周期毕竟还是和CPU内部时钟保持一定的统一性,是内部时钟外在的一种时间反应。现代工业越来越智能化的今天,扫描周期不再只是一项内部指标,更多的PLC已经将其作为一项基本的参数,提供给用户使用。所以我们可以建立一种构造定时的思路:将扫描周期累加起来,如果达到我们需要定时的长度,就产生中断,执行我们需要的步骤。 还是以S7-400系列PLC为例,在软件编制过程中,OB1(Program Cycle Organization Block)是一个基本的程序模块,它是CPU扫描的主程序,其它程序被它调用。OB1有一个模块内的变量表,变量表中有一个临时变量(temp)为:OB1_PREV_CYCLE,它里面所放的数据为前一次扫描周期的毫秒(ms)数,是整型(Integer)数据。因为是临时变量,所以每个扫描周期内存放的数据都在变化。因为OB1的变量表中没有静态变量类型,所以不能直接在OB1中直接进行累加,我们可以借助一个具有静态变量的FB(Function Block)程序模块来编制累加程序,在OB1中调用FB,并通过接口将OB_PREV_CYCLE做为IN参数输入给FB,其OB1程序执行如图2。在FB中,如果以100ms为一个单位,从接口中读取OB1提供的前一个扫描周期的数值参数OB1_PREV_CYCLE,将其
赋值给FB自身的IN参数,并进行累加,再通过一些中间量的转换、计算,输出以100ms为一个单位的单位个数做为OUT接口,供其它程序使用。其程序流程图及I/O参数如图3所示。为了方便其它程序更多地调用此项功能,以及实现多种延时方式(如ON延时、OFF延时、PULSE延时等),可以再做一些FC(Function)。选择ON延时为例,用户使能后,将FB输出接口中的参数值保存起来做为初值,在后续的扫描过程中,将当前值与初值相减计算出差值,最后将用户设置的定时数与差值进行比较,满足条件即可执行用户命令。如果仍以100msec为定时单位,其程序流程图如图4所示。 在使用中,用户可以直接调用FC块,填入相应的参数。FC的I/O接口参数
表1表1 FC的I/O接口参数
如表1所示(如果用户需要使用OFF延时,或者PULSE延时,用户可以根据要求自行编制相应程序,这里只给出ON延时示例)。 这一种实现定时功能的方式,没有直接的功能可以用,需要用户自行编程实现。虽然较上一种方式复杂,但对于一个大的工程来说,理论上可以无限次的调用,并且由于程序并不复杂,不会占用系统过多资源,使系统的扫描更加迅速。 三.周期中断累加定时 中断是指CPU在执行扫描程序时,满足了某种条件或发生了某种事件,而暂停扫描的顺序,执行该条件或事件的相关程序的一个过程。在PLC中,中断的类型多种多样,有用户为程序执行设置的中断,有CPU为响应外部输入输出设备产生的中断,有系统运行到达某一时刻点产生的中断,也有系统周期性的中断等等。对于PLC中时间周期性的中断,就可以利用其时间的周期性来制造定时功能。 同样,以S7-400系列PLC为例,系统为用户提供了从OB30到OB38等9种时间周期中断,这些周期中断OB块不受扫描周期的约束和影响,只按照各自
同样,以S7-400系列PLC为例,系统为用户提供了从OB30到OB38等9种时间周期中断,这些周期中断OB块不受扫描周期的约束和影响,只按照各自同样,以S7-400系列PLC为例,系统为用户提供了从OB30到OB38等9种时间周期中断,这些周期中断OB块不受扫描周期的约束和影响,只按照各自
的周期时间属性和优先级,每一个周期扫描并执行一遍其内部的程序,其各自的中断间隔时间和优先级见表2。为了方便编程,用户可以取10ms、100ms、1s为时间单位,使用OB38、OB35、OB32。这种定时的构造方法的主要思想是,构造一个FB块在OB块中调用,利用时间周期中断OB块的周期执行性,每一个周期进行一次累加,累加值做为接口提供给构造ON延时、OFF延时或者PULSE延时的FC块使用。OB块的执行过程如图5所示。
周期中断FB块的主要编程思想是:通过与OB块的参数接口读取OB_Number参数做为Flag,并对Flag做相应的判断(Flag=32?or Flag=35?or Flag=38?),如果条件满足,则在相应的条件下做累加运算,并通过自己的背景数据块输出Counter_1s、Counter_100ms、Counter_10ms等参数,供FC块使用。FB块分别在OB32、OB35、OB38中调用,接受它们提供的参数。FB块的流程图如图6所示。 还有另一种方法是:FB只在OB38中调用,根据10ms、100ms、1s存在十进制倍数的关系,在FB中添加编程,对Counter_10ms进行除以10后取整或除以100取整,得到Counter_100ms和Counter_1s。 FC块的构造同上种方法基本一样,接受了三个累加值之后,根据用户需要编程实现选择使用哪一种时间等级,其后步骤与上种方法相同,这里不再复述,也不给出流程图了。 这种实现定时功能的方法具有上一种方法的全部优点,并且较上一种方法更容易实现,编程更为简单,不用累加后取整。但并不是所有的PLC都提供周期中断供用户使用,这跟各厂家产品有关,一般情况下只有一些工程上使用的具有复杂控制功能的PLC会提供,而一些小型PLC供用户使用的资源相对较少,不提供此项功能,因此这种方法使用上有一定的局限性。
四.总结 以上介绍了在PLC中实现定时功能的三种方法,用户可以根据实际情况,具体、灵活地选择应用。以上的流程图中也只给出了主要编程思路的框架,用户可以根据自己的需要添加程序。PLC中实现定时的方法很多,用户可以根据产品所提供的功能,多角度分析看待问题,使其资源得到充分的利用。 参考文献 《PLC原理及应用》、《SIEMENS S7-300/400编程手册》 《SIEMENS S7-300/400用户手册》
投诉建议

提交

查看更多评论