时间:2024-07-28
,,,
(贵州大学 机械工程学院,贵州 贵阳 550025)
随着数控车削加工技术的发展,数控自动编程技术初步解决了车削加工问题,为检查数控程序的NC代码正确性,传统方法采用的试切法,这种方法费工费料,甚至由于程序的错误而导致机床的损坏。后来采用轨迹显示方法,但这种方法仅限于平面,不能准确地仿真其实际情况[1]。为此,人们通过运用计算机仿真技术提前验证NC代码的准确性,从而提高了生产效率,节约成本,避免制造风险[2-3]。OpenGL是一个开放的三维图形程序接口、调用方便的底层图形库,它独立于窗口系统和操作系统,与硬件无关,以它为基础开发的应用程序可以十分方便地在各种平台间移植,或嵌入其他系统使用[4]。基于OpenGL的程序框架构造好后,用户只需要在对应的函数中添加程序代码即可,可扩展性好。针对上述问题,提出了OpenGL车削仿真运动系统,在Visual Studio 2015环境下实现车削加工去除材料的过程。
该系统以VS 2015为开发平台,OpenGL为工具,根据数控车削加工的特点,可将软件功能分为加工仿真准备模块与加工仿真过程模块;其中加工仿真准备模块和加工仿真过程模块都包含3个子模块,如图1。
图1 加工仿真系统架构图
在加工仿真准备模块中包含:图形显示模块,以OpenGL为工具搭建仿真图形显示环境;NC代码模块,对NC代码进行解码;STL模型模块,将绘制的刀具以及机床模型的stl文件进行解码并显示。
在加工仿真过程模块中包含:工件运动模块,使工件自转,并使刀具和工件拥有独立的运动;刀具加工运动模块,刀具轨迹会依据NC代码进行刀具的运动;毛坯设计模块,基于几何仿真原理,随着刀具车削,毛坯逐渐成形。
要使仿真系统进行车削仿真需要前期准备,包含OpenGL环境搭建,NC代码解释,与stl模型的导入。
OpenGL被定义为图形硬件的一种软件接口,是一个3D图形和模型库,具有高度的可移植性,并且具有非常快速度,独立于窗口系统和操作系统,与硬件无关,OpenGL是个状态机的概念,通过创建OpenGL的渲染设备rc,使得OpenGL具有这些状态功能,然而此时所有的状态仍是未知的,就需要依次进行设置[5]。
本文采用OpenGL固定管线技术完成模型的绘制,在固定管线中包含两个矩阵:projection和model view,其中包含三个坐标系:世界坐标系、视口坐标系、屏幕坐标系,要使图形显示,就需要对坐标系进行一系列的矩阵变化。首先在世界坐标系下绘制模型,通过模型视口矩阵(model view)对模型进行作用,从而转换到视口camera坐标系下,然后将模型再投影到视口camera的范围内,进而图形才会显示到屏幕上,投影视口的操作如同摄像机的原理,需要在摄像机拍摄范围内,镜头画面才有模型的显示。由于计算机屏幕上只能表现二维平面,要使得车削仿真系统显示三维图形,还需投影矩阵(projection)从三维物体转到二维平面图像间的变换,投影矩阵会把所有的3D信息投影到2D屏幕上,这样车削仿真系统中的车刀与毛坯等三维图形便可在屏幕中显示。
NC代码是从零件图纸到制成控制介质的过程,NC代码的格式以首字母代表特定功能,N代表的是第几工步,G代码是在NC装置内部用来处理轴的移动、坐标系的设定等的功能,代码用G字母和2位数字表示;M代码的机床运行是由各开关的动作来控制的,控制主轴的旋转、停止、刀具的更换等,用M字母和2位数字来表示等。
本文采用NC代码实例:
N0010 G94 G90 G20
N0020 G50 X0.0 Z0.0
N0030 T00 H00 M06
N0040 G97 S443 M03
N0050 G94 G00 X30.Z10.
N0060 X28.
N0070 Z5.5
…
由于NC代码值是数控车削加工过程的驱动指示,在VS2015平台不能直接识别,因此需要将NC代码翻译成仿真系统所能识别的代码,先将NC代码全部存储到m_resource缓冲区中,针对NC代码的特点,仿真系统只需从中提取有关运动与状态信息作为刀具运动轨迹依据,而对于与运动轴相关代码等信息用词法检验即可,不需进行解读,然后将存储所需的NC代码按照首字母的特性进行匹配,以X字母为开头代码为例,通过if语句从m_resource缓冲区找到X首字母并开始读入后续数字,读到空格(‘/0’)的位置,将从X到’/0’之间所需的仿真信息按顺序封装到新的m_compete缓冲区。另外还需把所解码的仿真信息赋值给刀具移动变量,使得刀具运动依据NC代码的内容进行运动仿真。
实例代码:
for (it = m_resource.begin(); it { //X部分的信息提取 int n=(*it).Find(L"X"); if(n>=0)//找到‘X’的字母 { int m=(*it).Find(L"",n); if (m<0) { m=(*it).Find(L'/0',n);//读到这一横行代码的结尾 } n=n+1; CStringCoordinateX; CoordinateX=(*it).Mid(n,m-n);//用来提取G的信息 rX=_ttof(CoordinateG); coor.m_g=rG; flag++;//标记 } … } stl模型文件是计算机图形学处理CG,数字几何处理的最常见文件格式,其文件格式简单,是由一系列三角面片构成,仅有顶点信息,并没有光照材质等渲染信息,所以在此系统中只需读取stl模型只需读取顶点数据等几何信息,不必考虑渲染等解码部分。 解码stl文件,需要了解stl文件的格式信息,其中stl文件包含两种格式:一种是ASCII格式,另一种是二进制格式。两者的区别在于存储方式的不同。根据不同的stl文件格式,相应解码也有所不同。本文采用ASCII格式,在ASCII格式下,文件每行都以关键字为开头,模型中每个三角面片的信息是以facet开头,进而逐行显示三角面片的几何信息,其中依次包含:facet normal,从三角面片指向模型外部的法矢量,outer loop以及随后的 vertex和endloop,集合表达了三角面片的顶点信息。其中vertex的三行数据是三角面片的3个顶点坐标信息,三个顶点跟该三角面片的法向量符合右手螺旋定则,outer loop和endloop仅是顶点数据开始与结束的标记,最后文件以endfacet结尾,完成一个三角面片定义[6]。 根据stl文件的ASCII格式特点,可有两种读取方法,一种是逐行进行读取,另一种是按三角面片个数逐个进行读取。由于前者逐行读取中,所读每一行都需要检查是否到了文件的endface结束语,影响效率,所以本文系统采用第二种方法:首先求出三角面片个数的总数,其中ASCII格式中每个三角面片所占的行数为七行,因此把行数读出来除以7所得的商就是三角面片的个数,然后通过for循环操作解析每个三角面片,并且OpenGL的接口实际上是一串float的数组,与stl文件相一致,所以这里面保存了verts顶点坐标信息,以及norms即法向量信息直接进行导入不需做数据结构调整,便可以解出模型。 参考代码: for (int i=0;i { … vnorms[count1]=vnorms[count1+3]=vnorms[count1+6]=atof(x); count1++; vnorms[count1]=vnorms[count1+3]=vnorms[count1+6]=atof(y); count1++; vnorms[count1]=vnorms[count1+3]=vnorms[count1+6]=atof(z); count1+=7; … } 通过仿真系统的前期准备,就可以实现车削加工仿真,由于数控加工的过程是数控机床在NC代码的驱动下带动刀具对使用夹具固定在工作台上的工件,进行切削加工的过程,针对其特点,在仿真系统中需要包含刀具运动,工件以及夹具自转,毛坯切除的功能[7]。 图2 车刀运动判别 车削的毛坯多为回转体棒料零件,并且刀具通常只是X、Z方向上的二维移动,因此仿真可根据存储到m_compete缓冲区中的关键运动代码,将刀具的起始点坐标设为原点坐标,并进行X方向和Z方向起始点和终点的距离的判断,如图2。以车刀从第n的位置车削第n-1的位置为例,如果起始点X的值大于终点X的值,则车刀先径向进给运动。然后通过Z值判别,起始点Z的值大于终点Y的值,则车刀再完成径向进给运动,通过刀具X和Z方向的运动,从而完成进刀运动;退刀反之。 具体的实现命令如: //车刀径向进给运动 if(X { m_X=m_X-V;//车刀径向进给 m_Z=m_Z;//车刀轴向不变 velocityflag=1;//进给标记 } 在仿真系统中,刀具运动的同时,工件与夹具也要进行自转运动,因为OpenGL是个状态机,旋转、移动、平移其运动操作都会影响视全局所有元素的状态,所以需要通过OpenGL中矩阵的压栈出栈的功能来实现刀具与工件之间的独立运动。 在OpenGL中所有的运动操作都是通过矩阵栈的栈顶来影响图形的状态。如图3,将开始状态定为状态1,在变换之前调用giPushMatrix()压栈,就会把当前状态1压入第二层,并且栈顶会有状态2,并且栈顶的矩阵状态2是第二层状态1的一份拷贝,所有的内容是相同的,此时所有的矩阵操作都是在状态2中完成,通过一系列的矩阵对所操作的图形有所改变,而且并不会影响全局元素的状态,变换之后,使用glPopMatrix出栈,将上面操作过的状态2去掉,之前的状态1又放到栈顶,恢复原来的状态。在本文中,通过压栈出栈操作进行刀具运动,从而在刀具的运动同时,不影响工件与夹具的自转运动状态。 工件以及夹具的运动主要用glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)函数进行自转,x、y、z表示旋转轴,angle代表旋转角度,在本文中旋转轴为z轴,旋转角度随时间而曾大,然后通过if判断要是转过一周,角度则从0°再开始继续增加,如此,工件与夹具便在加工仿真中一直自转而不受刀具移动的干扰。 图3 压栈出栈图 由于OpenGL中没有实体建模的功能,所以本文毛坯的实体建模通过曲面绘制进行组合,gluCylinder圆柱面,和gluDisk圆盘面来实现毛坯的加工仿真。 图4 毛坯设计 为实现毛坯形状随切削加工的进行而发生形状实时改变,本文采用几何仿真,将毛坯形状根据离散法来满足仿真要求,即把毛坯的圆柱离散成同心、同底、同高但半径不同的圆柱体,车削毛坯时,圆柱的地面半径与最外侧的底面半径递增关系如图4所示。在加工部分,大圆柱以车刀加工终点位置作为起始点,随着车刀的轴向进给运动,大圆柱的高随之减小,小圆柱以车刀加工起始点位置作为起始点,并随着车刀轴向进给运动,小圆柱体高随之增大,效果可看成是从大圆柱剥离出小圆柱体,随着刀具的运动,大圆柱和小圆柱的半径发生实时改变,以第n次车刀车削为例,在第n次车刀进行车削时,大圆半径为第n-1次车削加工后小圆柱体半径;小圆半径为第n次车削加工时的小圆柱体半径,同时两圆柱面交际面用圆盘作底面,形成封闭图形,两个圆柱的高通过刀具的位置改变而发生变化,底面圆盘根据刀具的轴向进给运动而移动,便可实现其毛坯的加工仿真效果。 代码所示: gluCylinder(quadratic,(*it_chip).RadiuolnStart,(*it_chip).RadiuolnStart,ld-jd,32,1);//大圆柱 gluCylinder(quadratic,(*it_chip).RadiuoOutStart,(*it_chip).RadiuoOutStart,jd,32,1);//小圆柱 glTranslatef(0,0,jd=pDoc->m_piseljd);//移动刀具加工的两圆柱底面 gluDisk(quadratic,(*it_chip).RadiuolnStart,(*it_chip).RadiuoOutStart,32,1);//形成加工时两圆柱底面 … 在菜单项点击NC代码导入,选择所需的NC代码导入到系统中,再单击stl模型,分别将夹具模型与车刀模型添加到系统,最后选择仿真开始,便可实现车削运动仿真模拟,软件实现效果如图5。 图5 系统运行效果 针对数控车削的形状特点及传统落后的加工工艺,以Visual Studio 2015为开发平台,使用OpenGL 三维图形标准库,采用离散法实现毛坯切除,开发数控车削动态运动仿真系统,实现了虚拟车削加工过程的可视化,直观地显示了刀具路径、工件的转动、材料去除等过程。实验表明,仿真效果达到了预期要求,具有良好的实时性; 为车削加工提供了保障和可行性;以新的角度诠释了OpenGL环境的搭建,同时读取stl方法以及离散法毛坯去除对于同类虚拟仿真加工的扩展,具有一定的借鉴意义。 [1] 周静.数控仿真三维建模及实现[D].南京:南京理工大学,2005. [2] TANG T D,BOHEZ E L J,KOOMSAP P.The sweep plane algorithm for global collision detection with workpiece geometry update for five-axis NC machining[J].Computer-Aided Design,2007,39(11):1012-1024. [3] 李春雷.虚拟数控车削加工误差建模技术研究[J].机械工程与自动化,2011(4):35-36. [4] CHEN M,GONG Y,ZHAN L,et al.Research on technology of three-dimension Roam based on OpenGL[C]// International Conference on Computer Application and System Modeling,2010,14:562-564. [5] WANG Y,SUN L X,FAN J C.Application of OpenGL in NC turning simulation[J].Advanced Materials Research,2012,505:282-286. [6] 严梽铭,钟艳如.基于VC++和OpenGL的STL文件读取显示[J].计算机系统应用,2009(3):172-175 [7] 董大勇.虚拟制造中的数控铣削仿真加工技术[J].金属加工(冷加工),2015(15):58-59. [8] 牛书涛,库祥臣.基于Visual C++与OpenGL的数控车削加工仿真系统研究[J].机电一体化,2012,18(3):35-39.2.3 stl模型模块
3 加工仿真过程
3.1 刀具运动模块
3.2 工件运动模块
3.3 毛坯设计模块
4 软件实现
5 结束语
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!