基于SolidWorks的自动焊缝标注的二次开发

2020-05-21 03:33张泽南仲梁维
软件工程 2020年5期
关键词:二次开发

张泽南 仲梁维

摘  要:在进行大型焊接零部件设计时,在现有的三维设计软件中设计人员通常采用多实体零件的设计方式进行设计,但是在工程图中焊缝的标注往往是十分费时和费力的,同时为了统计模型中的焊缝信息形成相应的焊缝清单,目前任是人工操作,大大增加了工作量和焊接件的设计周期。文章主要基于SolidWorks三维设计软件,采用C#编程语言,利用SolidWorks对外开放的API函数接口,结合实际的焊缝识别准则,实现了自动提取多实体三维设计模型中的焊缝信息,采用SQLServer数据库对焊缝信息进行存储与读取,并在工程图中进行自动焊缝标注,同时导出对应的焊缝清单。大大减少了人工进行焊缝识别和标注的过程,提高了焊接件的工程图的出图效率,对于减少焊接件的设计周期有着现实的意义。

关键词:焊缝识别;自动标注;多实体零件;二次开发;SolidWorks

中图分类号:TP319     文献标识码:A

Abstract: When designing large welded parts, the existing 3-d design software designers usually design the parts as separate entities, but the drawing of the weld marks tend to be very time-consuming and laborious, and at the same time in order to form the corresponding weld mark list, the task is now a manual operation, which greatly increased the workload and product design cycle. Based on SolidWorks 3-d design software, the paper uses C# programming language, SolidWorks open API interface, and the actual welding seam recognition criteria to achieve the automatic extraction of multi-entity weld information in three-dimension design model, SQLServer database is used to store and save the weld information, carries out automatic weld marking of engineering drawing, and export the corresponding weld listing at the same time. It greatly simplifies the process of manual identification and marking of welding seams, and improves the efficiency of engineering drawing of welding parts, with practical significance for reducing the design cycle of welding parts.

Keywords: weld identification; automatic marking; multiple solid parts; secondary development; SolidWorks

1   引言(Introduction)

焊接与连接是国家自然科学基金委员会机械工程学科的重要领域,是零部件成形制造的重要工艺方法,是实现大到巨型结构小到微纳器件轻量化和功能化的主要途径之一,对实现装备制造绿色环保和节能减排具有重要意义[1]。焊接技术被誉为工业的裁缝,在工业化发展的进程中,焊接在船舶、汽车、航空航天、军事等领域发挥着不可替代的作用。21世纪的制造业正在逐步向“数字化”“智能化”方向发展,焊接也正顺应着这种趋势,向自动化焊接的方向快步前进[2,3]。在SolidWorks三维设计软件中对焊接件进行设计,工程图进行标注时,需要手动标注和识别焊缝,对于焊缝的信息需要人工进行测量和导出,当焊接件的实体数量庞大时,设计人员的工作量大幅度的增加,且容易出错。SolidWorks是基于特征的三维参数化造型软件,对于用户的自定义二次开发提供了良好的支持,在SolidWorks中进行程序化建模时,需要针对SolidWorks进行二次开发,通过SolidWorks API接口,编制能够嵌入SOLIDWORKS的插件,通过调用插件进行程序化绘图[4]。运用二次开发技术,结合Visual Studio2012开发平台可实现特定功能的产品开发,可以拓展和弥补SolidWorks自身的不足。

2   开发原理(Development principle)

SolidWorks提供了完整的免费的二次开发工具API,凡是支持COM编程的开发工具,如Visual C++6.0(以下简称VC++)、Visual Basic、Delphi等均可直接调用这些API函数开发出用户自己的程序模块,提高设计的效率与正确率[5]。为了方便用户进行二次开发,SolidWorks提供了幾百个API接口。这些API接口分为两种,即OLE Automation的IDispatch和作为Windows基础的COM(Component Object Model组件对象模型)[6]。对应的SolidWorksAPI对象模型如图1所示,它是一个自上而下的树型结构。

SolidWorks的二次开发主要有两种:一种是基于自动化技术而生成的EXE可执行文件,另一种是基于COM开发SolidWorksAdd-in,生成一个DLL插件[7]。其中SolidWorks Add-in和SolidWorks程序运行于同一个进程空间,Add-in比主程序有更大的控制力,菜单、工具栏及属性控制页都可以插件形式在SolidWorks中实现。其中,第二种技术运用非常广泛,生成的DLL插件可以融合在SolidWorks设计环境中,增加工具栏的功能,更加便于设计者进行设计操作[8]。本文采用的开发方式为C#语言对应的SwAddin插件进行的二次开发,对应开发界面效果如图2所示。

3  三维模型焊缝信息提取(3D model weld information extraction)

虽然本文最终的目的是在工程图中进行焊缝标注,但是在工程图中无法识别出三维的信息,所以首先要在三维模型空间中提取焊缝的信息,具体实现流程的大体框架如图3所示。

其中关于接头形式的判断,交线的识别,在后面小节有详细的介绍。在SolidWorks三维设计软件中可以通过遍历特征树的技术访问到Cut list切割清单,并通过二次开发可以方便提取其中的实体,通过实体文件夹的创建3D box框的属性,可以在进入cut list后可通过其属性访问实体的厚度,长度,宽度等信息,保存记录作为焊接接头形式判断的依据之一。经过第一步提取可将三维模型中的所有实体对象存储到C#列表中,作为循环遍历的主体部分。

3.1   焊接接头形式识别

焊接接头是指两个或两个以上零件要用焊接组合的接点。或指两个或两个以上零件用焊接方法连接的接头,包括焊缝、熔合区和热影响区。熔焊的焊接接头是的由高温热源进行局部加热而形成。焊接接头由焊缝金属、熔合区、热影响区和母材金属所组成[9]。焊接接头形式可分为对接接头、T型接头、搭接接头、角接接头,对应的不同形式的接头类型如图4所示。

本文中只针对对接接头和T型接头进行识别,这里一个十分重要的识别准则为:厚度对厚度的接头为对接接头,厚度对长度或者厚度对宽度的接头形式都为T型接头,对于角接接头的处理原则为:如果角接的角度等于90°则作为T型接头处理,否则作为对接接头处理。对于搭接接头的形式出现较少,这里就直接忽略了。此外,本文只针对了两个实体间的焊缝进行了识别处理,可能会出现三个实体同时出现焊缝的情形,这里没有进行焊缝的合并,只是单独按照两两之间进行识别处理,存在一些不足。

3.2   实体交线信息提取方法

有了实体信息和接头的判断准则,下面是如何进行判断焊缝,在多实体零件中,焊缝只出现在两个实体的交线部分,所以要对实体之间求取交线。运用SolidWorks二次开发技术,对于实体是属于IBody2这个对象,在这个对象下可以通过GetFaces方法获取该体的所有表面,通过GetEdges方法可以获取该体上所有的边线,通过GetIntersectionEdges方法可以获取两个实体对象之间的交线。对于交线,可以求出交线的长度,作为焊缝长度的信息。

3.3   公共面提取法

如果两个实体的交线不止一条,则求取两个实体公共面,通过计算公共面,如果两个公共面都包含厚度尺寸,则认为是对接接头,否则为T型接头。如果两个实体的交线只有一条,这个时候就要求取该包含该交线的两个实体的面,计算两个实体之间包含交线的面之间的夹角,如果夹角为0度、90度、180度中的任何一个值,说明是T型接头,否则为对接接头。现在针对交线不止一条的情况来讨论公共面的寻找的方法:通过IEdge边线对象,可以利用GetTwoAdjacentFaces2方法获取包含该线的面,通过两条交线来获取包含交线的面的对象,这里可能的面的个数为2个、3个或者4个。对于两个面的情形说明两条交线都在面内,这两个面是同一个对象,任意取一个作为公共面,3个和4个的情形需要比较这几个面中哪两个是相同的面,可以利用IFace2对象下的IsSame方法比较两个面是否为同一个面。这样就可以找出公共面。对于只有一条交线的情况,只需要求取两个实体上包含交线的面中任意两个面之间的夹角。获取包含交线面的方法和多条交线的情况一样。

3.4   焊缝标记定位

提取到的每一条焊缝需要定位,方便在工程图中辨识每一条线是否为焊缝线的投影。这里可以利用实体命名的方式来进行焊缝对象的标记。可通过PartDoc对象模型下的SetEntityName方法为实体进行命名,其效果如图5所示。

4   工程图自动焊缝标注(Automatic weld marking of engineering drawing)

在三维模型中对焊缝信息进行了提取,对焊缝进行了标定。在工程图中需要进行标注,对于工程图,利用遍历工程视图的方式,通过IView对象下的GetPolylines7方法可以获得工程视图中所有的边线。但是如何将工程视图中的边线和三维中的边线对应起来,需要进行映射关系转换,找到对应的三维中的线再查看该线是否被标记,二维中的线需要将IEdge对象转化为IEntity对象,通过ModelName属性可以获取对应的实体名称,如果是焊缝则被标记,如果不是则为空。

4.1   三维模型到工程图映射关系

在SolidWorks中三维图形变换都是通过变换矩阵来完成的,该变化矩阵如式(1)所示。

该矩阵一共包含16个元素,a—i前9个元素构成的3×3子矩阵表示旋转矩阵,后面三个元素(j,k,l)为平移矢量,m表示比例因数,(n,o,p)在这里没有实际意义[10]。对于每一个视图IView对象,可以通過ModelToViewTransform获取三维模型到二维视图的转换矩阵,这里需要注意的是在二维视图中遍历到的线段对象是对应三维空间的线段,对应到二维视图中,只需要执行矩阵的乘积运算即可,假设三维空间的一个点A(Xa,Ya,Za),对应到二维视图的坐标点为B(Xb,Yb,Zb)则有如式(2)的运算关系:

注意这里的坐标点转换为其次坐标的形式,这样可以实现三维到二维的转换,在二维视图中对线进行选择,从而进行标注的实现。

4.2   定位焊缝标注

对于焊缝标注需要四个步骤:首先在找到相应的焊缝边线对应的二维坐标点之后,可以通过模型对象ModelDoc下的扩展属性下的SelectByID2方法来选中对应的边线;其次就可以插入焊缝标注序号,插入之前需要先创建标注对象,这里同样是通过模型对象下的扩展方法CreateBalloonOptions来创建对象,并且设置相关的属性;然后用InsertBOMBalloon2方法插入创建的标注;最后在插入标注的序号之后再更改相应的属性,设置该标注依附的实体对象。

4.3   焊缝标注位置调整

焊缝序号标注完成之后是不整齐的,需要进行位置的调整,达到图纸的要求。这里序号调整的方法是利用视图的边框属性,将焊缝序号调整到边框外围固定的位置,并且按照一定的间隔进行排布。实现方式流程大致为:第一步:通过IView对象的GetOutline方法获取外边框。第二步:遍历获取该视图中焊缝序号的个数,同时获取焊缝标注附着点的坐标。第三步:根据边框尺寸和焊缝序号个数均匀分布焊缝标注。最终实现效果如图6所示。

5  焊缝序号调整和清单导出(Weld number adjustment and list export)

之前提到,本文只针对两个实体之间进行焊缝识别,对于接头形式的判断也做了一些调整,所以有的地方可能还需要改动,就会涉及焊缝序号的删除或者重新添加等操作。在通过程序进行焊缝序号的重新调整。对于提取数据的结果的修改界面如图7所示。

对于序号的变更的原则分为两种情况:第一种是图纸未下发前,更改原则为,删除的焊缝序号要重用,新增加的按序号递增进行排序;第二种是图纸下发后,更改原则为,删除的焊缝序号不在重用,新增加的序号按序号递增进行排序。这里介绍实现过程的方法,在图纸上设计人员进行的操作是无法获知,每次更改过后程序会遍历一遍图纸,判断原来的序号还有哪些,给一个标记,新增的序号按照剩余的序号的个数给以新的序号进行增加,给一个新的标记。对于原来的序号重新进行排序,依据次修改序号的值。这部分的判断结合数据库来综合判断的,其数据库的设计如图8所示。

图8 焊缝数据库设计

Fig.8 Weld database design

数据库会记录原有焊缝标注序号的名称,在遍历图纸上的焊缝序号时,如果可以在数据库中查询到说明是没有更改的,此时给这个序号的delete值一个新的标记,如果查询不到则说明是新增加的,同时给delete值一个新的标记,这里需要注意的是每次修改完并进行排序之后需要重新将delete值重新初始化,这样就可以实现反复的修改与排序。对于在图纸下发以后的操作是类似的,只需要备份一份数据库,在新的数据库中进行操作即可,这里不再赘述。

修改完之后进行焊缝清单导出,其结果如图9所示。

6   结论(Conclusion)

本文针对实际的焊接件出图时对焊缝序号进行标注、焊缝清单导出的人工操作工作量大,对于SolidWorks自身对于焊缝标注模块的缺点进行优化,结合二次开发技术来实现程序的自动焊缝序号标注过程,以及焊缝清单的自动导出,实现了该模块的智能快速设计,提高设计人员出图效率,减少了人工干预而且容易出错的问题,但本文中还存在缺点与不足,对于焊接接头形式做了简化处理,没有包含搭接接头的判断,而且只针对两两实体之间的焊缝的判断和信息的提取,對于三个之间的情况做了拆解,在实际情况中这种情形出现虽然比较少,但是这部分还是需要人工标定,是文中的一个缺陷。从实际应用出发,该程序已经可以达到工程实际的运用,对于少量特殊的部分需要结合人工进行标定。

参考文献(References)

[1] 赖一楠,武传松,李宏伟,等.焊接与连接领域科学基金资助浅析与发展趋势[J].焊接学报,2019,40(02):1-7;161.

[2] Lee D,Ku N,Kim T,et al.Development and application of an intelligent welding robot system for shipbuilding[J].Robotics and Computer-Integrated Manufacturing,2011,27(2):377-388.

[3] Muhammad,J.,Altun,H.,Abo-Serie,E.Welding seam profiling techniques based on active vision sensing for intelligent robotic welding[J].The International Journal of Advanced Manufacturing Technology,2017,88(1-4):127-145.

[4] 韩博,许允斗,郭路瑶,等.四面体构架式可展天线型面划分与程序化建模[J].中国机械工程,2019,30(12):1400-1408.

[5] 陈超祥,胡启登.SolidWorks高级教程简编[M].北京:机械工业出版社,2015.

[6] 李向阳.SolidWorks二次开发的研究[J].精密制造与自动化,2008(02):37-38;53.

[7] 李妍姝.基于SolidWork-API二次开发的锥齿轮自动建模与仿真[J].工业技术创新,2016,3(2):234-238.

[8] 索超,李玉翔,林树忠.基于VB语言对SolidWorks参数化设计的二次开发[J].制造业自动化,2013(15):137-139.

[9] 朱亮,陈剑虹.热影响区软化焊接接头的强度及变形[J].焊接学报,2004,25(2):61-65;131.

[10] 孙文龙,仲梁维,牛亚运.基于SolidWorks的工艺门的智能快速设计系统[J].农业装备与车辆工程,2019,57(8):100-103.

猜你喜欢
二次开发
浅谈基于Revit平台的二次开发
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
Micaps3.2 版本二次开发入门浅析
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用
基于Pro/E二次开发的推土铲参数化模块开发