数控加工G代码程序图形点位信息提取算法

2019-09-25 06:08梁子财
科技视界 2019年21期
关键词:算法

梁子财

【摘 要】由于零件结构、加工工艺日益复杂,数控加工G代码程序的质量成为影响加工质量和效率的重要因素。如今数控技术与计算机仿真技术相结合,技术人员可以利用相关的G代码仿真加工软件对G代码的加工效果和正确性进行验证,而无需进行机床试加工,省时省材。针对G代码仿真加工软件的开发,关键在于正确提取G代码程序中的点位信息。因此本文基于Qt平台提出一种数控加工G代码程序图形点位信息提取算法。

【关键词】Qt;图形点位信息;G代码;G代码程序加工仿真;算法

中图分类号: TP311.5 文献标识码: A 文章编号: 2095-2457(2019)21-0049-003

DOI:10.19694/j.cnki.issn2095-2457.2019.21.022

Graphic Point Information Extraction Algorithm for NC Machining G Code Program

LIANG Zi-cai

(China-EU Institute for Clean And Renewable Energy , Wuhan  Hubei 430074,China)

【Abstract】Due to the increasingly complex structure and processing technology, the quality of CNC machining G code programs has become an important factor affecting the quality and efficiency of machining. Nowadays, the combination of numerical control technology and computer simulation technology, technicians can use the relevant G code simulation processing software to verify the processing effect and correctness of G code, without the need for machine tool trial processing, saving time and materials. For the development of G code simulation processing software, the key is to correctly extract the point information in the G code program. Therefore, based on Qt platform, this paper proposes a graphics point information extraction algorithm for NC machining G code program.

【Key words】Qt; Graphic point information; G code; G code program processing simulation; Algorithm

0 引言

由于零件结构、加工工艺日益复杂,数控加工G代码程序的质量成为影响加工质量和效率的重要因素。数控加工G代码程序包含加工所需的所有信息,指导数控机床加工工作[1]。以往多采用试切法检测数控加工G代码的正确性[2],但是这种方法往往因为数控程序错误引起的刀具碰撞损坏[3],工件浪费等。因此,人们通过运用计算机仿真技术提前验证G代码的准确性[4],既可缩短开发周期,又可减少材料浪费。

针对G代码仿真加工软件的开发,关键在于正确提取G代码程序中的点位信息。笔者基于Qt平台提出一种数控加工G代码程序图形点位信息提取算法。

1 G代码程序的译码

在提取数控加工G代码程序中的加工点位信息之前,需要对G代码程序进行译码,对G代码进行词法语法错误检测,再将加工命令和坐标分类保存到相应的数据存储容器,数据存储容器定义如下所示:

typedef struct

{QStringList drawtype;//绘图类型:直线,圆弧

QStringList codetype;//编程类型:增量式,绝对式

QStringList xcoor;//X值

QStringList ycoor;//Y值

QStringList zcoor;//Z值

QStringList icoor;//I值

QStringList jcoor;//J值

QStringList kcoor;//K值

QStringList rcoor;//R值

QStringList current_line;//轨迹当前加工行號

}scan_data;

在对G代码程序进行译码之前,需要对每行代码中的注释内容进行屏蔽,之后再对每行代码的有效信息进行解析。具体流程如图1所示。译码过程比较重要的几个步骤是去掉注释内容、词法错误检查、语法错误检查和字符分类。

去掉注释内容。数控加工G代码中有部分文本是注释内容,这些注释内容并不蕴含有效加工数据,因此无需进行后续处理,因此需要提前屏蔽掉。

词法错误检查。根据数控加工G代码的编程标准,判别G代码中的字符是否符合编程要求。实现的思路为:首先建立代码关键字符集,然后逐个读入G代码中的字符,判断它是否属于关键字符集。如果不在则说明程序使用了系统不能识别的指令,给出错误信息,指出错误所在行;如果该字符属于字符集则继续读入下一个字符。

语法错误检查。将数控G代码的单词按各类语法规则进行分析,并进行语句的语法正确性和不同语句之间的相容性检查。归纳起来,数控代码中要检查的语法错误主要有指令搭配错误、指令顺序错误和指令格式错误。

字符分类。经过词法错误检查和语法错误检查之后,需要对G代码进行加工命令和坐标分类保存到相应的数据存储容器,后续将进行坐标点细分工作。

2 G代码程序点位信息的提取

在完成数控加工G代码程序的译码工作之后,G代码的加工命令和坐标分类保存到数据存储容器,但是不能直接使用这些数据绘制出加工图像。因此需要根据不同类型的命令和坐标点进行进一步的点位信息提取,其具体流程如图2所示。

2.1 直线类型

快速定位G00和直线插补G01这两种类型比较简单,不需要什么判断,直接细分即可。细分方法是:先求起点(old_x, old_y, old_z)和终点(new_x, new_y, new_z)之间的距离,然后细分count(自定义细分段数量)段,然后取点 ,代码如下:

for (int i = 0;i < count+1;i++) {

//计算点坐标

x_pos = old_x + ((i) * (new_x - old_x)) / count;

y_pos = old_y + ((i) * (new_y - old_y)) / count;

z_pos = old_z + ((i) * (new_z - old_z)) / count;

//存储点坐标

draw_Data.tool_pos_x.append(QString::number(x_pos));

draw_Data.tool_pos_y.append(QString::number(y_pos));

draw_Data.tool_pos_z.append(QString::number(z_pos));

}

2.2 圆弧类型

相比之下,绘制圆弧则比较复杂。G代码编程绘制圆弧有两种类型,一种是IJK模式,另一种是R模式。IJK模式给出了圆点和半径,R模式给出了半径和圆弧的圆心角,两种模式都需要判断圆弧所在平面(XY,YZ,ZX三个之一)。以下分别细讲这两种圆弧类型的实现过程。

2.2.1 IJK类型圆弧

IJK类型下,已知圆弧起点、圆弧终点、半径和圆心,如果要实现圆弧的绘制则需将圆弧细分成最够小的直线段,只要细分段数足够大,绘制出来的图形就接近圆弧。大致流程如图3所示。

确定起点和终点相对于圆心的象限示意如下:

左边为逆时针绘图,右边为顺时针绘图。之后根据起点和终点所在的象限求其相对于圆心的角度,如图5所示。

求完angle和angle1之后,就可以进行细分了,顺时针细分如下:

for (int i=0;i

p4.x=center_point.x+Ra*cos(angle1-(angle*i)/count);

p4.y=center_point.y+Ra*sin(angle1-(angle*i)/count);

draw_Data.tool_pos_x.append(QString::number(p4.x));

draw_Data.tool_pos_y.append(QString::number(p4.y));

}

逆时针细分如下:

for (int i=0;i

p4.x=center_point.x+Ra*cos(angle1+(angle*i)/count);

p4.y=center_point.y+Ra*sin(angle1+(angle*i)/count);

draw_Data.tool_pos_x.append(QString::number(p4.x));

draw_Data.tool_pos_y.append(QString::number(p4.y));}

2.2.2 R型圓弧

R型圆弧下,已知起点和终点,半径和圆心角,但是不知圆心是哪个,有两种可能的情况,如图6所示。因此需要先判断出哪个是圆心。

因此R型圆弧需要先判断圆心然后再细分求位置点,流程如图7所示。

R型圆弧的情况下,也需要计算起点相对于圆心的起始角度angle1与圆弧圆心角angle然后再细分(与IJK类型细分一致)。

3 总结

笔者利用Qt平台与OpenGL库开发了一款针对数控加工G代码程序的三维加工仿真软件,该软件能够根据加载的G代码程序提取加工图像点位信息并绘制加工图像并且可以模拟刀具的加工,同时可以检测G代码程序的错误并给出错误信息,方便用户提前验证G代码的可行性。通过使用该软件,技术人员无需试加工就可以验证G代码的加工效果,减少资源浪费与缩短开发周期。

【参考文献】

[1]潘海鸿,叶文海,陈琳,et al.特种复合加工中心数控系统G代码编译器设计[J].组合机床与自动化加工技术,2015(6):71-73.

[2]娄志超,赵先锋,史红艳,et al.基于OpenGL车削仿真系统的开发与研究[J].现代机械,2018,No.204(02):19-23.

[3]刘思胜,李松生,陈萍.数控G代码解释器和仿真模块的设计与实现[J].机械设计与制造,2012(1):172-174.

[4]李春雷.虚拟数控车削加工误差建模技术研究[J].机械工程与自动化,2011(4):35-36.

猜你喜欢
算法
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
基于CC2530的改进TPSN算法
基于BCH和HOG的Mean Shift跟踪算法
基于增强随机搜索的OECI-ELM算法
一种改进的整周模糊度去相关算法
一种抗CPS控制层欺骗攻击的算法
Wiener核的快速提取算法
带跳的非线性随机延迟微分方程的Split-step算法