当前位置:首页 > 行业发展 > 正文

在CPU31xC高速计数功能应用中,如何实现计数值的断电保持

在CPU31xC高速计数功能的应用中,经常需要在CPU断电后保持当前计数值,以便在CPU重新上电后高速计数器可以从保持的计数值继续计数。通过组态的方式不能直接实现计数值的断电保持功能(如果CPU断电后再上电,计数值会回到初始值,默认为“0”),需要通过编写用户程序的方式来实现。1基本原理实现计数值的...

在CPU31xC高速计数功能的应用中,经常需要在CPU断电后保持当前计数值,以便在CPU重新上电后高速计数器可以从保持的计数值继续计数。通过组态的方式不能直接实现计数值的断电保持功能(如果CPU断电后......

在CPU31xC高速计数功能的应用中,经常需要在CPU断电后保持当前计数值,以便在CPU重新上电后高速计数器可以从保持的计数值继续计数。通过组态的方式不能直接实现计数值的断电保持功能(如果CPU断电后再上电,计数值会回到初始值,默认为“0”),需要通过编写用户程序的方式来实现。

1基本原理

实现计数值的断电保持主要是应用高速计数器的写装载值功能。所谓的写装载值就是将装载值作为起始计数值预先赋值给计数器,当计数器重新启动后,计数器将从设定的装载值开始计数。

应用写装载值的功能,可以在CPU重新上电时将设置了断电保持功能的计数器值写回给计数器,这样计数器就可以从CPU断电之前的最后计数值开始计数了,也就实现了计数值的断电保持功能。

具体的程序实现原理如图1所示。


图1

2程序实现

有关CPU31xC高速计数功能的组态、编程与应用请参考《CPU31xC:工艺功能》手册或下载中心相关文档。文中涉及的具体组态和编程请参考附件里提供的例程(仅供应用中参考,不能直接用于实际的项目),这里不再详细说明。

根据图1的实现思路,计数值断电保持的程序实现步骤如下:

1、在OB1中调用系统功能块SFB47COUNT,如图2。


图2

2、在OB1中将读出的计数值COUNTVAL(MD40)保存到CPU的断电保持地址区MD10(MD10是断电保持存储区,M区的断电保持可以在CPU属性中设置)。

注意,如果直接将COUNTVAL给到了CPU的断电保持地址区,那么可以忽略此步。


图3

3、在OB100启动组织块中,编写程序将保存的保持地址区(MD10)的值作为装载值写给计数器的JOB_VAL(MD46)。


图4

4、在OB100中写入装载值的作业号JOB_ID(MW44)=B02,并置位写作业标志位JOB_REQ()。


图5

5、因为写作业功能需要多个周期才能完成,所以必须在OB1中通过判断写作业完成标志位JOB_DONE()来将写作业标志位()复位。

注意,这里必须通过判断写完成标志位来复位写作业标志位,同时要避免在写标志没有完成的情况下启动计数器的运行,这会造成计数值断电保持功能的失败。


图6

6、写装载值作业完成后,重新启动计数功能(重新打开软件门),可以看到计数值会从CPU断电之前保存的计数值开始继续计数。

注意:这时计数器的装载值已经被设置为了断电前的计数值,每次重新启动计数器后会自动将这个装载值作为初始计数值,所以如果不想再使用这个装载值,则需要重新通过写装载值作业将装载值重新赋值。

最新文章