数控系统手轮回退功能的研究与实现*
2019-11-27樊晨飞叶佩青
宋 嘎,樊晨飞,叶佩青,
(1.山东职业学院 叶佩青专家工作室,济南 250104;2.清华大学 机械工程系,北京 100084)
0 引言
在数控机床调试及加工过程中,难免会遇到机床故障、刀具损坏或磨损、工件存在缺陷、加工参数不合适等情况,导致加工被迫中止,刀具需要沿原轨迹退出正在加工的工件表面,这就要求数控系统具备沿已加工轨迹回退功能,通常采用手轮操作回退;另外,在某些调试场合,操作人员采用手轮模拟程序前向、后退执行,以简单检测程序错误[1-4]。FANUC 30i、Sinumerik 840D、Miyano ABX51/64等国际领先的数控系统均能在自动加工过程中,无需执行完当前程序段,随时切换到手轮模拟模式,操作手轮从当前位置立即回退。上述数控系统的手轮回退功能类似,只是对于M、S、T等辅助功能指令的处理方式有所不同。国内数控系统大多也具备手轮回退功能,但对其实现机理的介绍比较少。手轮回退功能的实现存在两个方面的问题,一是对已加工的刀具轨迹数据进行高效存储和提取,二是对手轮回退的速度和方向进行控制。对于刀具轨迹的存储,常伟杰[5]提出了在超声振动辅助电火花铣削加工中采用嵌套存储的方式;陈智殷[6]在电加工专用数控系统中采用环形链表结构,其首末相连,没有哨兵节点;刘勇等[7]在三维微细电解铣削加工中采用双向链表结构,其具有头、尾两个哨兵节点。根据不同数控系统加工要求的差别,研究人员主要采用以下两种方法进行刀具轨迹的回退,即按原加工轨迹回退[8],以及胡明华、张斌[9-10]提出的,应用于切割机的任意路径无限回退。
本文基于DSP开发的数控系统,完整阐述手轮回退功能的实现方案,对手轮回退在系统中的实现流程设计、轨迹存储链表的设计、轨迹存储队列的实现、手轮速度控制、手轮方向控制等进行重点研究,实现任意位置手轮沿刀具原轨迹的回退。最后,在QT软件仿真环境和CCS硬件开发平台上验证该方案的有效性。
1 加工程序段轨迹回退
手轮回退功能在某国产数控系统上进行开发,该数控系统采用 ARM+DSP的双核结构。其中,ARM 中的Linux系统为非实时部分,包括界面模块、编译模块、通讯模块;DSP为实时操作部分,包括 PLC实时模块、运动控制模块、板卡控制模块。本文研究内容为在运动控制模块中的手轮模拟子模块中增加手轮回退功能,实现任意位置刀具轨迹的回退。主要依托于加工程序段轨迹的存储和回退,程序段存储在双向链表中,通过访问其接口实现回退。
1.1 轨迹回退的流程设计
为了实现轨迹回退功能,在原有运动控制流程中,预先分配了一定的存储空间,用于存储已执行过的程序段,使数控系统支持程序段轨迹回退功能,轨迹回退段数由存储空间决定,其被称为轨迹存储队列,具体见图1。
图1 支持轨迹回退的运动控制流程
支持轨迹回退的运动控制流程需要利用轨迹存储队列动态存储已规划轨迹程序段并可以实现轨迹的反向插补。系统自动运行时,在进行插补前,首先判断轨迹方向是前进或者后退,再判断当前程序段是否已执行完。当前程序段执行完成时,需要读取新的程序段,此时新程序段有两个来源,一个是规划缓冲区,一个是轨迹存储队列。如果是前进方向,在前进到程序段终点时同时也到达轨迹存储队列队尾(轨迹存储队列中最大存储位置),则从规划缓存区中读取下一个程序段,将其存入轨迹存储队列队尾,同时移除轨迹存储队列队首存储的程序段;否则,直接将指针移向轨迹存储队列中存储的后一个程序段。如果是后退方向,在后退到程序段起点时,如果同时也到达轨迹存储队列队首,即达到轨迹存储队列规定的最大队列容量,则不再移动指针,也就是说轨迹段回退结束;否则,直接将指针移向队列中存储的前一个程序段。轨迹存储队列运行流程见图2。
图2 轨迹存储队列运行流程
1.2 轨迹存储链表的设计
轨迹的存储和回退需要进行如下操作:一是将从规划缓冲区中取出的程序段存入到当前数据结构,同时需要进行程序段序列的整体前移,包括节点插入、删除操作;二是按照顺序或逆序,依次地访问已经存储的程序段,并将其输出给插补模块,即节点的顺序访问。链表属于动态存储,即逻辑上相邻的节点由指针互相引用,但物理地址可以任意。链表的动态存储方式决定了它随机访问节点的低效,和插入、删除节点的高效。因此,对于轨迹存储和回退,使用链表效率较高。
基于双向链表设计了轨迹存储的数据结构——队列。运动控制模块读取新的程序段,就是从规划缓冲区中出队,然后插入到轨迹存储队列的队尾。与此同时,为了避免占用系统过大的内存空间,轨迹存储队列的容量是固定的,所以队首的程序段需要被丢弃并释放掉空间。在已经加工过并存储的程序段之间重新加工时,需要指针前后移动,以访问不同位置的程序段。再考虑到加工过程的开始和结束,轨迹存储队列需要具备初始化、入队、出队、指针操作和销毁5个接口[11]。假设队列容量为NUM,最远加工位置为M,指针当前指向位置为n,轨迹存储队列的接口具体见图3。
图3 轨迹存储队列的接口
1.3 轨迹存储链表的实现
在双向链表实现的队列中,每个节点都是一个结构体,每个结构体包括数据域和直接前驱、直接后继两个指针。数据域本身也是一个结构体,包括程序段号、G 代码、起点坐标、终点坐标、进给速度等,已经在数控系统原有程序中封装好。每个节点的直接前驱、直接后继指向的,是其前一个或后一个节点的地址。在程序中,可以不断地用一个活动的指针引用当前节点的直接前驱或直接后继,来访问与其相邻的节点,从而能够自由地向前或向后遍历整个队列。M、S、T等模态指令以及G04延时指令等非轨迹程序段不入队,需要进行特殊处理。
在数控系统中,圆弧半径、进给速度等加工参数并不属于单个坐标点,而是属于单个程序段。因此,每当当前点的坐标与当前指针所指向的节点中数据域结构体内的“起点”或“终点”坐标点重合,则向前或向后移动指针,以访问相邻的节点。轨迹存储队列结构如图4所示。队列结构中,都有头(header)和 尾(trailer)两个特殊的节点。它们没有数据域,称为哨兵节点,在程序中是必需的组成部分。首(first)节点是头节点的直接后继,是轨迹回退能够到达的最后位置;末(last)节点是尾节点的直接前驱,是目前已经加工的最新程序段。
图4 轨迹存储队列结构
1.4 特殊处理
(1)圆弧等曲线插补方向的特殊处理
在轨迹回退的过程中,如果遇到圆弧段、参数曲线段,将当前段信息取出后,在返回给插补模块之前需要对调插补方向,以便进行反向插补。比如,对于圆弧加工的回退,需要将程序段结构体中储存的 G02 与 G03 对调,以颠倒顺逆方向;更改顺逆方向的操作是将当前程序段信息取出并存入到临时的程序段结构体内,然后在临时结构体内更改插补方向并最终返回给插补模块。其他曲线插补方向的处理思路与之类似。
(2)非轨迹程序段的特殊处理
非轨迹程序段主要包括 M、S、T等模态指令和G04 延时指令等,这些指令不涉及加工的轨迹规划,无需储存在轨迹程序段的队列中。需要注意的是,M、S、T等模态指令不进入插补,但必须读取,并通知PLC实时模块执行,从而能够响应程序暂停、启动、复位等事件。在具体的程序实现过程中,在读缓存区之后首先判断该程序段是否包含M、S、T 等模态指令或 G04 延时指令,此类指令不存储在轨迹程序段队列中。还需要注意加工的首个程序段是非轨迹程序段的情况,为防止回退到首个程序段时出错,需要在初始化时将该程序段信息改为起终点重合,且 M、S、T 等模态指令及G04不存在的空轨迹段。
2 手轮回退功能
数控系统自动运行过程中,按下“手轮模拟”按键,反转手轮即可实现刀具沿原轨迹回退,回退速度由手轮操作速度决定,因此手轮回退是在程序段轨迹回退功能基础上,用手轮速度取代程序指令速度实现的。手轮回退时需要确定刀具沿指定程序段回退的速度和方向。
2.1 速度控制
本文提出采用“分时采集、延后输出”的方法来保证手轮输入不确定的情况下输出脉冲速度的连续。首先根据固定周期内采集到的手轮实际位置,计算出周期手轮增量△Pn,并限制手轮最大速度;然后根据前一个周期的手轮增量△Pn-1和本周期手轮增量△Pn进行速度规划,最终得到输出位置X(t)关于时间t的函数。脉冲输出模块根据该速度规划的结果进行位置离散和脉冲输出,具体流程见图5。
图5 手轮速度规划流程
2.2 方向控制
对于本数控系统,只有系统状态为“空闲”,即有必要重新进行轨迹规划的情况下,才进入图2所示的运动控制流程,否则不进入该流程,也就无法及时在该流程中改变加工方向。如果需要在反转手轮时立即改变加工方向,可以利用系统进入“空闲”状态的前提条件中的“其他需要重新进行轨迹规划的情况”。因此需在图2基础上增加一个判断分支,如果程序读取到手轮转向与上一次不同,则进入增加的分支,将系统状态置为“空闲”,加工方向可在程序的下一个运行周期(1 ms)后立即改变。
3 实验验证
3.1 程序段轨迹回退仿真
在Qt 5.10.1软件仿真环境中对程序段轨迹回退的C语言程序进行测试验证。软件仿真环境测试时进行了以下简化:对一维程序段进行测试,且只保留了起点和终点两个变量;读规划缓冲区函数简化为:当前程序段终点坐标为b,则下一程序段起点坐标为b,终点坐标为(b+1)或(b+2),由系统随机确定;插补函数简化为:如果当前插补起点小于插补终点,则下一个插补点为当前点+0.5,反之则为当前点-0.5;队列容量设定为5;系统定时器设定每500ms 执行一次轨迹规划及插补流程。测试程序可以实现前进、暂停、后退、复位、保存仿真结果等操作。将仿真结果保存到文本中,并将前50行数据进行整理,具体见图6。AB和DE段为正向插补过程,BC和EF段为反向回退过程,CD段表明轨迹回退超过最大回退段数时,不再回退。经过多次仿真测试及结果分析,一维程序段轨迹回退的软件仿真结果与理论值相吻合,可以进一步移植到硬件开发环境中。
图6 一维程序段轨迹回退
3.2 实际测试
在软件仿真的基础上,使用自主研发的国产数控系统对手轮回退功能进行实际测试。例如,在精加工图7所示的零件时,当程序执行到N70程序段(见图8)时,机床出现液压故障,刀具需要立刻返回安全位置并进行故障排除。内孔车刀在工件的内部,刀具退回的空间较小。采用人工手动回退,若操作失误将导致刀具和工具相撞。此时,可按下“手轮模拟”按键并反转手轮,刀具会首先沿着N70程序段已加工的轨迹回退,N70程序段回退结束后接着按照N60指定的轨迹回退,最后回退至安全位置(见图7)。图9为利用NI采集卡采集的系统沿N70程序段回退时的速度控制曲线,曲线1为手轮转动速度曲线,曲线2为经过速度规划后的进给轴输出速度控制曲线,结果显示,进给轴输出速度Vf能较好地响应手轮转动速度Vh,并且在Vh变化较大的情况下Vf能保持较好的连续性。综合测试结果表明,系统能够实现任意坐标点处的暂停、回退、再启动、再前进等一系列操作,不偏离程序设定的加工路径,且能保证手轮输入不确定的情况下进给轴输出速度的连续。
图7 待加工零件回退路线
图8 手轮回退案例
图9 手轮速度控制曲线
4 结束语
基于某国产数控系统已经具备的手轮正向控制程序执行功能,开发了手轮双向控制程序执行功能,即“手轮模拟”模式下的加工轨迹回退,实现了在任意位置反转手轮时加工方向立即反转,且不偏离程序设定的加工路径。经过实验验证以及企业车间的实际测试,结果表明已正确实现手轮回退功能。