当前位置: 主页 > PLC控制

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

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

Network2
//数据块初始化
LDSM0.0
MOVB16#1,VB100//发送的内容字符"1"
MOVB16#31,VB101

Network3
//高速计数器初始化
LDSM0.0
MOVB16#F8,SMB37//针对0计数器的控制字节
HDEF0,1//第0个计数器,模式1脉冲方式
MOVD0,SMD38//高速计数器的当前值和设定值
MOVD1,SMD42
ATCHint0,12//申请中断指令12事件为HSC0CV=PV(当前值=预设值)
ENI//允许中断指令
HSC0

INT_0
LDSM0.0
ASM4.5//通讯端口闲置时为1
XMTVB100,0
MOVD0,SMD38//高速计数器的当前值和设定值
MOVD1,SMD42
HSC0//使高速计数器0有效
=Q0.4

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

最佳答案

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

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

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

  • 关注微信

猜你喜欢

微信公众号