1:PLC是224XP,利用I0.0上升沿触发中断进行计数,
//初始化程序
LD SM0.1
ATCH INT-0,0
ENI
2.在中断程序中,进行定时和计数,INT-0程序如下:
LD SM0.0
INCD VD0 //当前计数器VD0
TON T32,32767 //当前定时器T32
LDW> T32,300
MOVD VD0,VD4 //读出当前计数值到VD4
MOW T32,VW8 //读出当前定时器的值到VW8
MOVD 0,VD0 //VD0计数器清零
R T32,1 //T32定时器复位
3.问题:当程序运行时,每次读到的当前的计数值比定时器的最大值大1(VD4=VD0max+1,当VD0max=4时,VD4=5;VD0max=6时,VD4=7)
请问这是什么原因或问题在哪?请各位老师指点.谢谢.
问题补充:
1.我之前在做其它定时器,遇到也发现了此问题,是可以预设大的定时值;
2.我此程序的目的,是在此定时范围内,得到I0.0的脉冲个数,读到的计数个数,始终比当前计数个数多一个,这样计数出来的频率时,就会比原来的大,我用信号发生做过好多边测试,现在我在算频率时,人为减掉一,得到的频率正好吻合信号发生器的频率值.
最佳答案
1毫秒分辨率:
因为可在1毫秒内的任意时刻启动定时器,预设值必须设为比最小要求定时器间隔大一个时间间隔。例如,使用1毫秒定时器时,为了保证时间间隔至少为56毫秒,则预设时间值应设为57。
提问者对于答案的评价:
1.谢谢LiaoHuai.问题找到了.
2.工控少年:我按你的方法,在I0.0的上升沿来读高速计数,不成功.
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc348286.html