200 PLC,转速程序怎么写啊?

1       有人说采用编码器,但是编码器的转速最高才1500RPM,我要测量的轴的转速至少是4000多转,编码器的速度根本跟不上啊?
2       这个程序如何写啊?请详细的说明提纲就可以了。
谢谢

最佳答案

首先是检测机构,可以使用高速接近开关取信号,也就是转一圈接近开关输出一个脉冲信号
编程就是使用高速计数器和定时中断,定时中断设定时间100ms,在中断程序里累计10次,取得高数计数器的实际值,就是每秒的转速了,然后清定时的累计值,复位高速计数器的初始值,进行下一秒的计数。

刚好昨天做了个测试程序,脉冲信号输入到I0.0

ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 
LD     SM0.1
CALL   SBR1
Network 2 
LD     SM0.1
CALL   SBR0
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1 
LD     SM0.0
MOVW   0, VW100
Network 2 
LD     SM0.0
MOVB   100, SMB34
ATCH   INT0, 10
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK HSC_INIT:SBR1
TITLE=
BEGIN
Network 1 
LD     SM0.0
MOVB   16#F8, SMB37
MOVD   +0, SMD38
MOVD   +0, SMD42
HDEF   0, 0
ENI
HSC    0
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 
LD     SM0.0
+I     1, VW100
Network 2 
LDW>=  VW100, VW102
MOVD   HC0, VD104
MOVD   0, SMD38
HSC    0
MOVW   0, VW100
Network 3 
END_INTERRUPT_BLOCK

SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1 
LD     SM0.0
MOVW   0, VW100
Network 2 // 网络标题
// 网络注释
LD     SM0.0
MOVB   100, SMB34
ATCH   INT0, 10
END_SUBROUTINE_BLOCK

SUBROUTINE_BLOCK HSC_INIT:SBR1
TITLE=
BEGIN
Network 1 // HSC 指令向导
// 要在程序中使用此配置,请在主程序块中使用 SM0.1 或一条沿触发指令调用一次此子程序。
// 配置 HC0 为模式 0;CV = 0; PV = 0;增计数;
// 开放中断和启动计数器。
// 
LD     SM0.0
MOVB   16#F8, SMB37                //设置控制位:增计数;已使能;
MOVD   +0, SMD38                   //装载 CV
MOVD   +0, SMD42                   //装载 PV
HDEF   0, 0
ENI
HSC    0
END_SUBROUTINE_BLOCK


INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题

LD     SM0.0
+I     1, VW100          //定时累计
Network 2 
LDW>=  VW100, VW102      //VW102=10, 10*100ms=1S
MOVD   HC0, VD104            //VD104为累计时间的脉冲数
MOVD   0, SMD38       
HSC    0
MOVW   0, VW100  
Network 3 
END_INTERRUPT_BLOCK

提问者对于答案的评价:
多谢大哥,等几天我找个马达再验证一下。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月31日 下午3:51
下一篇 2020年10月31日 下午3:51

相关推荐