传统的梯形加减速方法需预先确定出加速区、匀速区及减速区等各区段的运动位移量,但是,在实际插值时由于给定的进给偌率,以及NC代码段间速度的变化,这些位移量往往不能事先精确给出。本书给出一种适合于Open-CNC系统的加减速算法,这种方法的核心思想是在每个插值周期中,系统均实时刷新当前运行速度,并确定当前NC代码段中余下的待运行位移量Lift,就可确定本插值周期的插值步长LT。这种方法在软件化数控系统中能极大地简化运算过程,提高系统运行效率。后文进行的加工实验证明了本方法的可行性和正确性。具体的实现方法及过程如下:
首先从数据内存区取出本段NC代码的命令速度Vcom、当前速度Vcur、终点速度Vend及加速度值a,判断当前的加减速状态,若为Send,表明插值已完成,则令插值步长LT=0,VneW=0,然后退出加减速过程。否则,算出NT、Lest等相关值,接下来进行相关处理。
若Lift≤(Vend+aT)T,则说明当前NC代码段在本插值周期内即可运行完,置加减速状态标志为Send,令插值步长LT=Lift。但是在这种状况下,对速度的处理又分为两种情况:
1)Vcur<Vend,说明目前还处于加速状态下,但是没有加速到终点速度Vend,就已经运行到终点Pend了。则为了使段间加减速保持平稳,应使系统在当前插值周期的目标速度VneW=Vcur,而不是VneW=Vend;接下来系统更新VneW,以备下一个NC代码段使用。
2)Vcur≥Vend,系统目前处于匀速或减速状态下,应使当前插值周期的目标速度VneW=Vend。
若Lift>(Vend+aT)T,则说明当前NC代码段还需经过若干个插值周期才可运行完,但是在这种状况下,对速度的处理又可分为三种情况:
1)Vcur≤Vcom,巨Lift≤Lest,则系统处于减速状态,置Sdst(下一个插值周期判断处于相同运动状态的条件为Vcur≤Vcom,巨Sdst),并令VneW=Vcur-aT;另外还要修正一下,若算得VneW<Vend,则使VneW=Vend。接下来计算插值步长:LT=VneWT;为了防止“超程”,即运动到目标点以外,还应校验一下,若LT>Lift,则将Lift赋值给LT,并更新VneW=Lift/T,并置Send。
按以上方法计算插值步长,会遇到一种特殊情况:若插值的是最后一段NC代码,即Vend=0,按以上方法给VneW赋值时,会出现VneW=0的情况,则算得的插值步长也为0,会产生“失步”现象,即没有运动到目标点就停止不前了。不过,这种现象发生时,会有Lest=0。所以,应当再增加一个判断,当Lift>Lest时,令VneW=Vcur即可。(www.daowen.com)
2)Vcur>Vcom,则为减速运行非最后一段数控代码,置Sdrn,巨令VneW=Vcur-aT;另外还要修正一下,若算得VneW<Vcom,则使VneW=Vcom。同样,插值步长LT=VneWT。
按以上方法计算插值步长,也可能会遇到一种特殊情况:系统已运行到本段NC代码的终点(目标点)Pend,但是速度还没有减到目标速度Vend,此时LT≥Lift。为了在运行下一段NC代码时,系统保持平稳状态,需调整VneW=Lift/T,并重算LT=Lift,此时本段NC代码运行完毕,置Send。
3)若以上两种条件不满足,剩下的状态就是加速了。显然,应该使VneW=Vcur+aT,并置Sacc。当然,还需要判断一下VneW是否已经超过命令速度,若VneW>Vcom,则令VneW=Vcom,并置SeVe。插值步长LT=VneWT。
按以上方法计算插值步长,也可能会到一种特殊情况:系统已运行到本段NC代码的终点(目标点)Pend,但是速度还没有增加到目标速度Vend,此时LT≥Lift。为了运行下一段NC代码时,系统保持平稳状态,需调整VneW=Lift/T,并重算LT=Lift,此时本段NC代码运行完毕,置Send。
以上各步骤结束后均更新保存VneW值及加减速状态S,最后返回LT值。计算过程如图5-5所示(图中斜体宇为注释的内容)。
图5-5 梯形加减速处理过程
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。