今天在调试项目时,使用I0.0来计数,程序如下:
子程序SBR_3:
LD SM0.0
MOVB 16#C8, SMB37
HDEF 0, 0
MOVD 0, SMD38
HSC 0
主程序:
网络1
LD SM0.1
CALL SBR_3:SBR3
网络10
LD SM0.0
MOVD HC0, VD550
AENO
DTR VD550, 计数实数:VD554
AENO
MOVR 计数实数:VD554, 实际米数:VD504
*R 一圈多少米:VD560, 实际米数:VD504
网络11
LDD>= 实际米数:VD504, 设定米数:VD500
EU
S 计米到:M14.1, 1
网络12
LD 记米清零:M13.6
EU
MOVB 16#C0, SMB37
MOVD +0, SMD38
HSC 0
MOVD 0, 实际米数:VD504
R 计米到:M14.1, 1
用来实现对I0.0的计数,用来测算米数,输入为一个接近开关信号。程序很简单,选的模式0,带内部方向控制的单向计数器。
由于接近开关还没有到,我就拿一根导线戳了一下输入点来模拟,接近开关感应到一次。这时就出现问题了,读到的计数器值根本就不稳定,一会43或50的加着计数。
调试时间比较紧,等着出货,赶紧打开《S7-200系统手册》,看了一下示例程序和对这一块的介绍。感觉程序应该没问题。
然后我就想可能是戳的时候有抖动,就拿一个常开按钮接到I0.0上来计数,可按钮按一下计数还是不准,一会+5或7或8.虽然输入点的灯就闪了1次。
这下没辙了,把程序改为普通计数器计数,计数是正常的。算了一下输入点工作时的频率,感觉可能会有误差,没办法还得要用高速计数器啊。
不甘心,跑到仓库好不容易找了个NPN的接近开关。我设计的时候是准备接PNP的接近开关的。幸好200的输入可以是源型和漏型,就稍微把电路改了改,要不然只有通过中间继电器转了。
在接了接近开关以后,计数就正常了。终于把问题解决可以发货了。
要不是一开始没有接近开关用,还真发现不了这样的问题。仔细的想了想,看来使用按钮时,当按钮按下去和松开的时候,使用高速计数器,可以记录到其已经接通断开了好几次。要不然也不会多记那么多次,可以看出按钮在运用时是有“抖动的”,所以编程时有必要加滤波程序。接近开关则因为其设计原理,则在有信号时是比较稳定的波形输出的。
不知道分析的对不对,请各位侠说说自己的看法。