黃忠金 朱家亮
(蘭州理工大學機電工程學院)
壓力容器是指盛裝氣體或者液體,承載一定壓力的密閉設備,其用途極為廣泛。 對于壓力容器來說,焊縫的布置是制造過程中關鍵的一個環節,直接影響其承壓性能。 傳統的焊縫布置由人工進行,易出錯,而且排布效果不一定最優。 張立杰設計的壓力容器焊縫排版系統能生成尺寸無誤且能顯示焊縫位置信息的排版圖,其優化目標為環縫上的管嘴數量最少或環縫與管嘴的弦長總和最短,并且默認使用定好規格的鋼板[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 二次開發的方式對該算法進行驗證,效果令人滿意。