黄忠金 朱家亮
(兰州理工大学机电工程学院)
压力容器是指盛装气体或者液体,承载一定压力的密闭设备,其用途极为广泛。 对于压力容器来说,焊缝的布置是制造过程中关键的一个环节,直接影响其承压性能。 传统的焊缝布置由人工进行,易出错,而且排布效果不一定最优。 张立杰设计的压力容器焊缝排版系统能生成尺寸无误且能显示焊缝位置信息的排版图,其优化目标为环缝上的管嘴数量最少或环缝与管嘴的弦长总和最短,并且默认使用定好规格的钢板[1];李飞设计的系统以仓库中的剩余材料为基础排版设计,优化的主要目标为组成压力容器的钢板数量[2]。二者的排版效果图均为二维图,不能直观地反映在三维模型上,容易出错,设计效率低。
压力容器制造中,焊缝排版位置的合理性和钢板规格的统一性才是设计的重点。 笔者基于SolidWorks 二次开发方式实现的焊缝排版系统,是通过可视化窗口输入压力容器的设计数据,自动建立三维模型, 同时以减少钢板的数量和规格为优化目标,计算出最佳的焊缝布置位置,并将焊缝进行模型展示,以提高焊缝排版的设计效率。
焊缝的排版问题可以抽象为装填布局问题(Packing Problem)与切割布局问题(Cutting Problem)——将一系列小物体(item)装入一个或一系列大物体(object)中,物体切割下来,在满足约束条件下以充分利用大物体的空间为主要目标。 其中,约束要求小物体的某个子集合或全部装入大物体中并且要求小物体间无重叠。 有时,目标函数不仅仅是空间利用率单一目标函数,而是多目标函数[3]。
切割与装填布局问题分为一维、二维和三维布局3 种[4],焊缝排版属于二维布局的矩形排版问题。 矩形排版算法主要分为启发式算法和精确算法两种,在约束条件较少或装入的空间较小的时候,一般采用分支定界算法、动态规划算法及贪心算法等精确算法,这些算法能在可接受时间内找出最优解。 当约束条件较多时,采用基于经验基础上设计的启发式算法,其优点是可以在可接受的时间和空间内得出结果并且一般为较优解,其缺点为无法保证不会获得较差的解。
作为一种二维布局问题的矩形排版是一个NP 完全类的优化组合问题[5~9]。 Bortfeldt A 把 问题分解为二维的装箱和背包问题,结合启发式算法和树搜索算法得以解决[10]。 邓应波采用改进的剩余矩形填充算法和遗传算法相结合的混合算法,提高了排版利用率[11]。 杨卫波等采用改进的自适应遗传模拟退火算法IAGSA,提高了算法效率和收敛至全局最优的速度[12]。 由于本压力容器焊缝的约束较少,因此精确算法在求解小规模的优化组合问题上具有巨大的优势,且能够迅速地得到最优解。 在精确算法中,贪心算法是一种对某些求最优解问题更简单、 更迅速的设计算法,它采用迭代的方式,一步一步地将问题的规模不断简化, 并且在每步简化的同时做出贪心的选择,进而得到问题的最优解。
由于焊缝排版问题只是针对压力容器的筒体部分,不用对顶部和底部封头进行讨论,与筒体关联且影响焊缝排版的特征均可归纳为圆形开口,因此选用具有圆形开口的筒体部分进行压力容器的模型表示。 笔者采用SolidWorks 二次开发的方法建立模型, 通过可视化窗口输入数据,运用SolidWorks 的API 接口建立功能模块[13]。
使用SolidWorks 的用户自定义特征库功能,将需要经常使用的特征进行定义后存入特征库,再次使用时, 只要从特征库中选择相应的特征,进行相关设置, 就能将特征精确地创建在模型上。以圆孔为例建立特征库和使用的步骤为:第1步,将常用的特征完全定义后选中,在特征库界面中选择“添加到库”后,点击“确定”;第2 步,将选用特征拖至待用的模型上,设置基准、定位和大小(图1),点击“确定”后,完成特征的建立。
图1 特征库使用界面
通常情况下, 一台压力容器由若干筒节组成,筒节与筒节组合产生的焊缝称为环缝;筒节是由钢板进行弯卷后焊接固定成的,这种连接同一块钢板的两条边形成筒节所产生的焊缝称为纵缝。
焊缝的排版是在满足工艺要求 (开口位置等)的前提下,对环缝和纵缝进行优化排列,以达到提高压力容器工作性能的目的。 另外, 根据GB 150—2011《压力容器》的要求,在满足实际生产尺寸需求的前提下,依然需要遵守以下准则:
a. 每段筒节的长度应不小于300 mm;
b. 筒体的环焊缝应该避开开口区域和补强圈,对于压力容器,要求在开口中心2 倍直径范围内不得有焊缝, 否则需要与工艺人员沟通,增加探伤程序;
c. 不得有十字焊缝;
d. 焊缝数量越少越好;
e. 为了方便进行加工,板材的规格应当尽可能一致;
f. 零部件开口的安全距离 (以中心为起点)不小于2r(r是零部件的公称尺寸)。
环缝排版设计的实质就是确定一台压力容器需要由多少个筒节组成和每个筒节的长度。 以图2 所示的压力容器环缝排版为例,对相应的设计算法进行说明。
图2 压力容器环缝排版示意图
第2 步,根据压力容器设计规则中每个筒节必须大于300 mm 的要求, 同时考虑常用钢板的实际宽度, 删除理想宽度中1 500~2 500 mm 之间的数据。
第3 步, 将数据按照大小顺序进行排列后选取中间数,并称之为最佳钢板宽度。在设定钢板宽度时优先选用此值,就会减少钢板规格的多样性。
第4 步, 将最佳钢板宽度作为钢板1 的宽度,如果与下一块钢板的焊缝位置落在距离中间位置1 较远的地方,那么将位置1 与位置2 间的距离作为钢板的宽度,同时将此宽度加入实际钢板宽度的数据中。 如果焊缝与位置1 间的距离在可接受范围之内,则钢板1 的宽度就为最佳钢板宽度。 本设计的可接受范围根据两孔安全距离间的最短距离进行设定的, 以开口A 和B 为例,根据准则f, 位置7 到位置8 之间为开口A 的安全距离, 位置9 到位置10 之间为开口B 的安全距离,两孔安全距离中的最短距离就是位置8 到位置9。 当安全距离的最短距离不大于200 mm 时,只要焊缝落在位置8 与位置9 之间,就认为焊缝与位置1 的距离在可接受范围内;当最短距离大于200 mm 时, 焊缝需要落在位置8 与位置9 之间的1/4~3/4 处, 才认为焊缝与位置1 的距离在可接受范围内。
第5 步,使用最佳钢板宽度作为钢板2 的宽度,如果焊缝距离位置2 较远,那么从实际钢板宽度中从大到小依次作为钢板2 的宽度,如果仍然没有合适宽度的钢板,则将上一个焊缝到位置2 的距离作为钢板2 的宽度, 同时将此宽度数据加入到实际钢板宽度中。
第6 步,重复第5 步,直到所有替换的钢板宽度加起来等于压力容器总长度。
第7 步,如果最后一块钢板的宽度小于300 mm,那么将最后两块钢板合二为一。
图3 为该算法的设计流程, 其中n的初始值为1。
图3 环缝排版设计流程
纵缝排版设计, 采用与张立杰的设计方法[1]相类似的纵缝算法:
第1 步, 由于压力容器为360°的圆筒形,则确定压力容器任意位置为初始角度0°,开始进行第1 套纵缝设计方案。 将第1 块钢板焊缝布置在0°,若此焊缝穿过开口位置,则将焊缝布置的角度加1°,直到不穿过开口位置为止。
2)设备无故障而装置发信,则存在误报而误报的情况就可能存在装置接线组别错误、定值整定错误、装置误动或是插件问题等情况;出现这些情况就需要更进一步的检查,停电处理通知专业班组。
第2 步,将第1 块钢板的焊缝角度位置加上90、180、270°作为第2 块钢板可能的焊缝位置,若3 个角度有穿过开口位置的,则直接剔除。计算剩余角度与第1 块钢板的焊缝与第2 块钢板上开口中心间的弦长距离, 选出距离最长的角度,作为第2 块钢板的焊缝位置。
第3 步,重复第2 步,直到所有钢板的纵缝布置完毕。
第4 步,对上述算出的弦长进行累加,得到总弦长。
第5 步,将初始角度加1°,进行第2 套纵缝设计方案,直到初始角度为359°。
第6 步,从所有的焊缝设计方案中,选取总弦长最长的一套设计方案作为最终方案。
图4 为该算法的设计流程,其中n 的初始值为0°,m初始值为2。
图4 纵缝排版设计流程
以工程实例来验证算法的有效性。 某压力容器的直径为3 000 mm,内径为2 800 mm,筒体长度为15 000 mm,筒体上开口参数见表1。
表1 筒体上开口参数
在SolidWorks 二次开发过程中,建立典型的设计模型基础后, 通过变量参数来控制模型,进行模型的建立,是一种主流的开发方式。 建立筒体的基础模型后,对其边和面进行命名,方便特征插入时选择基准。 为了增加筒体的展示效果,有展开和圆筒两种形式(图5)。圆筒展示时,隐藏展开式的相关特征;反之,同理。
图5 筒节展开前后的界面
对库特征进行调用时,首先使用Initialize 进行特征的插入, 之后采用GetEntityByName 对基准进行选择,最后通过SetSystemValue3 对特征的定位尺寸和大小尺寸进行确定。
在C# 语言中foreach 功能可以方便地实现一组数据的遍历, 将中间位置存储在链表中间后,使用foreach 语句嵌套着for 循环语句的方式能在保证不重复进行两两组合的前提下,进行数据的计算。 经数据筛选得到经典钢板宽度后,同样使用foreach 语句进行判断完成设计。
环缝设计算法:
纵缝设计算法:
焊缝的三维模型展示同样使用调用设计库的方式进行,将焊缝简化成长条,使用已经得出的设计方案的数据,对焊缝的定位尺寸、大小尺寸和基准进行确定,而后进行特征生成,排版效果如图6 所示,其中圆点为圆形开口,水平方向和垂直方向的长条特征均为焊缝位置。
图6 焊缝排版展示
笔者提出的三维环境下压力容器焊缝排版算法,在减少钢板数量、规格等前提下,可以确定最大化提升压力容器工作能力的合理焊缝位置,并通过SolidWorks 二次开发的方式对该算法进行验证,效果令人满意。