复杂型腔热锻模具的工作环境恶劣,其工况条件和失效模式要求模具型腔及基体不同区域分别具有特定性能[1].然而,采用传统方法制造的热锻模具,一般整体采用均质模具钢5CrNiMo或H13,通过钢锭-自由锻-粗加工-热处理-精加工等工序制得,高强硬性和高韧塑性难以同时满足,在高温重载工况下易产生严重压塌变形、磨损、起裂等状况,模具寿命低且制造成本高昂[2].复杂型腔锻模的日常修复和再制造在模具使用过程中占据十分重要的地位.常见的锻模修复和再制造主要采用人工堆焊作业,具有操作简单、低成本、效率高等优势,获得了广泛的应用,主要集中在耐磨堆焊材料设计、组织性能分析和新型堆焊工艺等领域.文献[3]对H13型CO2自保护堆焊药芯焊丝的组织和性能进行研究,采用少量多元的合金元素设计,实现了多种碳化物复合强化的效果.文献[4]选择铁基合金粉末和碳化钨硬质合金颗粒作为堆焊材料,采用研制的等离子弧堆焊装置,获得了铁基合金+碳化钨硬质合金的复合堆焊层.文献[5]采用复合堆焊修复方法实现了堆焊层硬度梯度变化,改善了基体与耐磨层的结合性能.尽管上述研究在锻模修复与再制造领域的推广应用已经取得了一定成果,但人工堆焊作业精确尺寸无法控制、锻模组织性能稳定性差等缺点依然存在.相较于传统的人工满焊后通过机加工获得模具型腔的方式,电弧增材制造具有更高精度和形性可控等优势,成为锻模再制造领域的重点研究方向[6].电弧增材制造根据增材材料的不同可以分为送粉和送丝两种类型.送丝具有堆积速率高、成本低和对环境友好等优势[7],满足复杂型腔锻模的再制造需求.在此过程中,对目标模型的分层切片是核心关键,分层切片处理的精确性和稳定性决定了后续丝材堆积的精度和质量[8].一些已有的对STL模型分层的方法,如基于拓扑信息的分层算法[9]、基于三角面片分组的分层算法[10]和自适应切片算法[11]等,在分层前期都有巨大耗时操做,例如构建拓扑关系、分组、迭代优化等,对于锻模电弧增材再制造这种STL模型导入后反复使用次数并不多的情况并不适用,其效率和实用性较差.本课题组对高效率的STL模型分层切片算法、修复和提高轮廓多边形精度的插值拟合算法等进行研究,并采用失效的曲轴锻模进行电弧增材再制造实验,验证所提分层方法的有效性.1 STL模型拓扑结构1.1 STL模型数据提取STL文件采用三角形顶点坐标和指向外部的法向量来描述有向三角形,在实际使用中应根据所需精度进行合理的三角形大小的取舍[12].STL文件通常采用ASCII码形式进行数据存储,其中的任意一个三角面片由三个顶点坐标和一个法向量组成,其文件结构如下所示.facet normal 0.000 000e+000 0.000e+000 1.000e+000outer loopvertex -2.205596e+001 3.336967e+001 5.000000e+001vertex -8.000000e+000 3.919184e+001 5.000000e+001vertex -1.530734e+001 3.695 518e+001 5.000000e+001endloopendfacet…ASCII码文件中点和法向量的关键字可能是大写或小写英文字母.为了能够精确地读取这些数据,设计了如下法向量匹配的正则表达式[\\s]{0,100}[F,f][A,a][C,c][E,e][T,t][\\s]{1,100}[N,n][O,o][R,r][M,m][A,a][L,l][\\s]{0,100}(.*).此外,坐标点匹配的正则表达式为[\\s]{0,100}[V,v][E,e][R,r][T,t][E,e][X,x][\\s]{0,100}(.*).通过这两个正则表达式,遍历整个STL模型文件逐行匹配,便可将三角形顶点和法向量数据读入内存相应数据结构中.1.2 STL模型存储数据结构一个STL模型文件是由成千上万的数据片段组成,在分层切片算法处理之前,须设计数据结构来存储STL文件.首先设计Point类存放点坐标和向量数据.Point类具有x,y和z三个浮点类型的私有属性以及浮点类型的tolerance属性,其中tolerance属性作为判据两点是否相等的容差.Point类具有复制构造函数和带参数的构造函数两个构造函数.此外Point类还重载了赋值运算符并定义了四个get和set共有方法,其统一建模语言(UML)如下.Point-x:double-y:double-z:double-tolerance:double+Point(double x=0,double y=0,double z=0,double to=0.01)+Point(const Point & point)+operator=(const Point & point):Point &+operator==(const Point & point)const:bool+get X() const:double+get Y() const:double+get Z() const:double+set X(double X):void+set Y(double X):void+set Z(double X):void+setTolerance(double):void+setValue(double x=0,double y=0,double z=0):void由于在分层切片后获得轮廓的过程中,须判定两个点是否相等,因此Point类须定义与其自身做比较的方法,即判断x,y,z属性是否满足一定的相等条件.对Point类重载“==”符号便于和一般数据类型具有相同的运算规则,对于两个Point对象是否相等的判断式为(x1-x2)2+(y1-y2)2+(z1-z2)2E,(1)即两点的欧氏距离小于给定的容差时两点相等.式中:(x1,y1,z1)为第1个点的坐标;(x2,y2,z2)为第2个点的坐标;E为容差,取值为0.01.此外,Point类还定义了一个默认构造函数和赋值构造函数.默认构造函数的作用:如果类在新建对象时不提供参数,那么这个对象被初始化为(0,0,0).赋值构造函数的作用:如果一个对象需要赋值给另一个对象,那么该方法能够提供该类像一般数据类型(int,float,double等)一样的赋值方式.为了描述一个三角面片,设计了一个Triangle类存放三个顶点和法向量,其UML如下.Triangle-p1:Point-p2:Point-p3:Point-flag:int+Triangle()+Triangle(const Triangle & triangle)+Triangle(Point p1,Point p2,Point p3)+getP1() const:Point+getP2() const:Point+getP3() const:Point+getFlag() const:int+setP1(Point p1):void+setP2(Point p1):void+setP3(Point p1):void+setFlag(int f):void+setValue(Point p1,Point p2,Point p3):voidTriangle类中包含了4个私有成员,它分别是三角形的三个顶点类和一个标志变量.标志变量flag用于在分层切片处理时标示类实例的访问状态.若该三角面片对象在切片时被访问,则该标志变量设置为Ture,否则设置为False.Triangle类也定义了相应的get和set方法,用于将Triangle类的属性封装到内部,不直接访问,而通过get和set方法进行访问,这样有助于提高Triangle类的安全性,符合面向对象设计的封装要求.Triangle类有三个构造函数,分别是默认构造函数、复制构造函数和带参数的构造函数.通过这些构造函数,Triangle类能够像一般数据类型一样使用.为了描述所有的三角面片,用一个STLModel类来存放所有三角形面片.STLModel-facets:QVector〈Triangle〉-normals:QVector〈Point〉+STLModel(const QString & fileName)+getOutline(double z):QVector〈QVector〈Point〉〉+getFillLine(const QVector〈QVector〈Point〉〉 & outlines,double theta,double interval,double coff):QVector〈QVector〈Point〉〉+getOffsetFillLine(const QVector〈QVector〈Point〉〉 & outlines,double interval):QVector〈QVector〈Point〉〉+getFacets():QVector〈Triangle〉+offsetOutline(const QVector〈Point〉 & outline,double offsetDistance):QVector〈Point〉在STLModel类中使用了Triangle类和Point类.STL模型的读入操作被定义于构造函数中,每当新建一个STLModel对象时,输入STL文件名载入相应的STL模型.由于法向量只有三个分量,因此法向量可以用Point类描述,不必单独定义向量类.一个STLModel由一个三角形数组和法向量数组组成.此外,STLModel类中还定义了许多与分层切片和后续路径规划相关的函数,如分层切片得到轮廓多边形的函数、轮廓修复函数、直线填充函数、轮廓偏移填充函数及机器指令转换函数等.2 电弧增材再制造分层切片算法2.1 基于增材方向排序的分层算法2.1.1 三角面片与切平面交点计算STL模型的分层切片算法按照每层厚度是否相同可以分为均匀分层[13]和非均匀分层[14].现有的STL模型分层切片算法,如直接搜索法、基于拓扑信息的分层算法和基于三角面片分组的分层算法等,对复杂型腔锻模的模型切片存在切片效率低、效果差等缺陷[15].针对复杂型腔锻模电弧增材再制造的分层切片,提出了一种在分层前对所有三角面片进行排序,然后求解三角面片与切平面交点并重构为环的分层算法,使获得切片轮廓的时间大大减少.STL模型的分层切片过程是求解空间三角形与一定高度平面(z=C)的交点,STL模型分层切片示意图如图1所示.10.13245/j.hust.210108.F001图1STL模型分层切片示意图三角形v1v2v3分别与平面z1,z2和z3相交于一个顶点、一个顶点和一条边、两条边.三角形任意边的空间直线方程可根据三角形顶点坐标算得,其计算公式如下x1-xv1xv2-xv1=y1-yv1yv2-yv1=z1-zv1zv2-zv1;x2-xv2xv2-xv3=y2-yv2yv2-yv3=z2-zv2zv2-zv3;x3-xv1xv3-xv1=y3-yv1yv3-yv1=z3-zv1zv3-zv1,式中:x1,y1和z1为v1v2线段的直线方程的未知量;x2,y2和z2为v2v3线段的直线方程的未知量;x3,y3和z3为v1v3线段的直线方程的未知量.当切片高度固定时,通过v1,v2和v3的z坐标数值,可确定三角形与切平面相交的边,并带入空间直线方程可计算出交点,每个三角形与切平面有两个或一个交点.由于三维模型可能存在内孔,因此切片轮廓多边形有内外轮廓之分,外轮廓正方向定义为逆时针方向,内轮廓正方向定义为顺时针方向.法向量指出了三角形的内外关系,通过三角形面片的法向量可以判断交点的起点和终点.三角面片法向量与切出的两点构成的向量用右手螺旋定则判断方向,即若叉积的z分量大于零,则起点为P1终点为P2,否则起点为P2终点为P1,因此三角形与切平面相交可得到一个有向线段.依次将所有有向线段的起点存入起点数组中,终点存入终点数组中,便于后续组合成环时使用.2.1.2 轮廓多边形生成遍历所有与切平面相交的三角面片并求出交点,起点存入数组S中,终点存入数组E中,若只有一个交点则既存入起点数组也存入终点数组.对数组S和E进行依次循环,并分别为S和E数组设置一个标记数组,全部初始化为False.将S数组所对应的E数组元素作为当前点,并在S数组中寻找与当前点相等的点,若相等则将S中的该点对应于E中相同下标的点作为新的当前点,并把当前点保存到轮廓链表中,此外把标志数组中对应下标的元素置为True,依次循环.当前点等于最开始设定的点时表明此时轮廓点序列已封闭,跳出循环;若标记数组不全为True,则继续进行新一轮循环,并重复上述步骤组合形成新的轮廓,当所有标记数组中的元素都为True时退出循环,切片有向线段重组成环的过程如图2所示.10.13245/j.hust.210108.F002图2切片有向线段重组成环的过程由于起点和终点数组点的存放是根据三角片面的法向量来判断的,因此得到的点序列满足内轮廓为顺时针,外轮廓为逆时针的规则.通过这样的算法便可较为容易地得到每一个切平面的切片轮廓.判断两点相等的判据为(p1x-p2x)2+(p1y-p2y)2+(p1y-p2y)2r,式中r为容差,是一个很小的浮点数.在C++中定义的Point类只须重载“==”符号并在函数中实现该判据便可实现点的相等判断.2.2 轮廓修复插值算法STL模型的分层轮廓不够光滑,这对后续增材机器人的运动加速度冲击比较大,对机器人的稳定性不利.为了方便后续处理及提高轮廓精度,须对分层切片后的轮廓进行拟合插值处理.通常对于函数曲线,其拟合插值算法较为简单.然而复杂型腔锻模的切片轮廓是一个封闭轮廓,是典型的复杂多边形.多边形上点的x与y坐标不满足一对多或者一对一映射关系.为定量描述横坐标x与纵坐标y之间的关系,引入参数t,定义为从坐标原点沿着轮廓到轮廓任意一点的累积弧长,t=∫(0,0)(x,y)dx2+dy2/s,式中:dx2+dy2为弦长微元;s为整个轮廓的周长.对于非连续的边界而言,截面轮廓多边形是离散的有序点集,可以采用其离散公式计算,即ti=∑j=2i(xj-x(j-1))2+(yj-y(j-1))2)∑j=2n(xj-x(j-1))2+(yj-y(j-1))2),式中:xj和yj为多边形轮廓上第j个交点横纵坐标;n为总的点数目.引入参数后,x与t,y与t都满足函数映射准则.通过上式可以得到t与x,y之间的离散映射,然后使用B样条对这些点拟合得到轮廓横纵坐标之间的参数方程x=f(t);y=g(t),式中f(t)和g(t)可通过B样条拟合确定.将t在[0,1]区间内离散,并带入参数方程,便可获得插值后较为光滑和分布均匀的轮廓坐标点.通过弦长累积参数化方法,可将轮廓x和y之间的非函数映射转换为x-t和y-t之间的函数映射,因此常规插值和拟合算法可分别对x-t和y-t进行处理.随着t的增加,x总体趋势是先减小后增加,y的总体趋势是减小和增加交替进行,这说明轮廓多边形在y方向上下起伏较大.插值后的分层曲轴轮廓明显比原始分层轮廓过渡更光滑、精度更高.STL模型切片所得轮廓是由长短不同的线段组成,利用该方法可以提高轮廓精度,插值后轮廓点更均匀,对复杂多边形的拟合插值高效且编程简单.2.3 内外轮廓判断算法在进行填充路径规划之前,须对分层切片算法获得的多边形轮廓进行偏移处理,以便于预留加工余量和提高成形精度.偏移轮廓时首先须判断轮廓多边形的方向,即须判断多边形是内轮廓(顺时针)还是外轮廓(逆时针),此时须用到内外轮廓判断算法.根据之前的定义,外轮廓多边形的点序列为逆时针排列,内轮廓多边形的点序列为顺时针排列.多边形按照几何形状可分为凸多边形和凹多边形,凹多边形的顺逆关系在凹点周围判断较为困难.基于格林公式的算法判断轮廓多边形方向鲁棒性较好,算法复杂度为O(n),对于大规模问题而言效率依然很高,并且无须判断多边形的凹凸性,对于复杂多边形其不存在误判,具有编程简单、程序可靠性高等优点.格林公式∬D(∂Q∂x-∂P∂y)ds=∮l(Pdx+Qdy),式中:l为区域D的逆时针方向边界线,即逆时针方向的轮廓边界曲线;P为x的待定函数;Q为y的待定函数.格林公式揭示了平面区域二重积分与平面曲线积分之间的关系,若令Q=x,P=0,则根据格林公式导出A=∬Dds=∮lxdy,式中A为区域D的面积.若积分路径为逆时针,则积分为正;若积分路径为顺时针,则积分为负.可通过计算曲线积分的正负值判断多边形边界为内轮廓还是外轮廓.对于离散的多边形边界而言,计算曲线积分可使用离散计算公式A=∮lxdy=12∑i=1n(xi+1+xi)(yi+1-yi),式中n为多边形离散点的个数.通过该公式并依次向后遍历轮廓链表便可计算面积积分A.采用格林公式的优点是不论多边形有多复杂,都能在线性复杂度下进行判断多边形的顺逆关系,并且编程相对比较简单,容易实现.3 增材试制将失效曲轴锻模的目标模型导入自主开发的WAAM工艺规划软件,结合待选增材材料的最优工艺参数及对应焊道形状,可以高效地获得目标模型逐层的切片轮廓.在获得了模具成形路径规划数据后,将导出的指令文件导入模拟软件中.曲轴锻模电弧增材再制造过程如图3所示,将轨迹规划数据传输给增材制造试验机,得到了如图4所示的曲轴锻模产品.图3中红色线表示焊枪移动的轨迹,累积形成曲轴修复部分的三维形状,曲轴模具的型腔区域也能够通过模拟增材过程清晰地展现出来.模拟结果表明焊接过程中焊枪的移动比较合理,没出现异常情况.由图4可知,模具表面质量较好、光洁度较高.10.13245/j.hust.210108.F003图3曲轴锻模电弧增材再制造过程10.13245/j.hust.210108.F004图4增材试制的曲轴锻模产品4 结论a. 针对STL模型ASCII码格式文件设计了相应的正则表达式,实现了三角面片点坐标和法向量的精准匹配.针对STL模型的结构特点,设计了Point,Triangle和STLModel三个类对模型的数据进行存储,类中也定义了处理和操作数据的方法.b. 提出了一种通过法向量判断三角形与切平面相交两交点的起点和终点顺序,进而通过遍历起点和终点数组来创建轮廓多边形环的复杂型腔锻模分层切片算法.c. 引入了提高轮廓多边形精度的插值拟合修复算法,分别对其进行拟合和插值.推导出轮廓顺逆判据的一般公式,并构建了离散多边形的计算式.d. 采用改进方法进行了失效曲轴模具的增材修复过程模拟仿真和实验,得到了表面成形质量较好、光洁度较高的模具产品,验证了自动增材制造工艺的可靠性.

使用Chrome浏览器效果最佳,继续浏览,你可能不会看到最佳的展示效果,

确定继续浏览么?

复制成功,请在其他浏览器进行阅读