| 作者 | 主题 |
|---|---|
|
blackhk99 游民 经验值:59 发帖数:29 精华帖:0 |
楼主
主题:关于用高数计数器采集频率信号的小心得
在之前的一个项目中,本人用到了CPU-224XP CN,用于检测一个频率型的传感器.PLC有检测电压、电流信号的端口,但系统手册和POWER上面都没说过怎么检测频率型的信号.后来我想到了高数计数器,但程序上不知道怎么处理好.
后来咨询西门子公司,他们的接线员亲切的给我转接了西门子公司的工程师,态度很好.而工程师的水平和态度,我就不能恭维了.我问他关于频率信号采集的解决方案,他开始就说,没搞过,要我用电流、电压的.后来我说我要用高数计数器做,他说可以.我问他以前有没有过这样的解决方案,他说没有,而且还加上一句很气人的话"我为什么要有." 我当时那个晕啊~~!什么态度. 好了,废话说了那么多了,进入正题吧.最后我参看一位兄弟的相近的高数计数器的程序,萌发了灵感,把程序写出来了. 我的方案是从在初始化中定义好HSC,然后有定时1S的中断读高熟计数器里的计数值,1秒内读的计数值就是对应的频率值了. 说明下:(200系列的定时中断,只有最高250ms,我用的4次定时中断4*250ms=1s,定时1S的时候来执行中断程序,在中断程序里面,先读高数计数器里面的值,然后在把高数计数器的值清0,准备下次的信号采集.) 注意:200系列高数计数器有6个,但6个HSC的输入判决电压不是都一样(HSC4和HSC5的逻辑1的电压是>4VDC),也就是说你的频率信号如果太微弱了的话,高数计数器将检测不到你的频率信号,必须外接信号放大电路. 以下提供部分源程序,跟大家分享些解决问题的乐趣和经验,呵呵.同时也希望和大家一起研究西门子PLC,大家有什么问题一起交流吧. 我的QQ是:102580923,邮箱是blackhk99@163.com.出来乍到,大家多多包涵.(现在工作了事情不多,想和对编程有兴趣或者有需要的朋友一起交流,另外可以免费帮人编写S7-200系列的程序,旨在锻炼自己,有需要的联系我哦) 以下是定时中断的程序 TITLE=中断程序注释 Network 1 LD SM0.0 INCB VB150 Network 2 // 网络标题 // 网络注释 LD SM0.0 AB= VB150, 4 //定时中断次数的计数到了4次时,才把HCS里面的值写到出来 MOVD HC4, VD3500 MOVD HC0, VD3504 MOVD HC1, VD3508 MOVD HC2, VD3512 MOVD HC3, VD3516 MOVD HC5, VD3520 MOVD +0, SMD148 MOVD +0, SMD142 MOVD +0, SMD158 MOVD +0, SMD152 MOVD +0, SMD138 MOVD +0, SMD38 MOVD +0, SMD48 MOVD +0, SMD58 Network 3 LD SM0.0 AB= VB150, 4 MOVB 16#F8, SMB147 MOVB 16#F8, SMB157 MOVB 16#F8, SMB137 MOVB 16#F8, SMB37 MOVB 16#F8, SMB47 MOVB 16#F8, SMB57 HSC 4 HSC 5 HSC 0 HSC 1 HSC 2 HSC 3 MOVB 0, VB150 /***************************************************************/ 感谢斑竹给了我一个精!!呵呵,也希望以后能跟大家在这里多多交流编程、应用的经验
来和大家分享学习经验的
|
|
yanxiao 版主 经验值:28976 发帖数:12202 精华帖:47 |
楼
主题:回复:关于用高数计数器采集频率信号的小心得
芳季,你可是名符其实的“游民”啊。好久不见了,呵呵
关于HSC更新,回答如下: 1、中断时不作HSC更新,当然是错过了最佳时机,所以就不再更新了; 2、主程序中如何知道HSC已读取了? 方法一: ldb= 0,vb150 eu 这个方法,前提是扫描周期不大于250ms; 方法二: ldb<= 1,vb150 eu 这个方法,前提是扫描周期不大于500ms 如果扫描周期不保证小于500ms,那要在中断中加一句了: ..... movb 0,vb150 s m0.0,1 2、如何获得这一秒钟的脉冲数? 以HC0为例,设VD2504为HC0的辅助记忆变量,方法一感知新值: ldb= 0,vb150 eu movd vd3504,ac0 -d vd2504,ac0 movd vd3504,vd2504 AC0中存放的,就是最近1S钟的脉冲数。 那个HSC就不必清0重启了。 |