在之前的一个项目中,本人用到了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
/***************************************************************/
感谢斑竹给了我一个精!!呵呵,也希望以后能跟大家在这里多多交流编程、应用的经验