关于压栈堆栈在延时处理中的应用
2018-01-18王安邦徐从跃何升庆
王安邦++徐从跃++何升庆
摘 要本文主要讲述了在如何在编程中使用压栈堆栈的方法对延时进行处理,分别使用了数据传送的方式以及指针的方式进行编程,对两种编程方法进行了比较,并对两种编程方法的适用性以及灵活性进行了分析。
【关键词】自动控制系统 PLC 压栈堆栈
目前,在自动控制系统中,我们经常遇到需要处理延时加水或加料的问题,一般常使用压栈堆栈处理来实现延时。现在我们以设备自动加水系统为例,通过在PLC控制系统中使用这种控制方法。
在设备自动加水系统中,一般根据电子秤的物料流量乘以加水系数来计算加水的流量,由于电子秤上物料到加水位置有一段距离,为了保证把水准确的施加到物料的表面,我们需要对物料流量进行延时处理。 下面我们使用压栈堆栈方法来处理,实现延时加水。
1 使用数据传送进行程序编制
电子称上物料距离加水点需要5秒时间,我们通过对西门子PLC程序进行改进,来实现延时加水。我们把电子称流量数据变量名定为DB10.DBD100,延时后的电子称流量为DB10.DBD200。然后这个数字乘以加水系数即为当前加水位置的水流量。程序如图1所示。
在图1中,使用时间继电器来实现0.5秒的震荡脉冲,即M432.0每隔0.5秒接通一次, 然后在图2中, 在第一秒时M432.0接通,程序跳转执行M003,此时把电子称流量DB10.DBD100传送给DB20.DBD0,其余的DB20.DBD4 、DB20.DBD12等数据为空,在第1.5秒时,程序开始执行M004,把第一秒的电子称流量传送给DB20.DBD4,此时在DB20.DBD0和DB20.DBD4中存储的数据都为第一秒的电子称流量。在第2秒时,程序执行M003,把第2秒的电子称流量传送给DB20.DBD0,同时把DB20DBD4传送给DB20.DBD8,此时DB20.DBD4和DB20.DBD8中储存的数据为第一秒的电子称流量。当程序连续执行时,DB20.DBD40储存的数据是5秒前的数据,即DB20.DBD40的数据是电子称数据经过5秒后输出的数据,也就是经过了5秒的延时。然后把DB20.DBD40传送给DB10.DBD200,这样DB10.DBD200就是电子称流量DB10.DBD100延时5秒的数据。这样
把DB10.DBD200乘以加水系数,算出当前加水量,即可实现当前延时加水。
上面的这种方法直接使用脉冲,通过PLC程序的跳转来在数据块中传送数据,实现了数据的延时输出,但是这种方法编程所使用的程序字节较多,当需要延时50秒时,程序占用的字节就会很多,需要一直传送到DB20.DBD400,编程起来比较繁琐如果需要延时100秒、200秒呢!这是我们使用另一种带指针的编程方法来实现。使用指针来进行编程。
2 使用指针进行程序编制
我们以50秒数据延时为例,来进行指针编程。见图3。
图3的程序被块OB32(每隔1秒扫描一次)调用,其中主要使用FB11功能块来实现电子称数据延时,而FB11功能块的内部程序见图4。我们来分析一下图4中的程序如何实现50秒延时。首先,#in1为输入数据50,代表50秒延时,把#in1装入临时变量#tm3来同进行比较,如果小于700,程序跳转至m001,在把 #tm3同1进行比较,如果大于1,程序跳转至m002,装载静态变量#st2(初始值为0),程序FB11每扫描一次#st2的数值加1,然后同#tm3进行比较,如果小于#tm3,在程序跳转至m003,如果#st2大于数值大于50,则程序会先把#st2重新置零,然后在跳转至m003。在m003中,首先对#st2左移5位,也就是把数字#st2乘以32,这样就等于是把数字“位”变化成了双字,即在数据块中只会出现DBD0、DBD4、DBD8等之类的数据,地址指针指向#st1(初始值为0),把它同#st2相加,然后把对应的地址装载如地址寄存器AR1。程序每隔一秒扫描一次,这样在第一秒时把DBD0传送给#out(延时后的电子称流量),然后把#in0(电子称流量)传送给DBD0,以后每隔一秒均是如此,大家可以看到到第50秒时把DBD196传送给#out,然后把当前的电子称流量#in0传送给DBD196。这种使用指针的编程方法实现了数据的延时处理,而且比较灵活,只要在图3中#in1的引脚输入不同的数字,即可实现不同时间的延时。
数据延时在自动控制系统中使用的较为广泛,使用第一種数据传送的方法编程较为简单也容易理解,使用第二中指针编程的方法,在程序内部使用地址寄存器来实现数据传送,结构要复杂一些,但是这种功能块比较灵活,可以实现不同的延时,而且可以反复调用。
参考文献
[1]程昊.PLC变频器用于大中型企业电气自动化控制的可行性[J].科技展望,2017,27(17):145.
[2]王颖丽.可编程逻辑控制器技术的发展[J/OL].河南科技,2016(03):24.
作者单位
安徽中烟工业有限责任公司合肥卷烟厂 安徽省合肥市 230601endprint