s7-200高速计数器计数值的问题
cpU226 CN 的PLC 程序如下:
LD SM.0.1
MOVB 16#C8, SMB37
HDEF 0, 0
MOVD 0, SMD38
HSC 0
LD M0.0
EU
MOVB 16#C8 ,SMB37
MOVD 0, SMD38
HSC 0
LDD> HC0 ,20
= M.0.0
LD SM0.0
MOVD HC0, MD4
程序下载到PLC(cpU226 CN 的PLC )后,在I0.0上加上脉冲信号,监控程序,I0.0上每产生一个脉冲,发现HC0的计数值增加的很乱,而不是每个脉冲信号加一,一个脉冲信号,计数值有时加一,有时加3,有时加7等,原因与解决方法。
解答:因为高速计数器的性能太高了。就连一点点的输入抖动都记得清清楚楚。你把0.0接通一下,其实已经接通断开接通断开了3次7次了。
开始时是手动加的脉冲信号,后来用接近开关输入脉冲,计数正常了。
监控程序,I0.0上每产生一个脉冲,发现HC0的计数值增加的很乱,而不是每个脉冲信号加一,一个脉冲信号,计数值有时加一,有时加3,有时加7。
答:楼上的程序编写错误!不提倡用M区,因为M区是辅助寄存器,采用V区,数据寄存器。你应该多看几遍S7-200系统手册理解更清楚些。
LD SM.0.1 编写错误,应该改为SM0.0,sm0.1是初始化脉冲,调用子程序用。
MOVB 16#C8, SMB37
HDEF 0, 0
MOVD 0, SMD38
HSC 0
LD M0.0
EU
MOVB 16#C8 ,SMB37
MOVD 0, SMD38
HSC 0
LDD> HC0 ,20
LD SM0.0
MOVD HC0, MD4
建议用向导做,是计数到了20就接通M0.0了,再启动计数器这个不能实现.
编写程序如下:
主程序:
网络1
LD SM0.1
CALL HSC_INIT:SBR1
网络2 直接监控VD0,这个就是计数器的数值.
LD SM0.0
MOVD HC0, VD0
网络3 比较指令的用法
LDD>= VD0, 20
= M0.0
子程序:
LD SM0.0
MOVB 16#F8,SMB37 //设置控制位:增计数;已使能;
MOVD +0,SMD38 //装载 CV
MOVD +0,SMD42 //装载 PV
HDEF 0, 0
ENI
HSC 0