管道设计CAD系统中重量重心计算

管道设计CAD系统中重量重心计算

[email protected]

Abstract. 管道设计CAD系统中都有涉及到重量重心计算的功能,这个功能得到的重心数据主要用于托盘式造船时方便根据重心设置吊装配件。重量信息主要用于采购订货。本文主要介绍相关软件中重量重心功能,及重量重心计算实现原理。最后结合OpenCASCADE计算管道模型重量重心来验证。

Key Words. CoG, CentreOfMass, Piping CAD, Piping Design

1.Introduction

船舶设计系统和工厂设计系统等都有管道设计功能。在船舶建造过程中,工程最大的是船体建造,其次是船舶管系的制造和安装。

建国初期船舶管系的管子制造和安装要等船体基本成形,机械设备都基本到位,船船管工才能拿着原理图和详细设计的管子走向图,到施工现场用直径6mm或8mm的铁丝样条取样,把样条弯制成想要的形状,再带回车间下料,上弯管机按样条形状进行弯制,然后领管接头,再上船到施工现场进行管子试装。试装时管接头与管子用点焊连接,再把试装管子拆下来,带回车间打磨,泵压,表面处理,最后上船安装。这种方法叫管子制造现场取样法,这种工艺方法建造周期长;管工的劳动强度大;管子走向不合理,与其他专业如电缆,风管等容易碰撞,返工量大,造成人力物力浪费;管子现场试装的作业环境比车间差,造成管子建造质量差。

为了缩短建造周期,提高造船质量,单从船舶管系这个角度讲,必须要有创新去提高效率。

60~70年代,在木地板上以1:1的比例画各种船体背景,画各种机械设备外形及管路接口,进行管子系统放样。当时用的计算工具是计标尺,这种方法需要的工作场地大,放样人员蹲在地上进行操作,劳动强度很大。

70~80年代,在工作台上用长涤伦薄膜以1:10的比例画船体背景,画各种机械设备外形及与管路接口,进行管子系统放样,这种方法比上种工作场地小,减轻了放样人员的劳动强度。

80~90年代,把涤伦薄膜铺设在图板上,以1:20的比例分区综合放样。所谓综合放样,就是在小小的绘图板上,船体,电气,轮机三大专业的放样设计一起进行,综合协调,把很多将会在生产中出现的问题,在绘图板上解决。在这个舞台上,放样人员按建造方针,管理部门和生产车间的要求,提供各种建造阶段的施工图纸和托盘。由于当时没有采用计算机放样,有些好的设计要求,靠设计部门在有限的设计周期内很难实现,这个时期只是生产设计的初期阶段。

90年代后全国较大的造船厂家都用计算机放样,把设计图中的管子走向数据、管件数据、管路数据等输入计算机。通过计算机辅助设计,解决了管子零件弯管程序计算量很大的难题和出图量很大的难题,大缩短生产设计的周期,提高了设计质量。

现在船厂、设计院都是采用计算机辅助设计系统进行管道设计。从上述建造方法的进程可以看出通过创新,利用计算机这个强大工具改进了生产方式,提高了效率和质量。

2.Cog in PDMS/AVEVA Marine

在PDMS/AVEVA Marine中提供了计算模型重量重心Weight and Centre of Gravity(CoG)及表面积的功能。如下图所示:

重量重心的功能是在托盘造船、模块造船的基础上产生的需求。有了重量重心数据,就可以便于组织托盘、模块的吊装。

PDMS/AVEVA Marine中统计重量重心很简单,只需要添加需要统计的SITE、ZONE或者PIPE,BRANCH就可以计算出重量重心。

在PDMS/AVEVA Marine中统计重量前,需要完善管件库与特性库的关联。主要需要定义管件的质量及管子的线密度信息。

有了管件的质量及管子的线密度数据,如何计算管道的重量重心呢?

3.Com in OpenCASCADE

OpenCASCADE中提供了计算几何体的全局属性的功能,可计算曲线、曲面或几何体的质量Mass,质心(CentreOfMass),转动惯量等。所以可以使用OpenCASCADE来计算重量重心。

下面来对管道模型的重量重心计算进行分析。地球表面或表面附近的物体会受到地心引力作用。物体的诸微元所受到的地心引力由于距离地心很远,可看成是一组平行力系。这组平行力系有一个合力,合力的大小称为物体的重力。合力的作用线有一个特性,即不论物体相对地球如何放置,合力作用线总会通过一点,这个点称为物体的重心。物体重心相对物体的位置不因物体空间位置而改变。

设在空间中有N个质点,它们分别位于点(x1,y2,z1),(x2,y2,z2),... (xn, yn, zn)处,质量分别为m1, m2, ... Mn。由力学可知,该质点系的重心坐标为:

根据重心的计算公式,结合管道模型的特点,可以做如下假设:

l 将管子附件看成一个质点,质点坐标为管子附件的空间位置,质量为管件的质量;

l 将管段长度乘以线密度得到质量后再将其看成一个质点,质点坐标为管段的中心点;

下面使用OpenCASCADE中的类来计算管道系统的质量和质心坐标。有了质量和质心,乘以重力加速度即可以得到重量重心。计算一段简单管道模型的重量重心,管道模型如下图所示。模型从下到上对应的坐标及质量如下:

l 法兰Flange: Position X 26104mm Y -11441mm Z 19246.184mm, weight 19.815kg

l 管段Tubi:起点坐标:Position X 26104mm Y -11441mm Z 19316.184mm

终点坐标:Position X 26104mm Y -11441mm Z 21554.039mm

线密度:0.0315 kg/m

l 三通Tee: Position X 26104mm Y -11441mm Z 21770.039mm, weight 11kg

l 管段Tubi: 起点坐标:Position X 26104mm Y -11441mm Z 21986.039mm

终点坐标:Position X 26104mm Y -11441mm Z 22828.5mm

线密度:0.0315 kg/m

l 法兰Flange: Position X 26104mm Y -11441mm Z 22898.5mm, weight 19.815kg

l 垫片Gasket:Position X 26104mm Y -11441mm Z 22898.5mm, weight 1.14kg

在AVEVA Marine中计算的总质量为:148.80kg,

重心坐标为:X 26104.00mm Y -11441.00mm Z 21074.10mm

在OpenCASCADE中的计算代码如下:

/*
Copyright(C) 2017 Shing Liu([email protected])

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

#include <ElCLib.hxx>

#include <gce_MakeLin.hxx>

#include <GProp_GProps.hxx>
#include <GProp_PGProps.hxx>
#include <GProp_CelGProps.hxx>

#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")

#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")

// Centre of Mass of pipeline model.
void testCom(void)
{
    GProp_GProps aTool;
    GProp_PGProps aCompProps;

    // add component as point.
    // add flange: Position X 26104mm Y -11441mm Z 19246.184mm, weight 19.815kg
    aCompProps.AddPoint(gp_Pnt(26104.0, -11441.0, 19246.184), 19.815);

    // add tee: Position X 26104mm Y -11441mm Z 21770.039mm, weight 11kg
    aCompProps.AddPoint(gp_Pnt(26104.0, -11441.0, 21770.039), 11.0);

    // add flange: Position X 26104mm Y -11441mm Z 22898.5mm, weight 19.815kg
    aCompProps.AddPoint(gp_Pnt(26104.0, -11441.0, 22898.5), 19.815);

    // add gasket: Position X 26104mm Y -11441mm Z 22898.5mm, weight 1.14kg
    aCompProps.AddPoint(gp_Pnt(26104.0, -11441.0, 22898.5), 1.14);

    aTool.Add(aCompProps);

    // add two pipe as line curve.
    // add tubi: 起点坐标:Position X 26104mm Y -11441mm Z 19316.184mm
    //           终点坐标:Position X 26104mm Y - 11441mm Z 21554.039mm
    //           线密度:0.0315 kg/m
    gp_Pnt aPs1(26104.0, -11441.0, 19316.184);
    gp_Pnt aPe1(26104.0, -11441.0, 21554.039);
    gp_Lin aLine1 = gce_MakeLin(aPs1, aPe1).Value();

    GProp_CelGProps aTubiProp1;
    aTubiProp1.Perform(aLine1, ElCLib::Parameter(aLine1, aPs1), ElCLib::Parameter(aLine1, aPe1));
    aTool.Add(aTubiProp1, 0.0315);

    // add tubi: 起点坐标:Position X 26104mm Y -11441mm Z 21986.039mm
    //           终点坐标:Position X 26104mm Y - 11441mm Z 22828.5mm
    //           线密度:0.0315 kg/m
    gp_Pnt aPs2(26104.0, -11441.0, 21986.039);
    gp_Pnt aPe2(26104.0, -11441.0, 22828.5);
    gp_Lin aLine2 = gce_MakeLin(aPs2, aPe2).Value();

    GProp_CelGProps aTubiProp2;
    aTubiProp2.Perform(aLine2, ElCLib::Parameter(aLine2, aPs2), ElCLib::Parameter(aLine2, aPe2));
    aTool.Add(aTubiProp2, 0.0315);

    gp_Pnt aPc = aTool.CentreOfMass();
    std::cout << "Mass: " << aTool.Mass() << std::endl;
    std::cout << "CentreOfMass: " << aPc.X() << ", " << aPc.Y() << ", " << aPc.Z() << std::endl;
}

int main(int argc, char* argv[])
{
    testCom();

    return 0;
}

计算结果如下图所示:

与在AVEVA Marine中计算结果一致。

4.Conclusion

在船舶设计CAD系统和工厂设计CAD系统中都有管道的辅助设计,其中都有统计管道模型重量重心的功能。根据重心的计算公式,将管道模型中的管件简化为质点,再利用公式直接计算。最后在OpenCASCADE中实现重心及总质量的计算,计算结果与AVEVA Marine一致。

OpenCASCADE还可以计算任意曲线、曲面的重心及质量、转动惯量等。这些功能又是如何实现的呢?这个问题留给大家思考。

通过使用OpenCASCADE的功能,可以体会其编程风格。

5.References

1.同济大学数学教研室. 高等数学(下册). 高等教育出版社

2.单辉祖, 谢传峰. 工程力学. 高等教育出版社

时间: 2024-08-28 22:49:50

管道设计CAD系统中重量重心计算的相关文章

【转】Spark Streaming 实时计算在甜橙金融监控系统中的应用及优化

系统架构介绍 整个实时监控系统的架构是先由 Flume 收集服务器产生的日志 Log 和前端埋点数据, 然后实时把这些信息发送到 Kafka 分布式发布订阅消息系统,接着由 Spark Streaming 消费 Kafka 中的消息,同时消费记录由 Zookeeper 集群统一管理,这样即使 Kafka 宕机重启后也能找到上次的消费记录继而进行消费.在这里 Spark Streaming 首先从 MySQL 读取规则然后进行 ETL 清洗并计算多个聚合指标,最后将结果的一部分存储到 Hbase

CAD系统变量(参数)大全

所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制. CAD有很多的变量,例如fill或fillmode控制填充的显示,attmode控制块属性的显示,等等,了解一些常用的系统变量,当你的图纸出现一些问题时,你可以对出现问题的原因有些初步的判断,并可以通过修改变量设置快速解决.在CAD(无论是AUTOCAD还是浩辰CAD等其他CAD)的帮助中通常有可以系统变量的介绍,随时到帮

linux内核探索之内存管理(二):linux系统中的内存组织--结点、内存域和页帧

本文主要参考<深入linux内核架构>(3.2节)及Linux3.18.3内核源码 概述:本文主要描述了内存管理相关的数据结构:结点pg_data_t.内存域struct zone以及页帧(物理页):struct page ,以及该结构相关的一些基本概念. 1. 概述 内存划分为接点,每个结点关联到系统中的一个处理器,在内核中表示为pg_data_t. 各个结点又划分为内存域,比如DMA内存域,高端内存域,普通内存域. 内核内存域的宏: enum zone_type { #ifdef CONF

在Linux系统中文件(资源)和用户的管理

一个可执行二进制程序,被加载到内存,被内核调度到CPU上运行,这时候,就表现了一个进程.也可以说进程是程序的一个实例,是程序的动态表现. 在 Linux 系统中进程(process)是有属主的,也就是该进程以哪个用户的身份运行的.大家都知道,程序有输入和输出,也称这为程序IO.如果我们程序数据输入是磁盘.如,Web 服务器,接收用户的请求之后,把网页数据从磁盘中读入加工之后再把数据响应给用户.如果,发起Web 服务进程的用户没有读取该用户请求网页文件的权限.则无法响应用户的请求了.所以,文件(资

mysqladmin在SuSE linux系统中--sleep參数使用不准确问题

我们都知道,在MySQL中.能够使用mysqladmin命令的extended-status选项来查看MySQL的执行状态,比方获取我们经常关注的几个值: # mysqladmin -uroot -proot ext |grep "Questions\|Queries\|Innodb_rows\|Com_select \|Com_insert \|Com_update \|Com_delete " | Com_delete                               |

Android系统中的广播(Broadcast)机制简要介绍和学习计划

在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制:这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用:本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备. 在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式

DVB-C系统中QAM调制与解调仿真

本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对"信道"这方面的知识进行实践的机会一直不是很多,做这个小程序的过程中也熟悉了不少相关的知识.在这个程序中,每执行一步操作,都会画出时域信号图和频域信号图,同时会在控制台打印出有关变量的取值,对于理解QAM调制与解调有一定的帮助. 一.DVB-C中QAM的调制与解调 简单介绍DVB-C系统中的Q

mysqladmin在SuSE linux系统中--sleep参数使用不准确问题

我们都知道,在MySQL中,可以使用mysqladmin命令的extended-status选项来查看MySQL的运行状态,比如获取我们常常关注的几个值: # mysqladmin -uroot -proot ext |grep "Questions\|Queries\|Innodb_rows\|Com_select \|Com_insert \|Com_update \|Com_delete " | Com_delete                               |

让Redis在你的系统中发挥更大作用

Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储:它的数据模型非常独特,用的是单线程.另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis. 转向Redis当然也是可取的,许多开发者从一开始就把Redis作为首选数据库:但设想如果你的开发环境已经搭建好,应用已经在上面运行了,那么更换数据库框架显然不那么容易.另外在一些需要大容量数据集的应用,Redis也并不适合,因为它的数据集不会超过系统可用的内存.所以如果你有大数