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 版本: