温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
Femap
计算
报告
快速
生成
方法
唐志广
68 船舶标准化工程师 2023/3 Femap 计算报告快速生成方法计算报告快速生成方法1 唐志广(大连中远海运重工有限公司,辽宁大连 116113)摘 要:摘 要:为减少设计时间、提高设计效率,基于Femap 软件提供的应用编程接口,对计算报告所需图表的自动输出功能进行开发,并将其应用于设计实践。研究表明:该自动输出功能可显著提高设计效率。研究成果可为Femap 软件的二次开发提供一定参考。关键词:关键词:Femap;计算报告;二次开发;C+中图分类号:中图分类号:TP391.7 文献标志码:文献标志码:A DOI:10.14141/j.31-1981.2023.03.017 Fast 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 output 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:Femap;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软件不仅提供了许多强大的通用功能,还公开了众多的应用编程接口(Application Programming Interface,API),供用户开发自定义的扩展功能,以提高用户工作效率3。Femap 软件具有强大的后处理功能,便于使用者快速、有效地分析仿真结果。Femap 提供的后处理工具包括:表格、线图、云图、动画、用户自定义报告等4。此外,Femap 提供通用的结果处理功能,可在分析结束后合并计算结果,为编写项目计算报告提供了充分支持。在编写项目计算报告时,往往需要计算多种工况,此时需要将各工况的计算结果粘贴到计算报告中5。由于工况复杂,每份计算报告中需要粘贴的矢量图、云图的数量通常高达数百张,若全部通过手工操作,不仅浪费大量设计时间,还需要花费很多精力来检查正确性,非常繁琐。针对上述问题,本文基于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#、Visual Basic、VBA 等6。对于用户二次开发的应用程序,Femap 软件提供了多种交互方式,主要包括以下4 种:1)作为2 个独立的应用程序运行(无交互)。2)将Femap 作为后台服务运行。3)将用户应用程序作为Femap 加载项运行。4)将Femap 程序界面嵌入用户应用程序中。1.1 作为作为2 个独立的应用程序运行(无交互)个独立的应用程序运行(无交互)该方式是最简单的交互方式。由于Femap 和用户二次开发的应用程序都不需要真正了解对方的用户界面,故不需要进行额外的设置7,只需要启动应用程序,然后通过 COM 接口获取已经运行的Femap应用程序窗口。新的Femap 应用程序默认隐藏窗口界面,要将窗口显示出来必须调用feAppVisible 函数。1.2 将将Femap作为后台服务运行作为后台服务运行 若希望用户二次开发的应用程序界面成为用户唯一可见的用户界面,则在启动新的Femap程序后,不调用 feAppVisible 函数,此时仅有用户二次开发的应用程序界面可供交互。然而,通过 API,用户二次开发的应用程序可访问Femap 的任何接口。由于此交互方式不需要更新Femap 界面,故运行速度较快。1.3 将用户应用程序作为将用户应用程序作为Femap加载项运行加载项运行 在此交互方式下,用户二次开发的应用程序成为Femap的一个加载项。用户看到的整体界面和普通的Femap界面基本相同,仅仅多了一个浮动面板,即用户二次开发的图形用户界面(Graphical User Interface,GUI)。该交互模式将用户二次开发的程序界面嵌入Femap 程序界面中,并与Femap 操作界面融为一体。1.4 将将Femap程序界面嵌入用户应用程序中程序界面嵌入用户应用程序中 将 Femap 程序界面嵌入用户应用程序界面中,Femap 程序界面可整体显示,也可部分显示。若要关闭除视图窗口外的其他Femap 窗体界面元素,只需要调用feAppEmbed 函数即可。综上所述,Femap 软件与用户二次开发的应用程序间有多种交互方式,具体采用何种方式,需要根据应用场合而定。本文将用户二次开发的程序嵌入Femap用户界面中,使其与Femap软件界面的风格相统一。2 使用使用C+读写读写Word文档的方法文档的方法 要实现自动生成计算报告,则需要通过程序读写Word文档。通过程序读写Word文档主要有以下2 种方式:1)直接使用 Word 的 COM 组件接口,见图1;2)使用Word 操作控件,如Spire.Doc 等。第 1 种方式常会由于各设计师电脑上安装的 Word版本不同而导致程序兼容性问题;第2 种方式往往会产生额外的费用。本文的研究涉及插入文字和图片等基本操作,主要通过改造开源库DuckX 实现所需要的功能。由于DuckX 仅提供了在Word文档中插入文字的功能,需要增加在 Word 文档中插入图片的功能。图1 直接使用Word 的COM组件接口 Word 自 2007 版本之后的文件为.doc 格式,使用压缩软件对.doc 格式的文件进行解压操作,可得到一些文件和文件夹。其中,document.xml 文件包含了文档的主要文本内容,DuckX 通过该文件实现docx 文档的文本读写功能。DuckX 在 Word 中插入文本只需要修改document.xml 即可,插入图片相较插入文本更为复杂,主要包括如下步骤:1)在document.xml 中写入图片的大小、版式、位置等信息,设置图片编号。2)在 word/media 文件夹中插入一个实际的图片文件。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 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-set_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 软件,创建一个微软基础类库(Microsoft 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;HRESULT 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 程序关闭时,应能实现对话框自动退出的功能。因此,二次开发程序应能捕捉并响应Femap 程序发出的退出消息。通过如下代码在 OnInitDialog()方法中注册Femap 消息:FE_EVENT_MESSAGE=RegisterWindow Message(LFE_EVENT_MESSAGE);通过如下代码重载对话框的 WindowProc 函数处理消息:if(message=FE_EVENT_MESSAGE)if(wParam=femap:z