The Creation of Bending Activities Tables in
AVEVA Marine PipeSketches
AM管子零件圖中彎管參數(shù)表的生成
一、引言
AVEVA Marine生成的管子零件圖中包含以下幾種表格:
l MTO Tables; ——材料表;
n MTO Tables主要為管子下料長(zhǎng)度及一些閥附件數(shù)據(jù);
l Bending Tables;
l Bending Activities Tables; ——彎管表;
n 彎管信息表,主要為彎管機(jī)加工所需數(shù)據(jù);
l Automatic Welding Tables; ——自動(dòng)焊接表;
l Assembly Activities Tables; ——裝配表;
l End Points Tables; ——端點(diǎn)表;
n 管子端部的坐標(biāo)值,用于管子安裝時(shí)位置的確認(rèn);
有了以上數(shù)據(jù),可以對(duì)管子進(jìn)行數(shù)控加工,節(jié)約材料,簡(jiǎn)單正確安裝,提高生產(chǎn)效率。
本文主要講述彎管機(jī)所需的彎管參數(shù)的計(jì)算方法,以及在AVEVA Marine中利用PML編程時(shí)如何獲取這些彎管信息,理解這些內(nèi)容可對(duì)管子零件圖進(jìn)行靈活地控制,也可以自己編程實(shí)現(xiàn)對(duì)彎管參數(shù)的自動(dòng)計(jì)算,生成數(shù)控彎管機(jī)加工管子零件所需要數(shù)據(jù)。
因AVEVA Marine中彎管參數(shù)是在管子工藝檢查后自動(dòng)生成,管子工藝檢查程序未以PML的形式公開,而是以PipeCheckAddin.dll動(dòng)態(tài)庫(kù)的形式發(fā)布的,看不到源代碼,所以,本文是本人學(xué)習(xí)總結(jié),僅為個(gè)人觀點(diǎn),歡迎討論。若有錯(cuò)誤或建議請(qǐng)聯(lián)系:eryar@163.com。
二、彎管參數(shù)計(jì)算
由彎管機(jī)進(jìn)行彎曲的管子,必須有相應(yīng)的彎管程序,即彎管參數(shù)的計(jì)算。彎管參數(shù)計(jì)算分成兩部分:一部分是關(guān)于管段實(shí)長(zhǎng)、彎角和轉(zhuǎn)角的計(jì)算;一部分是關(guān)于彎管的起彎點(diǎn)和管長(zhǎng)總長(zhǎng)度及無(wú)余量下料長(zhǎng)度的計(jì)算。其中,下料長(zhǎng)度的計(jì)算要根據(jù)管子加工工藝決定,如果采用先焊的加工工藝,則要考慮到兩端連接件的形式、彎曲部分的伸長(zhǎng)量、彎子彎曲后回彈所引起的彎曲半徑的變化等。
現(xiàn)對(duì)彎管參數(shù)中的彎角、管段長(zhǎng)度、旋轉(zhuǎn)角的概念及其計(jì)算方法進(jìn)行介紹。
2.1 彎角
彎角是指一根直管子彎成一定形狀時(shí),管子一端所彎過(guò)的角度,即彎管機(jī)彎模旋轉(zhuǎn)的角度,一般用α表示。
由兩管段所組成的角度稱為成形角,用β表示。它與彎角互補(bǔ)。
管子的彎角數(shù)Nα與管段數(shù)N的關(guān)系為:Nα=N-1。
2.2 管段長(zhǎng)度
管子中心線的長(zhǎng)度稱為管段實(shí)長(zhǎng),通常也是管子零件圖上尺寸線標(biāo)出的長(zhǎng)度。管子彎曲部分實(shí)際上是一段圓弧,并不是一條直線。圓弧的長(zhǎng)度與管子彎曲半徑及彎角有關(guān),設(shè)彎管半徑為R,彎角為α時(shí)彎管的弧長(zhǎng)計(jì)算公式為:
因?yàn)楣芏螌?shí)長(zhǎng)中包含彎管處圓弧的切線長(zhǎng),在進(jìn)行彎管參數(shù)計(jì)算時(shí)它的直管段長(zhǎng)必須減去與彎角對(duì)應(yīng)的切線長(zhǎng),計(jì)算公式為:
采用先彎后焊的管子加工工藝時(shí),下料長(zhǎng)度就是彎制成形的管子的總長(zhǎng)。理論上它時(shí)直管段長(zhǎng)度和彎管圓弧長(zhǎng)度的總和,即管段實(shí)長(zhǎng)減去彎角對(duì)應(yīng)的切線長(zhǎng)加上彎管部分的圓弧長(zhǎng)度。
若采用“先彎后焊”工藝,管子彎曲成形后,還要進(jìn)行二次畫線和切割,可以不考慮以下因素。若采用“先焊后彎”工藝,在求管子長(zhǎng)度時(shí),還需要考慮以下幾個(gè)因素:在彎制管子時(shí),彎管部分的圓弧因材料的塑性變形等原因略有伸長(zhǎng),伸長(zhǎng)的量稱為伸長(zhǎng)量;其次,不同的管端連接件形式也會(huì)要求管子比計(jì)算長(zhǎng)要短。如對(duì)于搭焊法蘭必須減去端距,若是對(duì)焊法蘭需要減去整個(gè)法蘭的厚度。
2.3 轉(zhuǎn)角
一根彎管中,任何兩個(gè)相鄰彎管所在的平面間的夾角稱為轉(zhuǎn)角,也可稱為彎管間直管段的轉(zhuǎn)角。把管子相鄰的三段作為一個(gè)單元,并依次稱為三段管子的首段、中段、尾段。規(guī)定尾段向首段的旋轉(zhuǎn)方向?yàn)檗D(zhuǎn)角的旋轉(zhuǎn)方向。從首段向尾段看,順時(shí)針為正轉(zhuǎn),逆時(shí)針為負(fù)轉(zhuǎn)。因此,轉(zhuǎn)角也可表述為:以中段管子為旋轉(zhuǎn)軸,尾段管子和中段管子組成的平面轉(zhuǎn)到與首段管子與中段管子所組成的平面重合時(shí),所轉(zhuǎn)過(guò)的角度即為轉(zhuǎn)角。
求取轉(zhuǎn)角比較復(fù)雜,若使用矢量代數(shù)法來(lái)計(jì)算,則可對(duì)轉(zhuǎn)角進(jìn)行統(tǒng)一計(jì)算,便于計(jì)算機(jī)程序?qū)崿F(xiàn)。
2.4 應(yīng)用矢量代數(shù)計(jì)算管子曲形參數(shù)
用幾何、三角函數(shù)法來(lái)計(jì)算管子曲形參數(shù)的過(guò)程較為復(fù)雜,特別遇到曲形復(fù)雜的管子零件時(shí),要經(jīng)過(guò)投影變換、解三角形、求中間參數(shù)等過(guò)程,往往耗費(fèi)較多時(shí)間。即便將各種彎曲形狀歸結(jié)為幾種基本形式,并導(dǎo)出相應(yīng)的計(jì)算公式,實(shí)際應(yīng)用也甚感不便。矢量代數(shù)法是把一根曲形管子上的每一段看作是一個(gè)矢量,并根據(jù)各管段的坐標(biāo)值,運(yùn)用矢量代數(shù)數(shù)量積、矢量積、模推導(dǎo)出一組完整、通用的曲形求解公式。應(yīng)用這些公式計(jì)算不需要進(jìn)行復(fù)雜的投影變換,也不需要解三角形和求解中間變量,可以大減輕計(jì)算工作量,更可用于計(jì)算機(jī)編程實(shí)現(xiàn)管子曲形參數(shù)的自動(dòng)計(jì)算,應(yīng)用于三維管子設(shè)計(jì)系統(tǒng)中的管子零件圖自動(dòng)生成彎管數(shù)據(jù)。
圖1 空間任意三段管
上圖中彎管為任意空間三段管,坐標(biāo)系中X、Y、Z分別表示艏艉、舷、高度方向。A、B、C、D為彎管曲形中心點(diǎn)位置。根據(jù)上圖推導(dǎo)出彎管曲形參數(shù)的計(jì)算方法。推導(dǎo)過(guò)程如下:
1. 管段實(shí)長(zhǎng)l:
求出管段實(shí)長(zhǎng)后,還需要計(jì)算出彎角對(duì)應(yīng)的切線長(zhǎng)和圓弧長(zhǎng),然后再用實(shí)長(zhǎng)減去切線長(zhǎng)加上圓弧長(zhǎng)度即得管子的下料長(zhǎng)度。
2. 由數(shù)量積推出彎角α的求解公式:
3. 由矢量積推出轉(zhuǎn)角的求解公式:
4. 根據(jù)行列式計(jì)算管子旋轉(zhuǎn)方向:
若行列式大于零,則為逆時(shí)針?lè)较蛐D(zhuǎn);若行列式小于零,則為順時(shí)針?lè)较蛐D(zhuǎn)。若為零,則為平面彎管。
至此,我們得到了空間任意彎曲管子的彎管參數(shù)計(jì)算公式,這些是計(jì)算三段管子為一個(gè)單元的曲形參數(shù)的基本公式。因?yàn)槊咳喂芙M成兩個(gè)平面,具有兩個(gè)彎角和一個(gè)轉(zhuǎn)角,所以三段以上的彎管同樣可以利用上述公式,先計(jì)算第一、第二、第三段管,再計(jì)算第二、第三、第四段管,依次類推。
具體編程實(shí)現(xiàn)時(shí),可用鏈表或棧來(lái)存儲(chǔ)一個(gè)管子零件的所有節(jié)點(diǎn)坐標(biāo)值,再把節(jié)點(diǎn)值轉(zhuǎn)化為向量值,然后以每三段為一個(gè)單元來(lái)計(jì)算相關(guān)參數(shù)。
三、C++編程實(shí)現(xiàn)
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: // 向量點(diǎn)乘
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_
計(jì)算實(shí)例:
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中獲取彎管參數(shù)
AVEVA Marine中彎管參數(shù)由類PipeSpoolManager來(lái)管理,其方法如下:
使用方法:(對(duì)通過(guò)工藝檢查后的管子PIPE使用)
通過(guò)PipeSpoolManager對(duì)象可以得到管子零件圖所需要的各種數(shù)據(jù)。如彎管參數(shù):管段長(zhǎng)度Feed、彎角Bend、轉(zhuǎn)角Rotate則由其成員函數(shù)getPipePieces()來(lái)得到,結(jié)果保存為一個(gè)數(shù)組。
AVEVA Marine中取得這些彎管數(shù)據(jù)很簡(jiǎn)單,其計(jì)算方法我估計(jì)是按上述矢量代數(shù)法來(lái)計(jì)算得出。若你有更好的計(jì)算方法,請(qǐng)聯(lián)系我:eryar@163.com。
彎管機(jī)工藝檢查由對(duì)象BendingMachineResult來(lái)管理,檢查項(xiàng)目由其成員函數(shù)來(lái)實(shí)現(xiàn):
五、結(jié)論
用矢量代數(shù)法計(jì)算彎管參數(shù)簡(jiǎn)單通用,可用于計(jì)算程序自動(dòng)計(jì)算。
AVEVA Marine可用對(duì)象PipeSpoolManager來(lái)取得彎管參數(shù)及其它數(shù)據(jù),深入理解此對(duì)象可自定義管子零件圖上的一些信息,也可根據(jù)船廠實(shí)際需要編寫管子零件圖的出圖程序。
六、參考資料
1. 章煒梁、許正權(quán). 船舶管系工. 國(guó)防工業(yè)出版社. 2008
2. 陸金銘. 船舶動(dòng)力裝置安裝工藝. 國(guó)防工業(yè)出版社. 2006
3. 付錦云. 船舶管路系統(tǒng). 哈爾濱工程大學(xué)出版社. 2006
4. 黃廣茂. 造船生產(chǎn)設(shè)計(jì). 哈爾濱工程大學(xué)出版社. 2008
5. Pipework Design User Guide
PDF 版本: