示例介绍: Set_move_speed(3200, 6400 );//设置插补矢量速度 Set_move_accel( 0.1 ); //设置加速时间 Start_move_xy(0, 6400, 6400 );//进行直线插补 If( Motion_done(0) == 0 || // 可以Wait_for_done,Wait_for_all之类函数 Motion_done(1) == 0 ) {//脉冲在输出时,做其它事情 … do s.th } else {//脉冲输出完毕 … next operator//无法执行到此处 }
原因分析: 原因是库函数故障(BUG), 当第一次运行时,速度寄存器未填入有效数据,具体原因未明。 Set_move_speed 设置多轴运动的矢量速度 Set_move_accel 设置多轴运动的矢量加速时间 Start_move_xy 让指定卡号的第1,2轴以插补方式运动到指定位置 Move_xy 同Start_move_xy,需等待完成 Start_move_zu 让指定卡号的第3,4轴以插补方式运动到指定位置 Move_zu 同Start_move_zu,需等待完成 Arc_xy 让指定卡号的第1,2轴作圆弧运动,需等待完成 Arc_zu 让指定卡号的第3,4轴作圆弧运动,需等待完成
附带检测函数: Wait_for_all 等待指定的多轴并完成 Wait_for_done 等待运动并完成 Motion_done 检测当前运动状态
故障现象: 当程序执行到Motion_done等检测函数时,发现它们无法返回完成的状态,原因不是检测函数的故障。而是X,Y无法取得速度值,进而也无法完成指定的脉冲输出,这就是为什么检测函数返回不了脉冲输出完成的状态。此问题是库函数的小毛病。
解决方法: Start_r_move(0,0,3200,6400,0.1);//驱动X轴,但其输出脉冲为0个,不会损失位置 Start_move_xy(0, 6400, 6400 );//再次驱动,问题解决了。
|