The Creation of Bending Activities Tables in
AVEVA Marine PipeSketches
AM管子零件圖中彎管參數表的生成
一、引言
AVEVA Marine生成的管子零件圖中包含以下幾種表格:
l MTO Tables; ——材料表;
n MTO Tables主要為管子下料長度及一些閥附件數據;
l Bending Tables;
l Bending Activities Tables; ——彎管表;
n 彎管信息表,主要為彎管機加工所需數據;
l Automatic Welding Tables; ——自動焊接表;
l Assembly Activities Tables; ——裝配表;
l End Points Tables; ——端點表;
n 管子端部的坐標值,用于管子安裝時位置的確認;
有了以上數據,可以對管子進行數控加工,節約材料,簡單正確安裝,提高生產效率。
本文主要講述彎管機所需的彎管參數的計算方法,以及在AVEVA Marine中利用PML編程時如何獲取這些彎管信息,理解這些內容可對管子零件圖進行靈活地控制,也可以自己編程實現對彎管參數的自動計算,生成數控彎管機加工管子零件所需要數據。
因AVEVA Marine中彎管參數是在管子工藝檢查后自動生成,管子工藝檢查程序未以PML的形式公開,而是以PipeCheckAddin.dll動態庫的形式發布的,看不到源代碼,所以,本文是本人學習總結,僅為個人觀點,歡迎討論。若有錯誤或建議請聯系:eryar@163.com。
二、彎管參數計算
由彎管機進行彎曲的管子,必須有相應的彎管程序,即彎管參數的計算。彎管參數計算分成兩部分:一部分是關于管段實長、彎角和轉角的計算;一部分是關于彎管的起彎點和管長總長度及無余量下料長度的計算。其中,下料長度的計算要根據管子加工工藝決定,如果采用先焊的加工工藝,則要考慮到兩端連接件的形式、彎曲部分的伸長量、彎子彎曲后回彈所引起的彎曲半徑的變化等。
現對彎管參數中的彎角、管段長度、旋轉角的概念及其計算方法進行介紹。
2.1 彎角
彎角是指一根直管子彎成一定形狀時,管子一端所彎過的角度,即彎管機彎模旋轉的角度,一般用α表示。
由兩管段所組成的角度稱為成形角,用β表示。它與彎角互補。
管子的彎角數Nα與管段數N的關系為:Nα=N-1。
2.2 管段長度
管子中心線的長度稱為管段實長,通常也是管子零件圖上尺寸線標出的長度。管子彎曲部分實際上是一段圓弧,并不是一條直線。圓弧的長度與管子彎曲半徑及彎角有關,設彎管半徑為R,彎角為α時彎管的弧長計算公式為:
因為管段實長中包含彎管處圓弧的切線長,在進行彎管參數計算時它的直管段長必須減去與彎角對應的切線長,計算公式為:
采用先彎后焊的管子加工工藝時,下料長度就是彎制成形的管子的總長。理論上它時直管段長度和彎管圓弧長度的總和,即管段實長減去彎角對應的切線長加上彎管部分的圓弧長度。
若采用“先彎后焊”工藝,管子彎曲成形后,還要進行二次畫線和切割,可以不考慮以下因素。若采用“先焊后彎”工藝,在求管子長度時,還需要考慮以下幾個因素:在彎制管子時,彎管部分的圓弧因材料的塑性變形等原因略有伸長,伸長的量稱為伸長量;其次,不同的管端連接件形式也會要求管子比計算長要短。如對于搭焊法蘭必須減去端距,若是對焊法蘭需要減去整個法蘭的厚度。
2.3 轉角
一根彎管中,任何兩個相鄰彎管所在的平面間的夾角稱為轉角,也可稱為彎管間直管段的轉角。把管子相鄰的三段作為一個單元,并依次稱為三段管子的首段、中段、尾段。規定尾段向首段的旋轉方向為轉角的旋轉方向。從首段向尾段看,順時針為正轉,逆時針為負轉。因此,轉角也可表述為:以中段管子為旋轉軸,尾段管子和中段管子組成的平面轉到與首段管子與中段管子所組成的平面重合時,所轉過的角度即為轉角。
求取轉角比較復雜,若使用矢量代數法來計算,則可對轉角進行統一計算,便于計算機程序實現。
2.4 應用矢量代數計算管子曲形參數
用幾何、三角函數法來計算管子曲形參數的過程較為復雜,特別遇到曲形復雜的管子零件時,要經過投影變換、解三角形、求中間參數等過程,往往耗費較多時間。即便將各種彎曲形狀歸結為幾種基本形式,并導出相應的計算公式,實際應用也甚感不便。矢量代數法是把一根曲形管子上的每一段看作是一個矢量,并根據各管段的坐標值,運用矢量代數數量積、矢量積、模推導出一組完整、通用的曲形求解公式。應用這些公式計算不需要進行復雜的投影變換,也不需要解三角形和求解中間變量,可以大減輕計算工作量,更可用于計算機編程實現管子曲形參數的自動計算,應用于三維管子設計系統中的管子零件圖自動生成彎管數據。
圖1 空間任意三段管
上圖中彎管為任意空間三段管,坐標系中X、Y、Z分別表示艏艉、舷、高度方向。A、B、C、D為彎管曲形中心點位置。根據上圖推導出彎管曲形參數的計算方法。推導過程如下:
1. 管段實長l:
求出管段實長后,還需要計算出彎角對應的切線長和圓弧長,然后再用實長減去切線長加上圓弧長度即得管子的下料長度。
2. 由數量積推出彎角α的求解公式:
3. 由矢量積推出轉角的求解公式:
4. 根據行列式計算管子旋轉方向:
若行列式大于零,則為逆時針方向旋轉;若行列式小于零,則為順時針方向旋轉。若為零,則為平面彎管。
至此,我們得到了空間任意彎曲管子的彎管參數計算公式,這些是計算三段管子為一個單元的曲形參數的基本公式。因為每三段管組成兩個平面,具有兩個彎角和一個轉角,所以三段以上的彎管同樣可以利用上述公式,先計算第一、第二、第三段管,再計算第二、第三、第四段管,依次類推。
具體編程實現時,可用鏈表或棧來存儲一個管子零件的所有節點坐標值,再把節點值轉化為向量值,然后以每三段為一個單元來計算相關參數。
三、C++編程實現
1: //------------------------------------------------------------------------------
2: // Copyright (c) 2011 eryar All Rights Reserved.
3: //
4: // File : Vector.h
5: // Author : eryar@163.com
6: // Date : 2011-12-2 21:34
7: // Version : 1.0v
8: //
9: // Description :
10: //
11: //==============================================================================
12:
13: #ifndef _VECTOR_H_
14: #define _VECTOR_H_
15:
16: #include <cmath>
17: #include <string>
18: #include <iostream>
19: using namespace std;
20:
21: class CVector
22: {
23: public:
24: CVector();
25: CVector(const CVector& v);
26: CVector(double x, double y, double z);
27: virtual ~CVector();
28:
29: // Overload operators
30: CVector& operator = (const CVector& v);
31: bool operator == (const CVector& v) const;
32: bool operator != (const CVector& v) const;
33: CVector operator + (const CVector& v) const;
34: CVector operator - (const CVector& v) const;
35: CVector operator * (double k) const;
36: // 向量點乘
37: double operator * (const CVector& v) const;
38:
39: // 向量叉乘
40: CVector CrossProduct(const CVector& v);
41:
42: // 求向量的模
43: double Magnitude(void) const;
44:
45: // 顯示向量
46: void Show(void) const;
47:
48: private:
49: double m_x;
50: double m_y;
51: double m_z;
52: };
53:
54: #endif // _VECTOR_H_
計算實例:
1: //------------------------------------------------------------------------------
2: // Copyright (c) 2011 eryar All Rights Reserved.
3: //
4: // File : Main.cpp
5: // Author : eryar@163.com
6: // Date : 2011-12-4 10:05
7: // Version : 1.0v
8: //
9: // Description :
10: //
11: //==============================================================================
12:
13: #include "Vector.h"
14:
15: int main(int argc, char* argv[])
16: {
17: // One Pipe piece
18: // CVector aVector(287, 0, 0);
19: // CVector bVector(313, 204, 165);
20: // CVector cVector(0, 746, 0);
21:
22: // Another pipe piece
23: // CVector aVector(150, 0, 0);
24: // CVector bVector(50, 150, 150);
25: // CVector cVector(50, 250, 0);
26:
27: // Test Vectors
28: CVector aVector(1, 0, 0);
29: CVector bVector(1, 2, 0);
30: CVector cVector(1, 1.732, 1);
31:
32: CVector alpha;
33: CVector beta;
34: double phi = 0;
35:
36: aVector.Show();
37: bVector.Show();
38: cVector.Show();
39:
40: alpha = aVector.CrossProduct(bVector);
41: beta = bVector.CrossProduct(cVector);
42:
43: phi = (alpha * beta) / (alpha.Magnitude() * beta.Magnitude());
44: cout<<"Rotate : "<<acos(phi) * 180 / 3.1416<<endl;
45:
46: return 0;
47: }
四、AVEVA Marine中獲取彎管參數
AVEVA Marine中彎管參數由類PipeSpoolManager來管理,其方法如下:
使用方法:(對通過工藝檢查后的管子PIPE使用)
通過PipeSpoolManager對象可以得到管子零件圖所需要的各種數據。如彎管參數:管段長度Feed、彎角Bend、轉角Rotate則由其成員函數getPipePieces()來得到,結果保存為一個數組。
AVEVA Marine中取得這些彎管數據很簡單,其計算方法我估計是按上述矢量代數法來計算得出。若你有更好的計算方法,請聯系我:eryar@163.com。
彎管機工藝檢查由對象BendingMachineResult來管理,檢查項目由其成員函數來實現:
五、結論
用矢量代數法計算彎管參數簡單通用,可用于計算程序自動計算。
AVEVA Marine可用對象PipeSpoolManager來取得彎管參數及其它數據,深入理解此對象可自定義管子零件圖上的一些信息,也可根據船廠實際需要編寫管子零件圖的出圖程序。
六、參考資料
1. 章煒梁、許正權. 船舶管系工. 國防工業出版社. 2008
2. 陸金銘. 船舶動力裝置安裝工藝. 國防工業出版社. 2006
3. 付錦云. 船舶管路系統. 哈爾濱工程大學出版社. 2006
4. 黃廣茂. 造船生產設計. 哈爾濱工程大學出版社. 2008
5. Pipework Design User Guide
PDF 版本: