基于Python编程语言的绗缝机NC代码的自动生成

2019-12-17 01:05张子立杨九铜梅宇亮朱志松
毛纺科技 2019年11期
关键词:花型圆弧圆心

张子立,杨九铜,梅宇亮,朱志松

(南通大学 机械工程学院,江苏 南通 226019)

随着现代制造产业的高速发展,数控技术在高精度、高效率和柔性自动化方面有着突出的优势。随着计算机高速发展,在绗缝机的生产加工过程中,手动人工NC编程、程序试切验证等传统的制造工艺已经无法满足当前产品多样化、个性化的需求[1-3]。为了实现加工过程的自动化、智能化,必须对现有的系统进行升级改进。因此,可将开放式数控系统运用于绗缝机进行升级改造。

绗缝机数控系统分为上位机和下位机2部分,上位机为PC机,用来实现花型图案的设计与绘制、运行参数设置、加工过程监控、运动控制、加工过程模拟仿真等功能;下位机采用倍福工控机,用来解释NC代码(数控加工代码)并控制伺服驱动器发送脉冲信号,以控制绗缝机的机械加工过程。这类数控系统将PC机的信息处理能力和运动控制卡的控制能力有机结合,具有可靠性高、功能强、性能好,操作简单方便,开发周期短,成本低等优点,广泛应用于制造业自动化控制等各个领域。

本文针对此类绗缝机数控系统设计了一种NC代码自动生成系统,该系统能将在上位机绘制的花型文件直接转化为NC代码,并在上位机进行模拟仿真以校验NC代码,使用自动生成的方式大大提高了绗缝机加工系统的工作效率,校验系统提升了NC代码的准确率和加工的准确性。

1 花型图案数据分析

用户使用花型图案设计软件设计并绘制所需图案,图案对应的花型图案文件为dat文件。绘制的图形是矢量图形,该文件利用终点坐标和类型代码来表示点、线、多边形、圆弧等几何图元[4]。对矢量图形的参数进行分析,花型参数格式见图1。图中每一行参数表示一段轨迹路线,其中包含了NC代码类型、X轴起点坐标、Y轴起点坐标、X轴终点坐标、Y轴终点坐标、圆心坐标、圆弧顺逆、进给速度等参数。

图1 花型参数格式

参数意义如下:

NC代码类型:参数分为4类,用于对NC代码的类型进行区分。0表示直线插补,2表示快速定位,1表示圆弧插补,-1出现在每个花型文件的最后表示回到起始点。

X、Y轴的起始和终点坐标:用2个坐标间的差值表示每行NC代码X、Y轴的进给量。

圆心坐标:在圆弧插补时需输入圆心坐标参数。

圆弧顺逆:参数为1表示逆时针圆弧,参数为0表示顺时针圆弧。

编写数据处理函数对花型文件进行处理,分为以下几个步骤:

①选定花型文件并逐行读取。每行花型文件表示花型图案中的每条轨迹,读取到的数据根据轨迹的不同在生成NC代码前分组。

②转换数据类型。将数据转换成多维数组,并将数组中数据类型转化为float浮点数类型,用于NC文件生成时的运算。

③将多维数组转化为列表,完成数据的前期处理。

2 NC代码生成

2.1 花型图案数据读取及预处理

为了便于用户使用和提升系统的人机交互性,利用图形用户界面开发软件PyQt5设计开发了GUI图形用户界面,用于进行NC代码轨迹路线的显示和文件的选取。Qt是一套跨平台的C ++库,可以实现传统的UI开发。PyQt5是Qt的一套全面的Python(编程语言)绑定,它拥有超过35个扩展模块,并使Python能够在所有支持的平台上用作应用程序开发语言[5-6]。通过使用PyQt5中QFileDialog.getOpenFileName函数实现对花型文件的读取,循环调用readlines()函数逐行读取花型文件中数据。花型文件读取方法如下:

file_name=QFileDialog.getOpenFileName(self,"open file dialog","./","(*.dat)")

with open(file_name[0], ′r′,encoding=′utf-8′) as f:

for line in f.readlines():

L.append(line.split()

L列表中参数包含空格等不必要元素,使用itertools.groupby()函数删除列表中的空格,调用np.array().astype(float)函数将列表转换为多维数组,并将多维数组中数据类型转换为float类型,便于后续计算。采用np.tolist()函数将数组再次转换为列表,列表命名为data,对data的操作便于后续对关键参数的提取。通过识别、提取列表中的关键参数,获得生成NC代码时所需NC代码类型、坐标、速度等。为方便调用生成NC代码中参数,将列表中的关键参数进行定义。参数定义见图2。

图2 参数定义

2.2 NC代码生成

在数控程序加工过程中,机床的运动由G、M代码来指定,用以描述NC系统的具体运动过程[7]。它将图纸中工件点、线、面的信息提取为加工的运动路径[8]。因此在本文控制系统中,将处理完的数据列表编译为NC代码是整个系统中关键的一步。

通过对花型文件数据的分类整理计算,对照NC代码标准格式,写入获得的NC代码参数,最后将生成各段NC代码按顺序写入NC文件中,NC代码生成算法流程如图3所示。NC代码生成程序采用内嵌多路分支结构进行构建,每路分支对应一个编译处理函数,有利于提高程序运行效率。

图3 NC代码生成算法流程图

对data中参数进行分析,data中数据类型分成3类,分别为快速定位,直线插补,圆弧插补。生成NC代码前,先建立一个名为gcode的空列表用于存储生成后的NC代码。通过上述对花型图案数据的分析可知,生成NC代码的过程为:从data中截取坐标加工、速度等参数,利用字符串的连接,将连接后的每条NC代码采用列表的append方法将函数添加到gcode列表中。当data中NC代码类型参数为“0”时,生成直线插补准备功能字G01,将data中的X轴、Y轴的终点坐标返回一个string格式对象并分别置于X、Y字符后,将data中进给速度参数返回string格式对象并放入F字符后,连接后的NC代码如G01X′+str(x2) ′+Y′+str(y2) ′+F′+str(xyv) ′所示。当data中NC代码类型参数为“2”时,生成准备功能字G00进行快速定位,将data中X轴坐标、Y轴坐标、机床加工进给速度返回string格式对象并依次连接,如G00X′+str(x2) ′+Y′+str(y2) ′+F′+str(xyv) ′所示。方法如下:

if (data[i][0]==0):

gcode.append(′G01X′+str(x2)+′Y′+str(y2)+′F′+str(xyv))

elif (data[i][0]==2):

gcode.append(′G00X′+str(x2)+′Y′+str(y2)+′F′+str(xyv))

式中:x2、y2表示加工终点坐标;xyv为进给速度。

圆弧插补的NC代码生成有别于快速定位和直线插补,在机床加工工程中圆弧加工存在顺圆和逆圆的差别,因此圆弧插补存在G02、G03 两种准备功能字分别表示逆圆和顺圆[9]。花型文件数据中采用起始点、终结点、圆心坐标和圆弧顺逆参数4个要素来表示圆弧,圆弧插补NC代码采用G03 (G02)XYIJF的形式表示[10~11]。当data中NC代码类型参数为“1”时,判定进行圆弧插补生成。当data中圆弧顺逆参数为“0”时表示顺时针圆弧,生成准备功能字G03,将data中X轴、Y轴终点坐标参数返回一个string格式对象放入X、Y字符后,圆弧插补中I、J表示圆心相对于起始点坐标,将圆心的坐标值减去起点坐标值算出圆心相对起点增量,圆心增量转化为string格式后填入I、J之后,用于表示圆心相对坐标。当data中圆弧顺逆参数为“1”时,生成准备功能字G02,其后的NC代码按采用顺时针圆弧NC代码生成方式。其中在此处计算的半径R用于后续NC代码的校验。方法如下:

if (data[i][0]==1) :

R=np.sqrt((dCenterX-x1)**2+(dCenterY-y1)**2)

I=dCenterX-x1

J=dCenterY-y1

if (direction==0):

gcode.append(′G03X′+str(x2)+′Y′+str(y2)+′I′+str(I) +′J′+str(J)+′F′+str(xyv))

else:

gcode.append(′G02X′+str(x2)+′Y′+str(y2)+′I′+str(I) +′J′+str(J)+′F′+str(xyv))

式中:dCenterX、 dCenterY为圆心绝对坐标;I、J为圆心相对坐标。生成的NC代码以字符串的形式表示,每一段NC代码都按data中数据的顺序存储在建立的gcode列表中。将gcode列表中的NC代码写入NC文件。

3 NC代码校验

为检验生成NC代码的准确性,利用生成的NC代码在GUI界面中进行花型绘制,使用与原始花型图案不同颜色的线条加以区分。2个花型图案对比便于用户发现生成的NC代码和原始花型图案间的差异。NC代码图形的生成采用在Python框架下PyQt5进行开发。运用PyQt5中提供的图元选项QGraphicsLineItem定义drawline函数,用于绘制直线;利用图元选项QGraphicsPathItem定义绘图函数drawcle,用于绘制圆弧。花型图案使用图形项item进行表示,花型图案中每个元素对应一个item,所有item图形项的集合表示整个花型图案。定义绘图函数如下:

def drawline(x1,y1,x2,y2):

item=QtWidgets.QGraphicsLineItem(x1,y1,x2,y2)

ig.addToGroup(item)

def drawcle(x1,y1,cx0,cy0,R,start,span):

path.moveTo(x1,y1)

path.arcTo(QtCore.QRectF(cx0-R,cy0-R, 2*R, 2*R),start,span)

item=QtWidgets.QGraphicsPathItem(path)

ig.addToGroup(item)

式中:x1、y1为起点坐标;cx0、cy0为圆心坐标;R为半径;start为起始角度;span为圆弧包角。

调用QGraphicsLineItem绘制坐标起点和终点分别为(x1,y1),(x2,y2)的直线,建立名为ig的Group列表用于存储item图形项,调用addToGroup()函数,将生成的item图形项存入到Group列表中。采用path路径的方法绘制圆弧,以同样方式添加到Group列表中。生成的NC代码和花型图案分别见图4、5。

图4 生成的NC代码(部分)

图5 生成的花型图案

将NC代码准备功能字作为标记位,用于调用不同绘图函数,采用多路循环分支结构分别进行直线、圆弧的绘制和坐标移动。当准备功能字为G0时,用path.moveTo()函数进行坐标移动,只将坐标移动到终点坐标的位置不进行画图操作。当读取准备功能字G01时,调用drawline函数,将起点坐标和终点坐标作为直线绘制函数的参数,(x1,y1)和(x2,y2)分别表示线段的起点和终点坐标。当读取准备功能字为G02/G03时,调用drawcle函数进行圆弧的绘制,drawcle函数用7个参数描述圆弧:X轴起点坐标、Y轴起点坐标、圆心X坐标、圆心Y坐标、半径、起始角度、圆弧包角。其中,(x1,y1)和(dCenterX, dCenterY)分别表示起点坐标、圆心坐标,圆弧半径通过以下公式求出:R=np.sqrt((dCenterX-x1)**2+(dCenterY-y1)**2)。start参数表示圆弧起始角度,使用start=np.arccos((x1-dCenterX)/R)计算得出。span参数表示圆弧包角, 其正负表示圆弧旋转的顺逆。

按上述方法,根据NC代码中顺序分别调用drawline、drawcle绘图函数和位移函数,绘制出花型图案即可在GUI界面上显示出来。

4 结束语

本文基于Python设计了一种NC代码自动生成方法,具有一定的创新性。在本文方法中,程序实现简单,可以满足绗缝机加工的各种工艺需求,提升绗缝机的自动化加工水平,该方法能有效地提升NC代码的准确率并监管绗缝机加工过程。实验证明,程序运行稳定可靠,生成的NC文件已用于绗缝机的生产加工,同时NC文件校验系统的反馈表明NC文件的准确率达到了预期效果。此外,该方法基于Python进行设计开发,可以很好地移植到其他系统中广泛使用。

猜你喜欢
花型圆弧圆心
浅析圆弧段高大模板支撑体系设计与应用
离心泵双圆弧圆柱形叶片的几何方程
哥特式浪漫
半圆与半圆弧
呼伦贝尔野生芍药和栽培芍药的繁殖生物学特性
基于交互式分割的蕾丝花型检索算法
以圆周上一点为圆心作圆的图的性质及应用
我国观赏植物花型基因研究进展
如何让学生更好地掌握圆弧连接的画法
参考答案