0 引言
传统的数控系统是一种专用的、封闭体系结构的CNC系统。各数控厂家出于商业利益的需要,在数控系统的设计上形成各自独立的标准和体系,造成数控系统硬件平台的专用性,软件结构的不可移植性。这种封闭型和单一性严重影响了数控技术的发展和普及。嵌入式设备及其操作系统的出现,有利于打破现有数控系统的封闭性,形成开放式数控
系统设计模式。嵌入式系统的种类有很多,应用较广的有Windows CE、Linux等。WinCE 是一种为多种嵌入式系统和产品设计的紧凑、高效、可升级的操作系统。WinCE 采用标准模式,其最主要的特征是为有限的硬件资源提供了多线程、多任务和完全优先级的计算环境 [1]。本文探讨了在Windows CE系统下,如何开发高效稳定的嵌入式数控系统。
1 Windows CE系统内核的定制
嵌入式系统上应用软件的开发离不开底层系统的支持,Windows CE 系统下应用程序架构如图1 所示。
图1 Windows CE系统下应用程序架构
由于应用环境的多样性,需要对Windows CE 系统做不同的内核定制。可采用微软公司的Platform. Builder 集成开发环境,针对数控加工应用的特点,添加、删除和修改某些系统模块,包括添加串口通信支持,FAT 文件支持(以支持U 盘快速传送G 代码文件),ActiveSync 支持(与PC 宿主机的通信支持)等。此外,还应将注册表模式修改为HIVE 模式,以备掉电后将数据存放到FLASH 中保存。
2 嵌入式数控系统软件结构
采用模块化设计有助于构建清晰的程序框架,提高协同开发能力和编程效率,增强代码的复用率。嵌入式数控系统软件模块划分如图2所示。
图2 上/下位机软件模块划分
数控系统使用者首先在PC 机上完成零件模型建立和编辑,生成加工代码文件。然后将NC 代码文件传输至嵌入式数控平台。在嵌入式平台上完成对NC 代码的数据挖掘,提取数控加工信息并传送至下位机处理器。下位控制器利用其高速运算的能力,完成插补运算和伺服电机控制。
Windows CE 系统在上位机运行。Windows CE 系统非强实时性系统,因此实时性要求较高的任务(如刀补运算,插补运算),均放在下位机运行。而像人机交互这种实时性要求不高,但事件机制较复杂的任务,则放在上位机实现,以Windows CE 系统的内核支持来降低交互式操作开发的难度。
3 主要功能模块及其关键实现技术
3.1 人机界面模块
人机界面模块是用户与数控加工平台交互的接口。人机界面包括如下操作:加工代码的编辑和保存;各种系统参数的设定;加工过程的同步动态仿真;获取数控设备的位置,速度,故障信息,反馈给用户;文件操作等。
Windows CE出于精简内核的需要,对传统的WIN32 图形库改动较大,较多图形类API被移除。在实际开发中为满足图形显示需要,需要自写绘图函数。数控仿真用到的绘图函数主要有:曲线绘图类(圆弧,抛物线绘制)、绘图区动态缩放、图形的保存与重绘。可将以上函数通过测试后封装成库,在主程序中调用。
3.2 加工指令编译模块
数控加工指令主要是由完成各种准备功能的G 代码和辅助功能的M 代码组成。译码器的作用是读入已编辑好的数控代码,对指令进行词法和语法检查,提取刀位特征,生成刀位文件,最终转换为驱动加工模型运动的数据。译码的方式可分为两类:解释模式和编译模式。
解释模式:将G 代码分割为若干小段,每段包括3-4行。以段为单位,解释完本段G代码后,随即调用刀具补偿模块,完成刀具补偿。之后把这段经过处理的代码发送下位机,进行插补控制。解释模式具有简单、易行的特点,能够方便地在加工过程中动态插入指定代码。其不足之处在于译码效率较低,代码的串行发送又极大地限制了加工效率,而且人为地分割G 代码也破坏了代码原有的统一性。
编译模式:预先对整个G代码文件进行编译,生成临时代码文件。之后将整个代码文件发送到下位机。在下位机上调用刀具补偿模块,对代码进行刀具补偿。编译模式能够较好地解决固定循环指令,子程序以及各种跳转指令的问题,维护代码自身的统一性[2]。由于是统一编译,统一执行,加工效率也比解释模式高,故译码器的设计上采用编译模式。译码器的编译流程如图3 所示。
(1)词法分析:扫描NC 程序,判别是否有不可识别字符。如果有,则给出错误信息。
图 3 译码器编译流程图
(2)语法分析:规则与匹配的问题。针对数控程序特点,检查输入代码合理性。若检查出错误组合,则给出错误信息。若检查出无效组合,则设定其无效。例如:F 指令只对G01,G02,G03有效,对G00 无效。
(3)语义分析和译码:设计一个加工信息类CDrawInfo,用于保存译码得到的数据。为了保存整个代码信息,还需要设计一个链表类CListInfo。CDrawInfo 类的设计如下:
class CDrawInfo: public CObject{
public:
CDrawInfo();
virtual ~CDrawInfo();
UINT m_SerialNum; //加工序号
CPoint m_ptPrev; //前一点坐标
CPoint m_ptNext; //后一点坐标
CPoint m_ptCenter; //圆心坐标
UINT m_gcodeFun; //G 代码类型
CDrawInfo& perator=(CDrawInfo&); //赋值运算符重载
};
译码程序执行时,首先建立一个CDrawInfo 类的临时对象drawtemp。而后逐行提取代码的数据信息,并将其赋值到drawtemp 对象中。本行读取完毕,再把drawtemp保存到链表CListInfo。CListInfo 的声明如下:
CList listinfo;
如此循环操作,直至所有的NC代码都被提取出来并添加到链表listinfo中。
3.2 刀具补偿模块
单纯经过译码处理之后的加工代码,并不能直接用作插补加工,还需要经过刀具补偿计算。刀具补偿包括刀具长度补偿和刀具半径补偿。刀具长度补偿是为了使刀具顶端到达编程位置而进行的刀具位置补偿。刀具半径补偿是因为数控加工代码通常是按照刀具中心轨迹编辑的,但在实际加工中参与切削的是刀具的外缘,为此需要补偿一个半径值。
3.3 插补模块
无论选用哪种控制芯片做插补器,插补的原理都是相同的。为满足实时、动态输出控制脉冲的需要,一般都是利用硬件定时器做定时中断,中断后即输出控制脉冲。通过修改定时寄存器数值,即可改变输出脉冲频率,实现转速控制。再通过对输出脉冲个数的计数,实现位移控制[3]。以椭圆插补为例,采用逐点比较插补法。该方法的核心是通过逐点地比较刀具与所需插补曲线的相对位置,确定刀具的坐标进给方向,从而加工出零件的轮廓[4]。插补循环包括如下四步:偏差判别、进给、新偏差计算和终点判别。
其中,r、t 为开关变量。r 为正负进给量判断,只取1 或-1 值;t 为进给与否判断,只取0或1。对于不同象限,进给方向及进给轴的选取都不一样。通过设定进给开关量,即可控制插补点位置。单一象限内插补运算较容易实现。对于多象限插补,需要在过象限时做特殊处理。相应的算法处理如下:
(1)判断起始点、终止点所在象限。
(2)结合转向(顺/逆时针),规划进给路径,即穿越象限编号。
(3)结合路径中的象限编号,逐象限插补运算。
程序实现部分源代码如下:
//路径规划函数
bool CrossQuadrant(int quad_bgn, int quad_end, int direction, int x_s, int y_s, int x_e, int y_e,
int* pCrossQuad){
int CrossPart[5]; //穿越象限编号数组
…………
for(i=0;i<5;i++){ //初始化为-1
CrossPart[i]= -1; }
nCurPart= quad_bgn; //起始象限编号
if(nCurPart== quad_end){ //起始点、终止点在同一象限
if((nCurPart==0) || (nCurPart==2)){ //若在第1,3象限
if(fSlope_bgn>fSlope_end){ //斜率判断
if(direction== ClkWs){ //这种情况下,只走过本象限
blnCross= FALSE; //置标志位
}}}
……..
else{ //起始点在不同象限
do{
j++;
if(direction== ClkWs){ //顺时针
nCurPart--;}
else{ //逆时针
nCurPart++; }
if(nCurPart <0){ //若前一象限为第一象限,且顺时针转
nCurPart=3; } //则后一象限换为第四象限
if(nCurPart >3){ //若前一象限为第四象限,且逆时针转
nCurPart=0; } //则后一象限换为第一象限
CrossPart[j]= nCurPart;
}while(nCurPart!= quad_end); }}
4 小结
本文介绍的嵌入式数控软件已成功应用于数控玻璃雕刻机系统中,现场生产试验表明,系统运行效果良好。Windows CE嵌入式操作系统的出现为数控系统的应用开辟了新的领域,但由此也带来了软件开发上的复杂性。在嵌入式数控系统软件的开发过程中,必须针对数控加工的特点,对Windows CE 系统内核进行裁减定制,同时结合嵌入式硬件的具体情况,对代码进行合理优化,减少内存开支和不合理的CPU 占用,完成在嵌入式硬件上的编程。本论文在数控软件结构的合理构建以及开发的关键实现技术上做了有益的探讨。
本文作者创新点:在对数控平台应用进行Windows CE 系统定制的基础上,提出了嵌入式数控开发的软件架构。并对传统插补算法加以改进,解决插补数据过象限突变问题。本系统已成功应用于作者所在数控实验室的玻璃雕刻机中。与传统雕刻系统相比,本系统能节省设备成本30%-40%,加工时间缩短20%左右,已累计产生经济效益数十万元。