固高运动控制卡学习3 --前瞻预处理

        在数控加工等应用中,要求数控系统对机床进行平滑的控制,以防止较大的冲击影响零件的加工质量。运动控制器的前瞻预处理功能可以根据用户的运动路径计算出平滑的速度规划,减少机床的冲击,从而提高加工精度。

固高运动控制卡学习3 --前瞻预处理_第1张图片        

        需求分析:如果按照图  (b)所示的速度规划,即在拐角处不减速,则加工精度一定会较低,而且可能在拐弯时对刀具和零件造成较大冲击。如果按照图  (c)所示的速度规划,即在拐角处减速为 0,可以最大限度保证加工精度,但加工速度就会慢下来。如果按照图(d)所示的速度规划,在拐角处将速度减到一个合理值,既可以满足加工精度又能提高加工速度,就是一个好的速度规划。

        为了实现类似图  (d)所示的好的速度规划,前瞻预处理模块不仅要知道当前运动的位置参数,还要提前知道后面若干段运动的位置参数,这就是所谓的前瞻。例如在对图 (a)中的轨迹做前瞻预处理时,我们设定控制器预先读取 50 段运动轨迹到缓存区中,则它会自动分析出在第 30段将会出现拐点,并依据用户设定的拐弯时间计算在拐弯处的终点速度。前瞻预处理模块也会依照用户设定最大加速度值计算速度规划,使任何加减速过程都不会超过这个值,防止对机械部分产生破坏性冲击力。 

        例:假设机床加工过程中,需要走一长直线,该直线由 300 条小直线段组成,现对这段路径进行前瞻预处理。其轨迹如图所示。红色线段为起始轨迹。

固高运动控制卡学习3 --前瞻预处理_第2张图片

// 定义前瞻缓存区内存区
TCrdData crdData[200];
long posTest[2];
long space;
// 初始化坐标系1的FIFO0的前瞻模块
sRtn = GT_InitLookAhead(1, 0, 5, 1, 200, crdData);
// 压插补数据:小线段加工
posTest[0] = 0;
posTest[1] = 0;
for(i=0;i<300;++i)
{
sRtn = GT_LnXY(1, 8000+posTest[0], 9000+posTest[1], 100, 0.8, 0, 0);
// 查询返回值是否成功
if(0 != sRtn)
{
    do
    {
    // 查询运动缓存区空间,直至空间不为0
    sRtn = GT_CrdSpace(1, &space, 0);
    }while(0 == space);
    // 重新调用上次失败的插补指令
    sRtn = GT_LnXY(1, 8000+posTest[0], 9000+posTest[1], 100, 0.8, 0, 0);
}
posTest[0] += 1600;
posTest[1] += 1852;
}
// 将前瞻缓存区中的数据压入控制器
sRtn = GT_CrdData(1, NULL, 0);
// 启动运动
sRtn = GT_CrdStart(1, 0);
......

注:当运动规划使用前瞻预处理功能,整个插补的流程没有发生大的变化。

(1)针对相应的坐标系添加相应的FIFO0的前瞻模块。  --GT_InitLookAhead

(2)调用如 GT_LnXY 等直线插补指令和圆弧插补指令将数据段输入缓存区。

         插入的数据会先进入前瞻缓存区,前瞻缓冲区溢出的数据将会被压入运动缓存区。
         当前瞻缓存区和运动缓存区都被压满时,继续调用插补指令会出现失败。此时需要调用 GT_CrdSpace 查询运动缓存区的空间,只有当查询到当前运动缓存区有空间时,才能继续调用插补指令压入剩下的数据。

(3)用户需要调用 GT_CrdData(1, NULL, 0)来将前瞻缓存区数据压入运动缓存区。便可以启动插补运动GT_CrdStart(1, 0)

你可能感兴趣的:(运动控制卡)