s7-200高速计数器脉冲模式为什么触发不止一次并且当前值重置但没有复位的效果?

s7-200 高速计数器HC0 输入端I0.0 高电平有效,模式脉冲
SBR_0
TITLE=子程序注释//执行子程序进行自由口和高速计数器的初始化
Network 1 // 网络标题
// 自由口的初始化
LD     SM0.0
MOVB   16#09, SMB30

Network 2 
// 数据块初始化
LD     SM0.0
MOVB   16#1, VB100                 //发送的内容字符"1"
MOVB   16#31, VB101

Network 3 
// 高速计数器初始化
LD     SM0.0
MOVB   16#F8, SMB37                //针对0计数器的控制字节
HDEF   0, 1                        //第0个计数器, 模式1脉冲方式
MOVD   0, SMD38                    //高速计数器的当前值和设定值
MOVD   1, SMD42
ATCH   INT0, 12                    //申请中断指令 12事件为HSC0 CV=PV(当前值=预设值)
ENI                                //允许中断指令
HSC    0

INT_0
LD     SM0.0
A      SM4.5                       //通讯端口闲置时为1
XMT    VB100, 0
MOVD   0, SMD38                    //高速计数器的当前值和设定值
MOVD   1, SMD42
HSC    0                           //使高速计数器0有效
=      Q0.4

我发现用手去闭合输入端,一次输出不止一个"1",脉冲不是从低到高的一瞬间吗?还有闭合几次程序就无输出了,我在中断程序里边重新赋值当前值和设定值的,请高手解答下,谢谢!

最佳答案

你的高速计数器预设值怎么设置为1(SMD42),和当前值怎么是0。
一次人工触发高速输入口,实际上在连接过程中高速计数器已经接受到几个脉冲了。
参考高速计数器初始化程序:
LD     SM0.1
MOVB   16#FC, SMB37
HDEF   0, 9
MOVD   VD100, SMD38
MOVD   16#FFFFFFFF, SMD42
ATCH   长度到达:INT1, 12
ENI
HSC    0

提问者对于答案的评价:
首先谢谢您的回复!我的实际需求是测自行车的速度,有一个干簧管,导通时高电平发送字符"1"代表1圈,所以计数从0到1就可以了,最主要的问题是我在中断12事件里将SMD38重新置为0,为什么实际的效果是运行几次后没有置位呢?

最佳答案作者回复:
换一种思路试试,如自行车旋转一周产生若干个脉冲,你检测一个脉冲可能会出现类似计数器计数不准的问题。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc208148.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月6日
下一篇 2017年11月6日

相关推荐