发布于 2011-04-07 11:52:04
2楼
用的是Q0.0接步进驱动器的脉冲输入信号,Q0.2接步进驱动器的方向控制信号,当按下启动按钮后,Q0.0发送40000个脉冲,步进电机转动正传40转,然后停在该处不动,反转按钮不能随意按下,当需要停止系统的时候,按下停止按钮,接到停止信号后,Q0.0又发送40000个脉冲同时Q0.2置位,步进电机开始反转40转,到原位停止。现在正反转没有问题,脉冲也能发送,但是下载到PLC后,第一次正反转都能按设定的脉冲数发,计时了一下都是40s。但多试几次起停以后,正反转发完脉冲,有的是80s,有的是40s,就乱了。
程序如下:
NETWORK1
LD First_Scan_On:SM0.1 // 仅首次扫描周期SM0.1置位(SM0.1=1)
R Q0.0, 1 //首次扫描复位输出为0
MOVW 1000, PLS0_Cycle:SMW68 // 输出脉冲周期为1000微秒
MOVD 40000, PTO0_PC:SMD72 // 输出40000个脉冲
MOVW +0, PWM0_PW:SMW70 // 脉宽为0(脉宽调制)
ATCH INT_0:INT0, 19 // 把中断程序0分配给中断事件19
PLS0 // 脉冲输出结束
ENI // 允许中断
NETWORK2
LD 电机启动按钮:I0.2 // 若按"START"(起动)按钮
EU // 上升沿
MOVB 16#85, PLS0_Ctrl:SMB67 // 置脉冲输出功能的控制位
PLS 0 //起动脉冲输出(Q0.0)
R Q0.2,1 // 正转
NETWORK3
LD 电机停止按钮:I0.3 // 若按"STOP"(停止)按钮,
EU // 上升沿
MOVD 40000, PTO0_PC:SMD72 // 输出40000个脉冲
MOVB 16#85, PLS0_Ctrl:SMB67 // 置脉冲输出功能的控制位
ATCH INT_1:INT1, 19 // 把中断程序1分配给中断事件19
PLS 0 // 起动脉冲输出(Q0.0)
S Q0.2, 1 //反转
INT 0
Network 1
LD SM0.0
MOVD 0, SMD72
INT 1
Network 1
LD SM0.0
MOVD 0, SMD72
MOVD 40000, SMD72
我的思路:启动时,电机正转一次完成后,把脉冲个数清零,停止时,把40000赋给脉冲个数,完成后再清零,再把40000赋给脉冲个数,等待下次启动。如此往复循环。
本人第一次用步进电机,望高手指点,不胜感激。