APP下载

基于VBA的结构有限元建模命令流自动生成方法

2016-03-18秦江涛

造船技术 2016年1期
关键词:二次开发船体命令

胡 江, 秦江涛

(1.武汉理工大学 高性能舰船技术教育部重点实验室, 湖北 武汉 430063; 2.武汉理工大学 交通学院, 船舶、海洋与结构工程系, 湖北 武汉 430063)



基于VBA的结构有限元建模命令流自动生成方法

胡江1,2, 秦江涛1,2

(1.武汉理工大学 高性能舰船技术教育部重点实验室, 湖北 武汉 430063; 2.武汉理工大学 交通学院, 船舶、海洋与结构工程系, 湖北 武汉 430063)

摘要针对目前船舶结构有限元分析建模方法存在的不足,采用VBA编程方法对船舶设计软件Maxsurf进行二次开发,能自动提取Maxsurf数据库中肋骨、舱壁、甲板的空间位置坐标数据,并快捷地转换为可在ANSYS、Patran等有限元软件上执行的APDL或PCL参数化建模命令流文件。相关实例表明该方法能显著提高建模及相关修改工作的效率。

关键词结构有限元建模二次开发命令流VBAMaxsurf

Automatic Generation of Parametric Command Flow for FEM Modeling of Structure Based on VBA Method

HU Jiang1,2, QIN Jiang-tao1,2

(1.Key Laboratory of High Performance Ship Technology of Ministry of Education, Wuhan University of Technology, Wuhan Hubei 430063, China; 2.Departments of Naval Architecture, Ocean and Structural Engineering, School of Transportation, Wuhan University of Technology, Wuhan Hubei 430063, China)

AbstractAiming at the problems existing in current FEM modeling of ship structure,secondary development work using VBA for the ship design software Maxsurf has been done, by which the space coordinate dat of frame shape points, bulkhead and deck can be automatic extracted and convered to the APDL or PCL command flow file which can be run on the FEM software like ANSYS or Patran. Related examples show that the method can significantly improve the efficiency of modeling and the related modification work.

Keywords FEM modeling of ship structureSecondary developmentCommand flowVBAMaxsurf

0引言

由于精度高、实用性强以及行业的普遍认可,船舶结构有限元分析被广泛应用于各类船舶的结构计算中。其中船体结构建模是有限元分析最基础的工作,但由于船体外形复杂、内部构件繁多,该工作耗时长且易出错。因此采用编程手段,对建模工作进行自动化处理就显得尤为必要。

目前船体结构有限元建模一般采取两种方法。第一种方法是利用初步设计或详细设计阶段在其他船舶设计软件中建好的船体模型,将其转换成IGS、STEP等标准格式导入有限元软件中,再在模型上切割出肋骨线、纵桁线等结构线段。该方法省时快捷,但要对船体面进行多次切割,且在模型的转换和切割过程中常会出现模型拓扑信息丢失、几何信息错误(如面的破损等)等情况,导致后续网格划分、计算等无法进行。第二种方法是在结构有限元分析前处理模块中,通过图形界面或手工输入命令流的建模方式生成船体模型。该方法生成的模型精度好且无需对模型进行二次转换处理,但由于需要手工输入型值数据,工作繁琐、耗时长且容易出现错误。

为了充分发挥上述方法各自的优点,克服其不足,本文采用VBA(Visual Basic for Applications,简称VBA)开发的程序实现了既能充分利用船舶设计软件Maxsurf中的船体三维模型数据,又能自动生成相应有限元计算所需的船体建模命令流文件的功能,从而达到了快捷参数化建模与修改的目的。

1开发背景与思路

1.1Maxsurf 简介

Maxsurf是澳大利亚Formation Design Systems公司开发的船舶设计建造软件中的建模模块。2011年该软件成为Bently工程软件中的一员,其主要优势在于强大的NURB(非均匀有理B样条)曲面建模能力、与Word、AutoCAD、Excel等通用软件良好的数据交换能力,以及实时快捷的水动力性能计算能力,在国内外诸多高校、科研院所、制造企业中有着广泛的应用。

1.2Maxsurf二次开发构架与方法

目前国内外针对Maxsurf二次开发均展开了相关工作。国外主要是将各种多目标遗传优化算法如NSGA-II、EASDS等通过二次开发嵌入Maxsurf中,进行船型的水动力优化工作[1、2];国内则主要进行数据转换接口的二次开发[3、4]以及系列船型的仿射变换[4、5]。

Maxsurf 自身并无二次开发的工具,但提供了二次开发的接口,使得其他程序如Excel、Access、AutoCAD可以通过接口得到所需要的数据。该方法核心是微软所推行的COM(Component Object Model)组件对象模型技术[6],其实质是允许一个应用程序操作另一个应用程序[2],[7]。基于该技术开发的程序或系统具有开放性好、易升级、易维护、易扩展、与平台及语言无关等特点。

COM是面对对象的软件模型,因而对象是它的基本要素之一。本文的开发工作就是通过编程语言对应用程序Maxsurf中对象(Object)的操控来实现的。在Maxsurf中,对象具体指代的是surface(面)、control point(控制点)、marker(标记点)这些可以定义船体模型的元素,每一个对象都包含“特性”(Properties)和“方法”(Methods)两种属性,其中,“特性”是用来存储类如名称、型值之类的常量,“方法”是指一些允许对对象进行操控的函数[6]。

对象本身不可被外部程序直接访问,但Maxsurf通过把开放对象的“特性”与“方法”给外部程序,就可以使用许多与COM组件技术兼容的程序语言(如Matlab、Visual Basic、C++和Java等)来定义、存取和修改对象,进而达到控制船体模型、获取相关数据信息的目的。

Maxsurf是以层级结构来组织对象的,其顶层对象是Application,其余所有对象都直接或间接与之关联[6]。图1以对象Application为例,展示了部分对象之间的层级结构关系(限于篇幅,图中只对对像Design作了展开)。

图1 “对象”层级结构图

各对象之间的结构关系,在开发代码中语言的组织顺序里也有体现,下面以一段赋值代码为例进行说明。

(1) Dim msApp as Maxsurf Modeler.Application;

(2) Dim i%;

(3) Set msApp=New Maxsurf Modeler.Application;

(4) i=msApp.Design.FrameOfReference.DatumWL。

其中(1)、(2)、(3)行代码是基本的定义语句,代码(4)实现了将水线高度值赋给参数i的功能,可以很清楚地看到代码(4)中各对象与图1中相关对象相一致的结构层级关系。

2命令流生成程序实现过程

2.1开发环境

本文选择了Excel VBA开发环境,主要基于以下几点:(1) VBA语言虽然在运行速度上不及C++之类的语言,但初步设计或详细设计阶段船体模型数据类型单一,也不包含复杂的生产加工信息,VBA可胜任此类数据的提取和转换工作;(2) 以Excel作为数据传递的媒介,符合日常工作习惯,也便于后续数据处理工作;(3) VBA语言相对简单,且不用做封装处理,便于使用者修改代码,实现符合自身需求的功能。

2.2程序开发简述

2.2.1库文件的引用

在Excel环境下要实现与Maxsurf数据库的连接,可使用前期联编方法或后期联编方法。与后期联编相比,前期联编的代码运行速度更快且代码错误在编译阶段就可以被自动识别,要使用前期联编方法首先需在VB编辑器的引用中加Maxsurf 库文件,即在引用对话框中对“Bentley Moderler 1.1 Automation Library”勾选,如图2所示。

图2 Maxsurf库文件的引用

图3 程序流程图

2.2.2程序主要步骤与流程图

程序主要的步骤与流程如下(流程图见图3)。

(1) 载入Maxsurf模型并调整精度;

(2) Mlist命令提取型值点空间坐标数据;

(3) 空间坐标数据遍历赋值,输出至Excel表格并转换成命令流文件;

(4) 命令流数据导入ANSYS或Patran生成模型。

2.2.3程序关键代码

限于篇幅,下面只对提取型值数据的VBA代码与生成命令流的VBA代码进行说明。

(1) For i = 1 To count 'msDesign.markers.count;

(2) Coord(0) = mList(i).Position;

(3) Coord(1) = mList(i).Offset;

(4) Coord(2) = mList(i).Height;

(5) Range("A" & i + 1) =i;

(6) Range("B"&i + 1) =Format(Coord(0), "#0.00";

(7) Range("C"&i + 1) =Format(Coord(1), "#0.00";

(8) Range("D"&i + 1) =Format(Coord(2), "#0.00" 。

第(1)行代码是对型值点进行遍历。第(2)、(3)、(4)行代码分别将型值点的Position(纵向坐标)、Offset(横向坐标)、Height(高度坐标)赋给含有3个元素的数组Coord(),由于mlist命令会自动对型值点按纵向坐标和高度坐标从小到大排列,因此我们不用另行编程对其进行排序。第(5)行代码是为了给型值点编号,以利于后续的命令流生成工作。第(6)、(7)、(8)行代码则实现了将数组Coord()的三个元素依次填入Exel表格的功能。

接下来要生成命令流文件,首先应参照APDL或PCL命令流中创建型值点的格式,来决定如何在代码中嵌入APDL或PCL命令。

ANSYS软件结构模块中创建型值点的命令流格式:/prep7;K,2,0,2.8,187.6……,其中,K命令后面第一位数字代表节点编号,后面三个数字代表型值点的三维坐标。Patran软件中结构模块创建型值点的命令流格式:asm_const_grid_xyz("1", "[-172 0 0]",……,中括号内数字是型值点的三维坐标。据此我们可以用下面的VBA代码实现命令流的自动生成功能(以生成ANSYS APDL命令流为例):

(1) Set sFile = fso.Create Text File (FileName);

(2) sFile.WriteLine ("/prep7");

(3) sFile.WriteBlankLines (1);

(4) For s = 2 To _ Sheet1. Range("A65536"). End(xlUp). Row;

(5) sFile. Write Line ("k") _ & "," & (Sheet1. Cells(s,1). Value _& "," & Sheet1. Cells(s, 2).Valu _& "," & Sheet1. Cells(s, 3).Value _& "," & Sheet1. Cells(s, 4). Value);

(6) Next s。

图4 程序界面图

第(1)行代码创建了一个记事本文件,第(2)行代码嵌入了APDL命令中的进入前处理器的命令,第(3)行代码写入了一个空白行作为间隔,第(4)、(5)、(6)行代码则实现了将Exel表格中的第1至4列数据以及APDL命令中创建关键点命令K写入记事本文件的功能。

2.2.4程序界面

在Excel中生成的程序界面如图4所示。由5个面板组成,双击面板即可执行相应命令,如需修改或另行嵌入APDL或PCL命令,切换到Excel内置的VB编辑器中对应代码进行修改即可。

3实例介绍

下面以一条总长为108 m的横骨架式散货船的整船建模为例,对开发程序进行说明。图5是该船在Maxsurf中建好的三维模型,图6是该船的肋骨型线图。

图5 Maxsurf中的三维模型图

图6 肋骨型线图

在图4所示的界面中,点击载入msd文件(msd文件是Maxsurf模型的专用格式),在弹出的窗口中选择该散货船的模型,打开后进行精度调整,型值生成、提取、转换工作后可得命令流文件(见图7)。将命令流导入ANSYS 结构模块运行后,即可生成船体结构建模所需要的关键点,如图8所示(船体左右对称,故只显示一半模型),可以看出采用该方法船体、舱壁、甲板的数据点都可以很好地传递到ANSYS中。

模型数据点建好后,对照Excel数据表中的节点编号,在生成的命令流中加入循环、赋属性、定义边界条件、加载载荷等语句即可快速建立模型并进行计算分析。

图7 命令流文件

图8 模型关键点的生成

4结语

本文采用的基于VBA与COM组件技术的开发方法不仅适用于Maxsurf软件,对于所有支持COM组件技术的常用软件如AutoCAD、Office,均可采用这种方法来“定制”出自己所想要的功能。

对常用的行业软件进行二次开发,不仅在于能显著提高学习和工作效率,更重要的是能帮助开发者深入理解国外先进软件的内部组织架构及其二次开发接口的设计方法理念,这对开发国产的优秀行业软件是很有帮助的。

本方法目前对横骨架式船型和纵骨架式船型均适用,能将常规方法中耗费数天的数据输入建模工作缩短至数分钟,尤其适合于结构计算中的多方案比较以及设计修改引起的重新计算工作。但值得指出的是,目前程序中纵骨架式船型的纵骨位置数据尚需人工输入,这主要是由于纵骨布置的位置数据往往要到详细设计阶段的中后期才能得到,且目前尚未见到有定位于初步设计、详细阶段的船舶设计软件能将纵骨布置功能很好地融入到前期的三维船型设计中,导致相关数据不足,因此可以以此为出发点,进行后续的研究工作。

参考文献

[1]Hafez K A, El-Kot A A. Comparative investigation of the stagger variation influence on the hydrodynamic interference of high speed trimaran[J]. Alexandria Engineering Journal, 2012, 51(3): 153-169.

[2]Ayob A F, Ray T, Smith W F. A Framework for Scenario-Based Hydrodynamic Design Optimization of Hard Chine Planing Craft[C].Proceedings of the 9th International Conference in Computer and IT Applications in the Maritime Industries, 2014.

[3]黄金锋.船型设计与性能分析系统数据接口设计与实现[J].中国舰船研究, 2012, 7(1):95-99.

[4]司南.基于设计软件集成平台的游艇外型与型线协调性研究[D]. 武汉:武汉理工大学, 2013.

[5]李杰. 三维船体库系统的研究与设计[D]. 大连:大连海事大学, 2008.

[6]Maxsurf Modeler Automation Manual[Z]. Bentley Systems, Incorporated, Windows Version 18,2012.

[7]李咏红. CAD二次开发方法研究与实现[D]. 成都:电子科技大学, 2004.

[8]蒋毅文. Maxsurf及相关设计程序在船舶设计中的应用[J]. 船海工程, 2005(4):39-41.

[9]李平书, 严家文, 任鸿. 船舶结构有限元模型快速生成研究[J]. 船舶, 2007(4):52-55.

[10]金建海.船舶CAE前后处理系统研制[D]. 无锡:江南大学, 2012.

中图分类号U662

文献标志码A

作者简介:胡江(1988-),男,硕士生,研究方向为船舶水动力性能与船型研究。

基金项目:国家自然科学基金项目(编号:51409201);中央高校基本科研业务费专项基金(编号:2015IVA029)。

猜你喜欢

二次开发船体命令
船体行驶过程中的压力监测方法
只听主人的命令
超大型FPSO火炬塔及船体基座设计
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
移防命令下达后
西门子Easy Screen对倒棱机床界面二次开发
这是人民的命令
船体剖面剪流计算中闭室搜索算法
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用