This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SpinTac MOVE 的重新规划问题



你好,我想问一下,我用lab 13c,用它的SpinTac Move来做位置闭环控制,例程里面只能先完成一个位置后,到IDLE状态时才能开始下一个位置。并不能打断目前的位置,直接运行新设置的位置;

所以我改了一下例程,添加如下代码:
if(STPOSMOVE_getStatus(stObj->posMoveHandle) == ST_MOVE_BUSY){
STPOSCTL_setEnable(stObj->posCtlHandle, false);
STPOSMOVE_setEnable(stObj->posMoveHandle, false);
STPOSMOVE_setVelocityStart(stObj->posMoveHandle, STPOSCONV_getVelocityFiltered(stObj->posConvHandle));
STPOSMOVE_setPositionStart_mrev(stObj->posMoveHandle, STPOSCONV_getPosition_mrev(stObj->posConvHandle));
}
这样就能直接打断目前正在运行的规划,直接从当前位置开始新的规划,但是这样有个问题,就是电机每次都是速度突降到0,然后从0速开始做规划,我明明已经设置VelStart为当前速度了啊,它应该以当前速度为初速度,来进行规划吧。

我的需求是,能够不停的打断当前的规划,并重新设定目标位置以及速度参数等,这个过程中电机不应该停转,应该是一个连续的过程,请问该怎么解决呢?谢谢!

  • 貌似是没法对cfg.VelStart进行赋值。。我设置了变量观察,发现这个VelStart不管在哪里改,都改不了,读出来还是0; 这样正常吗?
  • if(STPOSMOVE_getStatus(stObj->posMoveHandle) == ST_MOVE_BUSY){
    STPOSCTL_setEnable(stObj->posCtlHandle, false);
    STPOSMOVE_setEnable(stObj->posMoveHandle, false);
    STPOSMOVE_setVelocityStart(stObj->posMoveHandle, STPOSCONV_getVelocityFiltered(stObj->posConvHandle));
    STPOSMOVE_setPositionStart_mrev(stObj->posMoveHandle, STPOSCONV_getPosition_mrev(stObj->posConvHandle));
    }


    请问你这段代码加在程序哪个函数下面?就只在13c下添加了这个几行代码吗?