一种基于SolidWorks二次开发的管材切割仿真方法

文档序号:8150 发布日期:2021-09-17 浏览:26次 英文

一种基于SolidWorks二次开发的管材切割仿真方法

技术领域

本发明涉及数控加工领域,具体涉及一种基于SolidWorks二次开发的管材切割仿真方法。

背景技术

SolidWorks是达索系统(Dassault Systemes)旗下基于Windows开发的三维CAD系统,其功能强大、组件繁多。

SolidWorks使用了Windows OLE技术、直观式设计技术、先进的parasolid内核以及良好的与第三方软件的集成技术,在全球占有较大的市场份额。

由于SolidWorks主要专注于计算机辅助设计(CAD),在计算机辅助制造(CAM)刀路处理方面涉及不多,特别是针对激光切管机的刀路处理插件相当少,而传统刀路生成软件在针对SolidWorks设计的零件上需要经过大量计算才能生成刀路,效率较低,在线条处理方面特别是圆弧上判断不精确,根据刀路生成的仿真质量较差,无法真实的模拟实际的切割操作过程,且在仿真复杂零件时,仿真速度较慢,影响工作效率。。

因此,需要提出一种基于SolidWorks二次开发的管材切割仿真方法以辅助激光切割管材的生产加工过程。

发明内容

为了解决上述技术问题,本发明的目的在于提供一种基于SolidWorks二次开发的管材切割仿真方法,其使用SolidWorks软件提供的二发开发接口,针对管材零件已生成的刀路信息做仿真处理,可以模拟展示管材切割的全过程,用户可以直观的观看到切割的整个流程,方便用户对切割过程进行把控和验证。同时对仿真流程做了一部分优化,解决了复杂零件仿真速度较慢的问题,提升了复杂零件仿真的速度,提高了工作效率。

为实现上述发明目的,本发明采取的技术方案如下:

一种基于SolidWorks二次开发的管材切割仿真方法,包括以下步骤:

步骤S1:通过管材截面及轮廓分析模块分析管材零件文档的轮廓;

步骤S2:通过刀路信息生成模块生成刀路信息;

步骤S3:通过管材切割仿真模块根据步骤S2生成的刀路信息进行管材切割仿真。

优选的,所述步骤S1中包括以下步骤:

步骤S1.1:在SolidWorks中创建新的零件设计文档进行管材模型设计生成零件文档,或者直接打开已存在的零件文档;

步骤S1.2:通过对管材截面及轮廓进行分析,并对管材的尺寸参数进行分析;该截面类型包括圆、矩形、椭圆形、三角形、腰圆形、六边形、L形、工字形、槽形;该轮廓的几何元素包括面、封闭轮廓、边;该尺寸参数包括长、宽、高、圆半径、倒角半径。

步骤S1.3:将所述步骤S1.2输出的管材零件模型参数信息进行缓存。

优选的,所述步骤S2中刀路信息生成模块通过将步骤S1的分析结果与用户设定的参数结合后,生成刀路信息;所述步骤S3中通过管材切割仿真模块根据步骤S2生成的刀路信息结合用于设定的仿真参数,对管材整个切割过程进行仿真显示。

优选的,所述步骤S3中包括以下步骤:

步骤S3.1:在SolidWorks中加载仿真配置;

步骤S3.2:获取步骤S2已生成的刀路信息,并将生成好的刀路信息复制一份加载到内存中;便于后续操作;

步骤S3.3:按照步骤S2生成的刀路信息数据或调用内存中存储的步骤S2生成的刀路信息数据,循环处理第n个封闭轮廓,其中1≤n≤轮廓总数;

若轮廓已处理完成,则执行步骤S3.11;

否则执行步骤S3.4;

步骤S3.4:判断当前要处理的轮廓是否有需要处理的边;

如果是,则执行步骤S3.5,

否则使n=n+1并执行步骤S3.3,处理第n+1个封闭轮廓;

步骤S3.5:循环处理当前轮廓的第m个边,其中1≤m≤当前轮廓边的总数;

若m>当前轮廓边的总数,则边已处理完成,使n=n+1,执行步骤S3.3,处理第n+1个封闭轮廓中的轮廓;

否则执行步骤S3.6;

步骤S3.6:根据仿真配置信息,对仿真零件的显示坐标做变换处理;

步骤S3.7:加载激光头和卡盘的信息到内存中保存;

步骤S3.8:判断所有轮廓是否都已仿真完毕;

若轮廓已处理完成,则执行步骤S3.13;

否则执行步骤S3.9;

步骤S3.9:获取用户设定的实时速度值,此速度值为激光头运动的实时速度值,可以直接影响到仿真速度的快慢,获取到速度值后执行步骤S3.10;

步骤S3.10:判断用户是否输入了退出按钮;

若如果用户有退出操作,则执行步骤S3.13;

否则执行步骤S3.11;

步骤S3.11:按照当前Z轮廓信息对激光头和卡盘的显示信息做矩阵变换,其中1≤Z≤轮廓总数;

若当前Z轮廓信息对激光头和卡盘的显示信息的矩阵变换已处理完成,则执行步骤S3.12;

否则进行激光头和卡盘显示信息的矩阵变化;

步骤S3.12:按照当前Z轮廓信息对仿真零件的显示信息进行矩阵变换;

若当前Z轮廓信息对仿真零件的显示信息进行矩阵变换处理完成,使Z=Z+1,则执行步骤S3.8;

否则执行仿真零件的显示坐标变化,并调用SolidWorks零件显示接口对仿真零件进行显示,及利用OpenGL对仿真轨迹进行描画;

步骤S3.13:结束仿真流程。

作为更优选的,所述步骤S3.6中对仿真零件的显示坐标做变换处理步骤包括:在零件文档中画出刀路坐标系,计算刀路坐标系相对世界坐标系的变换矩阵,根据该变换矩阵将设计好的仿真零件模型映射到刀路坐标系中。

优选的,所述仿真配置的配置信息包括卡盘位置、死区长度、激光头位置。

优选的,在步骤S3仿真显示过程中对仿真速度进行了优化处理,所述优化处理步骤包括:

a1.加载激光头信息到内存中;这样在仿真过程中激光头信息只会被载入一次,防止程序频繁读取激光头信息而浪费资源导致速度降低。激光头包含刀肩组件、刀臂组件和刀具组件三部分,其中刀具组件位于最下方,仿真时直接运动在刀路轨迹上方。刀肩组件、刀臂组件和刀具组件的组合是模拟真实的激光头形状,可以用事先保存好的简单图形文件代替;

a2.将激光头和仿真零件做组合,根据仿真零件的轮廓Loop信息,变换激光头的位置显示信息;轮廓Loop的信息主要包括轮廓中每条边的信息、引入引出线信息、是否是共边信息、拐角信息、是否是第一个或最后一个轮廓的信息、补偿信息;

a3.动态加载每个切割轮廓Loop信息,在切割前只变换当前零件轮廓Loop和激光头的位置及姿态,达到快速变换的目的;

a4.将激光头最下方的刀具组件与步骤S2的刀路信息中生成的法向量进行融合,并做相应的矩阵变换;

a5.在动态仿真过程中,处理完当前轮廓Loop的仿真后,删除当前轮廓Loop的配合关系特征,并计算下一个轮廓Loop切割法向量数据,重新建立配合关系;

a6.循环至切割终点后完成仿真流程。

优选的,所述步骤a4中的矩阵变换过程如下:

a4.1:在刀路信息中读取切割点位置(X、Y、Z)的值,然后通过切割点位置切割点位置(X,Y,Z)与激光束方向(i,j,k)求解激光头姿态B,C:

由上面的公式可以得到如下B、C的值

其中λ代表NURBS曲线采用弦长方法对曲线做参数化后得到的切割点沿曲线的曲线参数;

a4.2:进行矩阵变换:

将设定好的数组转换成MathTransform对象,数组中包含16个元素,其元素顺序与齐次矩阵的对应关系如下:

其中前9个元素(ArrayData[0]~ArrayData[8])构成3×3的旋转子矩阵,后接3个元素(ArrayData[9]~ArrayData[11])表示平移向量,下1个元素(ArrayData[12])是比例因子,μ代表激光头运动的三维向量;θ代表运动法线的三维向量,ω代表前面两个向量的交叉积,p是运动的平移向量,w是比例因子,默认值为1;旋转子矩阵和平移向量元素的定义和齐次矩阵中元素的定义一致,由旋转子矩阵、平移向量和比例因子共同生成了切割仿真的矩阵变换。

SolidWorks中不可直接使用数组变换矩阵完成对组件的齐次变换,因此使用时须将设定好的数组转换成MathTransform对象,MathTransform对象为数学变换后的对象。本发明中最后三个元素(ArrayData[13]~ArrayData[15])没有使用。

优选的,编制所述切割仿真方法所用的程序语言是C语言、C++语言、C#语言、Basic语言中的一种或多种。

作为更优选地,编制所述方法所用的程序语言是C++语言。

优选的,所述步骤S2中包括以下步骤:

步骤S2.1:在SolidWorks中加载刀路配置,该刀路配置包括插补步长、公差;

步骤S2.2:设置刀路切割法向方向,该方向包含曲面法线、5轴切割;

步骤S2.3:读取所述管材截面及轮廓分析模块中缓存的管材零件模型参数信息数据,循环处理第n个封闭轮廓,其中,1≤n≤轮廓总数;

若n>轮廓总数,则轮廓已处理完成,执行步骤S2.11;

否则执行步骤S2.4;

步骤S2.4:判断当前要处理的轮廓是否为外轮廓:

如果是,执行步骤S2.5;

否则,n=n+1并执行步骤S2.3;

步骤S2.5:循环处理当前轮廓的第m个边,其中,1≤m≤当前轮廓边的总数;

若m>当前轮廓边的总数,则边已处理完成,n=n+1,执行步骤S2.3;

否则执行步骤S2.6;

步骤S2.6:判断当前边的线条类型,该线条类型在所述管材截面及轮廓分析模块中已分析计算,线条类型包括直线、规则圆弧、B样条曲线;

若线条类型为直线,则执行步骤S2.7;

若线条类型为规则圆弧,则执行步骤S2.8;

若线条类型为B样条曲线,则执行步骤S2.9;

步骤S2.7:计算直线的起始点坐标并缓存;

步骤S2.8:计算圆弧的圆心坐标及半径;

步骤S2.9:通过B样条曲线插补法离散线条;

步骤S2.10:生成当前边的离散节点坐标及对应刀具向量,m=m+1,并执行所述步骤S2.5;

步骤S2.11:以零件长度X方向为主向,对已生成节点的轮廓进行排序;

步骤S2.12:读取引线配置并为每个轮廓生成引线,引线包括引入线、引出线;

步骤S2.13:在管材零件模型中显示刀路轨迹及刀具法线;

步骤S2.14:对刀路数据进行序列化并进行保存。

优选的,所述步骤S2.4包括以下步骤:

步骤S2.4.1:利用SolidWorks二次开发接口获取零件的所有面放入数组中,并根据面的面积从大到小对数组进行排序,得到数组listFace;

步骤S2.4.2:对数组listFace的每个面进行进行循环分析,分出内外表面,具体方法如下:

步骤S2.4.2.1:取第i个面listFace[i],其中,0≤i<listFace数组大小,并取面的任意一点;

步骤S2.4.2.2:在该点处取面的法线;

步骤S2.4.2.3:遍历其他面face1,通过SolidWorks二次开发接口判断面face1与分析的面listFace[i]是否平行:

如果平行且法线也经过face1面,则认为face1面与分析的面listFace[i]是匹配的内外面;

步骤S2.4.2.4:如果face1面的面积小于分析面listFace[i],则face1面为内表面,分析面listFace[i]为外表面;

步骤S2.4.3:利用SolidWorks二次开发接口获取每个面的轮廓,如果轮廓所在面为外表面,则该轮廓为外轮廓,否则为内轮廓。

相对于现有技术,本发明取得了有益的技术效果:

提供一种基于SolidWorks二次开发的管材切割仿真方法,通过使用SolidWorks软件提供的二发开发接口,采用C++作为优选的开发语言,针对管材已生成的刀路信息对管材整个切割过程进行仿真展示,便于用户掌握整个切割过程。通过对已优化的刀路信息进行仿真模拟,可有效的提升对切割过程的全掌控,提升工作效率。有效的避免在生产环境中出现切割错误情况的发生。同时在对复杂零件做仿真的情况下,由于减少了系统读取开销,并通过多次加载,减少每次加载计算量的方式,提高了仿真速度,提升了工作效率。

附图说明

图1是本发明实施例中管材切割仿真方法中各模块的运行原理框图;

图2是本发明实施例中步骤S2的原理框图;

图3是本发明实施例中步骤S3的原理框图;

图4是本发明实施例中步骤S3中仿真优化处理的原理框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例对本发明进行进一步详细说明,但本发明要求保护的范围并不局限于下述具体实施例。

实施例

参考图1,本实施例公开了一种基于SolidWorks二次开发的管材切割仿真方法,参考图1,采用管材截面及轮廓分析模块、刀路信息生成模块以及仿真处理模块。

优选地,编制管材切割仿真方法所用的程序语言是C语言、C++语言、C#语言或Basic语言。

优选地,编制管材切割仿真方法所用的程序语言是C++语言。

基于SolidWorks二次开发的管材切割仿真方法,包括以下步骤:

步骤S1:通过管材截面及轮廓分析模块分析管材零件文档的轮廓;

步骤S2:通过刀路信息生成模块生成刀路信息;

步骤S3:通过管材切割仿真模块根据步骤S2生成的刀路信息进行管材切割仿真。

具体的,所述步骤S1中包括以下步骤:

步骤S1.1:在SolidWorks中创建新的零件设计文档进行管材模型设计生成零件文档,或者直接打开已存在的零件文档;

步骤S1.2:通过对管材截面及轮廓进行分析,并对管材的尺寸参数进行分析;该截面类型包括圆、矩形、椭圆形、三角形、腰圆形、六边形、L形、工字形、槽形;该轮廓的几何元素包括面、封闭轮廓、边;该尺寸参数包括长、宽、高、圆半径、倒角半径。

步骤S1.3:将所述步骤S1.2输出的管材零件模型参数信息进行缓存。

所述步骤S2中刀路信息生成模块通过将步骤S1的分析结果与用户设定的参数结合后,生成刀路信息;所述步骤S3中通过管材切割仿真模块根据步骤S2生成的刀路信息结合用于设定的仿真参数,对管材整个切割过程进行仿真显示。

具体的,参考图2,所述步骤S2中包括以下步骤:

步骤S2.1:在SolidWorks中加载刀路配置,该刀路配置包括插补步长、公差;

步骤S2.2:设置刀路切割法向方向,该方向包含曲面法线、5轴切割;

步骤S2.3:读取所述管材截面及轮廓分析模块中缓存的管材零件模型参数信息数据,循环处理第n个封闭轮廓,其中,1≤n≤轮廓总数;

若n>轮廓总数,则轮廓已处理完成,执行步骤S2.11;

否则执行步骤S2.4;

步骤S2.4:判断当前要处理的轮廓是否为外轮廓:

如果是,执行步骤S2.5;

否则,n=n+1并执行步骤S2.3;

步骤S2.5:循环处理当前轮廓的第m个边,其中,1≤m≤当前轮廓边的总数;

若m>当前轮廓边的总数,则边已处理完成,n=n+1,执行步骤S2.3;

否则执行步骤S2.6;

步骤S2.6:判断当前边的线条类型,该线条类型在所述管材截面及轮廓分析模块中已分析计算,线条类型包括直线、规则圆弧、B样条曲线;

若线条类型为直线,则执行步骤S2.7;

若线条类型为规则圆弧,则执行步骤S2.8;

若线条类型为B样条曲线,则执行步骤S2.9;

步骤S2.7:计算直线的起始点坐标并缓存;

步骤S2.8:计算圆弧的圆心坐标及半径;

步骤S2.9:通过B样条曲线插补法离散线条;

步骤S2.10:生成当前边的离散节点坐标及对应刀具向量,m=m+1,并执行所述步骤S2.5;

步骤S2.11:以零件长度X方向为主向,对已生成节点的轮廓进行排序;

步骤S2.12:读取引线配置并为每个轮廓生成引线,引线包括引入线、引出线;

步骤S2.13:在管材零件模型中显示刀路轨迹及刀具法线;

步骤S2.14:对刀路数据进行序列化并进行保存。

优选的,所述步骤S2.4包括以下步骤:

步骤S2.4.1:利用SolidWorks二次开发接口获取零件的所有面放入数组中,并根据面的面积从大到小对数组进行排序,得到数组listFace;

步骤S2.4.2:对数组listFace的每个面进行进行循环分析,分出内外表面,具体方法如下:

步骤S2.4.2.1:取第i个面listFace[i],其中,0≤i<listFace数组大小,并取面的任意一点;

步骤S2.4.2.2:在该点处取面的法线;

步骤S2.4.2.3:遍历其他面face1,通过SolidWorks二次开发接口判断面face1与分析的面listFace[i]是否平行:

如果平行且法线也经过face1面,则认为face1面与分析的面listFace[i]是匹配的内外面;

步骤S2.4.2.4:如果face1面的面积小于分析面listFace[i],则face1面为内表面,分析面listFace[i]为外表面;

步骤S2.4.3:利用SolidWorks二次开发接口获取每个面的轮廓,如果轮廓所在面为外表面,则该轮廓为外轮廓,否则为内轮廓。

具体的,参考图3,所述步骤S3中包括以下步骤:

步骤S3.1:在SolidWorks中加载仿真配置,所述仿真配置的配置信息包括卡盘位置、死区长度、激光头位置;

步骤S3.2:获取步骤S2已生成的刀路信息,并将生成好的刀路信息复制一份加载到内存中;便于后续操作;

步骤S3.3:按照步骤S2生成的刀路信息数据或调用内存中存储的步骤S2生成的刀路信息数据,循环处理第n个封闭轮廓,其中1≤n≤轮廓总数;

若轮廓已处理完成,则执行步骤S3.11;

否则执行步骤S3.4;

步骤S3.4:判断当前要处理的轮廓是否有需要处理的边;

如果是,则执行步骤S3.5,

否则使n=n+1并执行步骤S3.3,处理第n+1个封闭轮廓;

步骤S3.5:循环处理当前轮廓的第m个边,其中1≤m≤当前轮廓边的总数;

若m>当前轮廓边的总数,则边已处理完成,使n=n+1,执行步骤S3.3,处理第n+1个封闭轮廓中的轮廓;

否则执行步骤S3.6;

步骤S3.6:根据仿真配置信息,对仿真零件的显示坐标做变换处理;

步骤S3.7:加载激光头和卡盘的信息到内存中保存;

步骤S3.8:判断所有轮廓是否都已仿真完毕;

若轮廓已处理完成,则执行步骤S3.13;

否则执行步骤S3.9;

步骤S3.9:获取用户设定的实时速度值,此速度值为激光头运动的实时速度值,可以直接影响到仿真速度的快慢,获取到速度值后执行步骤S3.10;

步骤S3.10:判断用户是否输入了退出按钮;

若如果用户有退出操作,则执行步骤S3.13;

否则执行步骤S3.11;

步骤S3.11:按照当前Z轮廓信息对激光头和卡盘的显示信息做矩阵变换,其中1≤Z≤轮廓总数;

若当前Z轮廓信息对激光头和卡盘的显示信息的矩阵变换已处理完成,则执行步骤S3.12;

否则进行激光头和卡盘显示信息的矩阵变化;

步骤S3.12:按照当前Z轮廓信息对仿真零件的显示信息进行矩阵变换;

若当前Z轮廓信息对仿真零件的显示信息进行矩阵变换处理完成,使Z=Z+1,则执行步骤S3.8;

否则执行仿真零件的显示坐标变化,并调用SolidWorks零件显示接口对仿真零件进行显示,及利用OpenGL对仿真轨迹进行描画;

步骤S3.13:结束仿真流程。

作为更优选的,所述步骤S3.6中对仿真零件的显示坐标做变换处理步骤包括:在零件文档中画出刀路坐标系,计算刀路坐标系相对世界坐标系的变换矩阵,根据该变换矩阵将设计好的仿真零件模型映射到刀路坐标系中。

在仿真流程中如果仿真零件的特征较多,可能会出现仿真速度较慢的情况。参考图4,针对这种情况对步骤S3所涉及的仿真模块进行了优化处理,所述优化处理步骤包括:

a1.加载激光头信息到内存中;这样在仿真过程中激光头信息只会被载入一次,防止程序频繁读取激光头信息而浪费资源导致速度降低。激光头包含刀肩组件、刀臂组件和刀具组件三部分,其中刀具组件位于最下方,仿真时直接运动在刀路轨迹上方。刀肩组件、刀臂组件和刀具组件的组合是模拟真实的激光头形状,可以用事先保存好的简单图形文件代替;

a2.将激光头和仿真零件做组合,根据仿真零件的轮廓Loop信息,变换激光头的位置显示信息;轮廓Loop的信息主要包括轮廓中每条边的信息、引入引出线信息、是否是共边信息、拐角信息、是否是第一个或最后一个轮廓的信息、补偿信息等;

a3.动态加载每个切割轮廓Loop信息,在切割前只变换当前零件轮廓Loop和激光头的位置及姿态,达到快速变换的目的;

a4.将激光头最下方的刀具组件与步骤S2的刀路信息中生成的法向量进行融合,并做相应的矩阵变换;

a5.在动态仿真过程中,处理完当前轮廓Loop的仿真后,删除当前轮廓Loop的配合关系特征,并计算下一个轮廓Loop切割法向量数据,重新建立配合关系;

a6.循环至切割终点后完成仿真流程。

优选的,所述步骤a4中的矩阵变换过程如下:

a4.1:在刀路信息中读取切割点位置(X、Y、Z)的值,然后通过切割点位置切割点位置(X,Y,Z)与激光束方向(i,j,k)求解激光头姿态B,C:

由上面的公式可以得到如下B、C的值

a4.2:进行矩阵变换:

其中λ代表NURBS曲线采用弦长方法对曲线做参数化后得到的切割点沿曲线的曲线参数;

将设定好的数组转换成MathTransform对象,数组中包含16个元素,其元素顺序与齐次矩阵的对应关系如下:

其中前9个元素(ArrayData[0]~ArrayData[8])构成3×3的旋转子矩阵,后接3个元素(ArrayData[9]~ArrayData[11])表示平移向量,下1个元素(ArrayData[12])是比例因子,μ代表激光头运动的三维向量;θ代表运动法线的三维向量,ω代表前面两个向量的交叉积,p是运动的平移向量,w是比例因子,默认值为1;旋转子矩阵和平移向量元素的定义和齐次矩阵中元素的定义一致,由旋转子矩阵、平移向量和比例因子共同生成了切割仿真的矩阵变换。

SolidWorks中不可直接使用数组变换矩阵完成对组件的齐次变换,因此使用时须将设定好的数组转换成MathTransform对象,MathTransform对象为数学变换后的对象。本发明中最后三个元素(ArrayData[13]~ArrayData[15])没有使用。

通过对已优化的刀路信息进行仿真模拟,可有效的提升对切割过程的全掌控,提升工作效率。有效的避免在生产环境中出现切割错误情况的发生。同时在对复杂零件做仿真的情况下,由于减少了系统读取开销,并通过多次加载,减少每次加载计算量的方式,提高了仿真速度,提升了工作效率。

根据上述说明书的揭示和教导,本发明所属领域的技术人员还可以对上述实施方式进行变更和修改。因此,本发明并不局限于上面揭示和描述的具体实施方式,对发明的一些修改和变更也应当落入本发明的权利要求的保护范围内。此外,尽管本说明书中使用了一些特定的术语,但这些术语只是为了方便说明,并不对发明构成任何限制。

完整详细技术资料下载
上一篇:石墨接头机器人自动装卡簧、装栓机
下一篇:基于路段夹角渐变特征的路网通行方向判别方法和系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类