1、 68 船舶标准化工程师 2023/3 Femap 计算报告快速生成方法计算报告快速生成方法1 唐志广(大连中远海运重工有限公司,辽宁大连 116113)摘 要:摘 要:为减少设计时间、提高设计效率,基于Femap 软件提供的应用编程接口,对计算报告所需图表的自动输出功能进行开发,并将其应用于设计实践。研究表明:该自动输出功能可显著提高设计效率。研究成果可为Femap 软件的二次开发提供一定参考。关键词:关键词:Femap;计算报告;二次开发;C+中图分类号:中图分类号:TP391.7 文献标志码:文献标志码:A DOI:10.14141/j.31-1981.2023.03.017 Fast
2、Method for Generating Femap Calculation Reports TANG Zhiguang(COSCO Shipping Heavy Industry(Dalian)Co.,Ltd.,Dalian 116113,Liaoning,China)Abstract:In order to reduce design time and improve design efficiency,based on the application programming interface provided by Femap software,the automatic outpu
3、t function of charts required for calculation reports is developed and applied to design practice.Research shows that the automatic output function can significantly improve design efficiency.The research results can provide some references for the secondary development of Femap software.Key words:F
4、emap;calculation report;application programming interface;C+作者简介:唐志广(1981),男,硕士、高级工程师。研究方向:船舶与海洋工程。0 引言引言 Femap是Siemens PLM Software开发的有限元(Finite Element,FE)预处理和后处理软件,主要用于工程仿真和分析,广泛应用于汽车、航天、航空、船舶、电子、机械制造等行业中1。Femap 软件默认安装NX Nastran 解算器,并能与多种FE分析解算器兼容,如ABAQUS、ANSYS、LS-DYNA等2。Femap软件不仅提供了许多强大的通用功能,还公开
5、了众多的应用编程接口(Application Programming Interface,API),供用户开发自定义的扩展功能,以提高用户工作效率3。Femap 软件具有强大的后处理功能,便于使用者快速、有效地分析仿真结果。Femap 提供的后处理工具包括:表格、线图、云图、动画、用户自定义报告等4。此外,Femap 提供通用的结果处理功能,可在分析结束后合并计算结果,为编写项目计算报告提供了充分支持。在编写项目计算报告时,往往需要计算多种工况,此时需要将各工况的计算结果粘贴到计算报告中5。由于工况复杂,每份计算报告中需要粘贴的矢量图、云图的数量通常高达数百张,若全部通过手工操作,不仅浪费大量
6、设计时间,还需要花费很多精力来检查正确性,非常繁琐。针对上述问题,本文基于Femap软件提供的API,对计算报告所需图表的自动输出功能进行开发,并将其应用于设计实践。1 Femap的二次开发方法的二次开发方法 为方便二次开发,Femap软件的API允许用户开发自定义的扩展功能。Femap 软件的API可使用技术交流 Technical Communication 2023/3 船舶标准化工程师 69 任何支持对象链接与嵌入/组合对象模型(Object Linking and Embedding/Component Object Model,OLE/COM)的编程语言进行开发,如C/C+、C#、
7、Visual Basic、VBA 等6。对于用户二次开发的应用程序,Femap 软件提供了多种交互方式,主要包括以下4 种:1)作为2 个独立的应用程序运行(无交互)。2)将Femap 作为后台服务运行。3)将用户应用程序作为Femap 加载项运行。4)将Femap 程序界面嵌入用户应用程序中。1.1 作为作为2 个独立的应用程序运行(无交互)个独立的应用程序运行(无交互)该方式是最简单的交互方式。由于Femap 和用户二次开发的应用程序都不需要真正了解对方的用户界面,故不需要进行额外的设置7,只需要启动应用程序,然后通过 COM 接口获取已经运行的Femap应用程序窗口。新的Femap 应用
8、程序默认隐藏窗口界面,要将窗口显示出来必须调用feAppVisible 函数。1.2 将将Femap作为后台服务运行作为后台服务运行 若希望用户二次开发的应用程序界面成为用户唯一可见的用户界面,则在启动新的Femap程序后,不调用 feAppVisible 函数,此时仅有用户二次开发的应用程序界面可供交互。然而,通过 API,用户二次开发的应用程序可访问Femap 的任何接口。由于此交互方式不需要更新Femap 界面,故运行速度较快。1.3 将用户应用程序作为将用户应用程序作为Femap加载项运行加载项运行 在此交互方式下,用户二次开发的应用程序成为Femap的一个加载项。用户看到的整体界面和
9、普通的Femap界面基本相同,仅仅多了一个浮动面板,即用户二次开发的图形用户界面(Graphical User Interface,GUI)。该交互模式将用户二次开发的程序界面嵌入Femap 程序界面中,并与Femap 操作界面融为一体。1.4 将将Femap程序界面嵌入用户应用程序中程序界面嵌入用户应用程序中 将 Femap 程序界面嵌入用户应用程序界面中,Femap 程序界面可整体显示,也可部分显示。若要关闭除视图窗口外的其他Femap 窗体界面元素,只需要调用feAppEmbed 函数即可。综上所述,Femap 软件与用户二次开发的应用程序间有多种交互方式,具体采用何种方式,需要根据应用
10、场合而定。本文将用户二次开发的程序嵌入Femap用户界面中,使其与Femap软件界面的风格相统一。2 使用使用C+读写读写Word文档的方法文档的方法 要实现自动生成计算报告,则需要通过程序读写Word文档。通过程序读写Word文档主要有以下2 种方式:1)直接使用 Word 的 COM 组件接口,见图1;2)使用Word 操作控件,如Spire.Doc 等。第 1 种方式常会由于各设计师电脑上安装的 Word版本不同而导致程序兼容性问题;第2 种方式往往会产生额外的费用。本文的研究涉及插入文字和图片等基本操作,主要通过改造开源库DuckX 实现所需要的功能。由于DuckX 仅提供了在Word
11、文档中插入文字的功能,需要增加在 Word 文档中插入图片的功能。图1 直接使用Word 的COM组件接口 Word 自 2007 版本之后的文件为.doc 格式,使用压缩软件对.doc 格式的文件进行解压操作,可得到一些文件和文件夹。其中,document.xml 文件包含了文档的主要文本内容,DuckX 通过该文件实现docx 文档的文本读写功能。DuckX 在 Word 中插入文本只需要修改document.xml 即可,插入图片相较插入文本更为复杂,主要包括如下步骤:1)在document.xml 中写入图片的大小、版式、位置等信息,设置图片编号。2)在 word/media 文件夹中
12、插入一个实际的图片文件。3)修改word/_rels/document.xml.rels,添加一个记录,将图片编号与图片文件关联起来。70 船舶标准化工程师 2023/3 为实现在Word文档中插入图片的功能,DuckX需要添加如下 3 类代码:1)Relationship 类代码,用于管理 word/_rels/document.xml.rels 文件;2)InlinePicture 类代码,用于管理图片对象;3)Run类代码,用于插入图片。3 编程与测试编程与测试 考虑到程序运行速度以及开创性,本文基于Femap 软件,采用C+语言进行二次开发。二次开发的程序将Visual Studio
13、2019社区版作为集成开发环境,程序界面见图2。图2 程序界面 3.1 DuckX 改造改造 从GitHub 上下载DuckX,使用CMake工具生成 Microsoft Visual Studio(VS)项目,添加Relationship 类、InlinePicture 类代码,并在 Run 类代码中添加add_inline_picture 方法,随后编译为lib文件供后续使用。InLinePicture 类代码的关键部分如下:duckx:InlinePicture:InlinePicture(pugi:xml_node parent,pugi:xml_node current)this-s
14、et_parent(parent);this-set_current(current);void duckx:InlinePicture:save_to_doc(zip_t*doc)const std:string path=word/;path=path+target;zip_entry_open(doc,path.c_str();zip_entry_write(doc,pic_data,data_size);zip_entry_close(doc);3.2 连接连接Femap并创建应用程序对象并创建应用程序对象 首先打开Visual Studio 软件,创建一个微软基础类库(Microso
15、ft Foundation Classes,MFC)的对话框应用,再从femap.tlb 导入所需要的接口。在对话框的头文件中添加如下语句:#import D:Program FilesSiemensFemap 2022.1femap.tlb named_guids rename(GetProp,feGetProp)在对话框头文件中添加应用程序对象供后续使用:CComQIPtr pModel;在对话框的 OnInitDialog()方法中对 pModel 进行初始化,为使代码清晰易读,此处省去了与异常判断有关的部分代码:CoInitialize(NULL);CLSID clsid;HRESUL
16、T hr=AfxGetClassIDFromString(L femap.model,&clsid);IUnknown FAR*punk;hr=:CoCreateInstance(clsid,NULL,CLSCTX _SERVER,IID_IUnknown,(void*)&punk);pModel=punk;pModel-feAppRegisterAddInPane(true,(int)m_ hWnd,0,false,false,3,1);pModel-feAppVisible(true);3.3 在程序中处理消息在程序中处理消息 当Femap 程序关闭时,应能实现对话框自动退出的功能。因此,
17、二次开发程序应能捕捉并响应Femap 程序发出的退出消息。通过如下代码在 OnInitDialog()方法中注册Femap 消息:FE_EVENT_MESSAGE=RegisterWindow Message(LFE_EVENT_MESSAGE);通过如下代码重载对话框的 WindowProc 函数处理消息:if(message=FE_EVENT_MESSAGE)if(wParam=femap:zEventCode:FEVENT_ SHUTDOWN)if(lParam=1)PostMessage(WM_CLOSE,0,0);3.4 核心代码核心代码 在程序界面中选中 OutputSet、Out
18、putVector、Group 与View,通过遍历循环,逐一将结果输出到技术交流 Technical Communication 2023/3 船舶标准化工程师 71 Word文档中。Word需要使用的图片来自Femap 生成的View,Femap 可以将View 显示的内容保存为图片文件,也可将显示内容保存至剪贴板。由测试可知:先将 View 显示的内容保存至剪贴板,再导入到Word时,程序运行速度较快。二次开发程序的核心代码如下:femap:IViewPtr view=pModel-feView;view-Get(viewID);pModel-feAppSetActiveView(vie
19、wID);pModel-feGroup-Active=groupID;view-OutputSet=outputSetID;view-ContourVector1V2=contourVector;view-Put(viewID);view-FitVisible(false);/pModel-feView Regenerate(0);pModel-feFilePictureCopy();/std:string id=std:to_string(picIndex);std:string rid=rid+id;std:string target=media/+rid+.png;duckx:Run r
20、un=doc.paragraphs().insert_ paragraph_after().add_run();duckx:InlinePicture pic=run.add_inline_picture(id,rid,wPicture,hPicture);pic.data_size=GetClipImageSize();pic.pic_data=GetClipImageData();doc.set_picture_relationship(pic);doc.paragraphs().insert_paragraph_after(pic_title).insert_paragraph_afte
21、r();代码中涉及对图片宽度和高度的计算。计算报告采用竖版A4 纸,由document.xml 可知:Word中竖版A4纸的宽度为11 906 twip(1 twip=0.017 6 mm),高度为16 838 twip,上下页边距为1 440 twip,左右页边距为1 800 twip。在内存中,图片的单位是像素,需要先进行单位换算,再根据页面宽度和高度自动调整图片的 大小。4 最终效果最终效果 在运行二次开发的程序后,会自动打开一个Femap 窗口,用户应用程序以浮动面板的形式嵌入在Femap窗口中。打开要导出计算报告的模型,点击面板中左上角的提取模型信息按钮,此时面板中会列出该模型中所有
22、的条目。选择要导出的条目,输入报告的文件名,点击面板右上角的导出 Word按钮,就可以自动导出报告。此外,面板中还可以设定图片标题的生成方式,对图片标题进行自定义。5 结论结论 本文基于Femap软件提供的应用编程接口,对计算报告所需图表的自动输出功能进行开发,并将其应用于设计实践。研究表明:该自动输出功能可显著提高设计效率。手动操作需要1 天才能完成的报告,使用本文的二次开发程序仅需要5 min 即可完成。本文的研究成果可为Femap软件的二次开发提供一定参考。参考文献:参考文献:1 张志康,司南,陈乐昆,等.Femap二次开发技术介绍与应用J.自动化技术与应用,2021,40(4):54-
23、57.2 虞驰程,胡以怀,吴漪.基于 Femap 的风帆基座局部强度分析J.船舶工程,2015,37(10):36-39.3 杨志斌.FEMAP 模型转换的一点注记J.结构强度研究,2002(4):42-44.4 ABBEY T.Siemens Femap with NX Nastran OverviewJ.Digital Engineering,2018,23(6):26-30.5 万冬冬.基于Femap with NX Nastran 的货舱结构有限元分析实例J.CAD/CAM 与制造业信息化,2008(10):62-64.6 虞驰程,胡以怀,吴漪.基于 Femap 的风帆基座局部强度分析J.船舶工程,2015,37(10):36-39.7 肖浩,张开会,林利芬.基于 Femap With Nastran 的桅杆式起重机结构优化及应用J.机电信息,2017(18):42-43.
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100