在CPU31xC高速计数功能的应用中,经常需要在CPU断电后保持当前计数值,以便在CPU重新上电后高速计数器可以从 保持的计数值继续计数。通过组态的方式不能直接实现计数值的断电保持功能(如果CPU断电后再上电,计数值会回到初始值,默认为“0”),需要通过编写用 户程序的方式来实现。
1 基本原理
实现计数值的断电保持主要是应用高速计数器的写装载值功能。所谓的写装载值就是将装载值作为起始计数值预先赋值给计数器,当计数器重新启动后,计数器将从设定的装载值开始计数。
应用写装载值的功能,可以在CPU重新上电时将设置了断电保持功能的计数器值写回给计数器,这样计数器就可以从CPU断电之前的最后计数值开始计数了,也就实现了计数值的断电保持功能。
具体的程序实现原理如图1所示。
图 1
2 程序实现
有关CPU31xC高速计数功能的组态、编程与应用请参考《CPU31xC :工艺功能》手册或下载中心相关文档。文中涉及的具体组态和编程请参考附件里提供的例程(仅供应用中参考,不能直接用于实际的项目),这里不再详细说明。
根据图1的实现思路,计数值断电保持的程序实现步骤如下:
1、在OB1中调用系统功能块SFB47 COUNT,如图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) = B#16#02,并置位写作业标志位JOB_REQ(M20.1)。
图5
5、因为写作业功能需要多个周期才能完成,所以必须在OB1中通过判断写作业完成标志位JOB_DONE(M20.2)来将写作业标志位(M20.1)复位。
注意,这里必须通过判断写完成标志位来复位写作业标志位,同时要避免在写标志没有完成的情况下启动计数器的运行,这会造成计数值断电保持功能的失败。
图6
6、写装载值作业完成后,重新启动计数功能(重新打开软件门M20.0),可以看到计数值会从CPU断电之前保存的计数值开始继续计数。
注意:这时计数器的装载值已经被设置为了断电前的计数值,每次重新启动计数器后会自动将这个装载值作为初始计数值,所以如果不想再使用这个装载值,则需要重新通过写装载值作业将装载值重新赋值。
3 实验环境
本文的截图和例程的软硬件环境如下:
- 软件:STEP7 V5.5 SP2
- 硬件:CPU314-2PN/DP (6ES7314-6EH04-0AB0) V3.3
关键词
CPU31xC,高速计数,断电保持,编程
相关附件下载 ( 808 KB ) n
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc326105.html