ANSYS基于VC++6.0的二次开发方法_第1页
ANSYS基于VC++6.0的二次开发方法_第2页
ANSYS基于VC++6.0的二次开发方法_第3页
ANSYS基于VC++6.0的二次开发方法_第4页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ANSYS基于VC+6.0的二次开发方法ANSYS基于VC+6.0的二次开发方法ANSYS基于VC+6.0的二次开发与相互作用分析在ANSYS中的实现1 概述ANSYS是一套功能十分强大的有限元分析软件,能实现多场及多场耦合分析;是实现前后处理、求解及多场分析统一数据库的一体化大型FEA软件;支持异种、异构平台的网络浮动,在异种、异构平台上用户界面统一、数据文件全部兼容,强大的并行计算功能支持分布式并行及共享内存式并行。该软件具有如下特点:(1) 完备的前处理功能ANSYS不仅提供了强大的实体建模及网格划分工具,可以方便地构造数学模型,而且还专门设有用户所熟悉的一些大型通用有限元软件的数据接口

2、(如MSCNSSTRAN,ALGOR,ABAQUS等),并允许从这些程序中读取有限元模型数据,甚至材料特性和边界条件,完成ANSYS中的初步建模工作。此外,ANSYS还具有近200种单元类型,这些丰富的单元特性能使用户方便而准确地构建出反映实际结构的仿真计算模型。(2) 强大的求解器ANSYS提供了对各种物理场量的分析,是目前唯一能融结构、热、电磁、流体、声学等为一体的有限元软件。除了常规的线性、非线性结构静力、动力分析外,还可以解决高度非线性结构的动力分析、结构非线性及非线性屈曲分析。提供的多种求解器分别适用于不同的问题及不同的硬件配置。(3) 方便的后处理器ANSYS的后处理分为通用后处理

3、模块(POST1)和时间历程后处理模块(POST26)两部分。后处理结果可能包括位移、温度、应力、应变、速度以及热流等,输出形式可以有图形显示和数据列表两种。(4) 多种实用的二次开发工具ANSYS除了具有较为完善的分析功能外,同时还为用户进行二次开发提供了多种实用工具。如宏(Marco)、参数设计语言(APDL)、用户界面设计语言(UIDL)及用户编程特性(UPFs),其中APDL(ANSYS Parametric Design Language)是一种非常类似于Fortran77的参数化设计解释性语言,其核心内容为宏、参数、循环命令和条件语句,可以通过建立参数化模型来自动完成一些通用性强的

4、任务;UIDL(User Interface Design Language)是ANSYS为用户提供专门进行程序界面设计的语言,允许用户改变ANSYS的图形用户界面(GUI)中的一些组项,提供了一种允许用户灵活使用、按个人喜好来组织设计ANSYS图形用户界面的强有力工具;UPFs(User Programmable Features)提供了一套Fortran77函数和例程以扩展或修改程序的功能,该项技术充分显示了ANSYS的开放体系,用户不仅可以采用它将ANSYS程序剪裁成符合自己所需的任何组织形式(如可以定义一种新的材料,一个新的单元或者给出一种新的屈服准则),而且还可以编写自己的优化算法,

5、通过将整个ANSYS作为一个子程序调用的方式实现。鉴于上述特点,近几年来,ANSYS软件在国内外工程建设和科学研究中得到了广泛的应用。但这些应用大多局限于直接运用ANSYS软件进行实际工程分析,对利用ANSYS提供的二次开发工具进行有限元软件设计却很少涉及。本文首次利用ANSYS软件的二次开发功能,以VC+6.0为工具,运用APDL语言,对ANSYS 进行二次开发,编制框筒结构桩筏基础土相互作用体系与地震反应分析程序。2 程序设计目标针对某一实际工程问题,ANSYS所提供的APDL语言可对ANSYS软件进行封装。APDL语言即ANSYS软件提供的参数化设计语言,它的全称是ANSYS Param

6、etric Design Language。使用APDL语言可以更加有效地进行分析计算,可以轻松地进行自动化工作(循环、分支、宏等结构),而且,它是一种高效的参数化建模手段。使用APDL语言进行封装的系统可以只要求操作人员输入前处理参数,然后自动运行ANSYS进行求解。但完全用APDL编写的宏还存在弱点。比如用APDL语言较难控制程序的进程,虽然它提供了循环语句和条件判断语句,但总的来说还是难以用来编写结构清晰的程序。它虽然提供了参数的界面输入,但功能还不是太强,交互性不够流畅。针对这种情况,本文用VC+6.0开发框筒结构桩筏基础土相互作用有限元分析程序(简称LWS程序)。本程序设计目标是利用

7、VC+6.0对ANSYS进行封装。用VC+6.0对ANSYS模拟框筒结构桩筏基础土相互作用进行二次开发,用户只需输入诸如地震波、计算时间步长、阻尼比等物理性能参数等,系统就能自动调用ANSYS计算程序,自动进行网格划分、地震动加载以及自动求解。该系统由于前台开发友好、方便、易用的人机交互界面,对复杂的、难于理解和掌握的ANSYS命令流进行后台封装,因此,程序设计可让即使从未认真学习过ANSYS软件的工程设计人员也能很好地借助本系统进行结构抗震性能有限元分析,具有较强的处理实际问题能力。用户输入计算参数,即可调用后台的ANSYS命令进行计算,ANSYS把计算结果返回给用户,进行后处理。程序设计的

8、主要原则和功能如下:(1)方便原则,即程序模块应具有良好的用户界面和易用性。程序前台设计采用Windows提供的标准图形用户界面(GUI),用户无须接受专门训练即可使用。同时,程序应具有良好的容错和纠错能力,避免用户操作不当造成损失。(2)程序系统能够提供用户以下功能:允许用户可以根据实际计算工况,输入特定的计算参数,包括地震波选择、计算时间步长、地震波调幅与否等。用户在输入各种参数以后、进行计算之前可以对输入的数据进行修改、添加和删除操作,以保证输入正确的参数。用户通过界面调用后台的ANSYS命令流进行计算,能够得到最后的计算结果文件,供用户进行后处理和结果分析。用户可以添加新的功能或新的二

9、次开发以实现程序升级。(3)程序应具有良好的可移植性,不依赖于特定的硬件设备,只要能安装ANSYS和VC6.0的硬件环境都能使用本系统,保证程序使用的广泛性。(4)程序代码应具有开放性和可重用性。这样,在进一步的设计中,能保证设计者可以方便地对代码进行修改扩充;同时,提供一定的设计接口,新的设计者可以根据接口,无须对程序进行大幅度的修改,就可以进行新的开发,以适应新的特殊要求。程序的开发平台是Microsoft VC+6.0、ANSYS6.1,基于WindowsXP编程。程序实现是利用微软提供的Windows编程接口MFC和ANSYS公司的ANSYS/Multiphysics产品,采用面向对象

10、的程序设计方法。3程序的主要模块和设计如图3-2所示,程序的主要模块有:用户界面模块、ANSYS计算模块、VC调用接口模块和VC后处理模块,分别论述如下:3.1 ANSYS模块ANSYS为了满足用户的特殊需求,建立了开放的体系结构,提供了二次开发接口APDL、UIDL和UPFs(User Programming Features,用户编程特性)等。其中,ANSYS接口允许用户将自己的VC代码连到ANSYS中去,或将ANSYS作为子程序调用,从而使ANSYS具备特殊的功能。本文的ANSYS模块是使用APDL语言进行二次开发的。在上面的二次开发中用到了参数化设计方法。参数是APDL的变量(它们更象

11、FORTRAN变量,而不像FORTRAN参数),不必明确声明参数类型,所有数值变量都以双精度数存储。被使用但未声明的参数都被赋予接近0的“极小值”。在二次开发中使用参数化设计方法,增强了程序的易读性和可移植性。用户无须了解程序的具体结构只需改变参数值就可自动调用ANSYS模块。3.2 VC调用模块VC调用模块在该系统中起着接受用户界面的输入、创建进程调用ANSYS模块进行计算的重要作用。有两项工作是在实现在VC程序中调用ANSYS必须做的,一是要使接口程序能够修改ANSYSB的命令流文件路径及文件名称,这可通过注册表编程实现;二是要能在接口程序中运行ANSYSB应用程序,这涉及到创建进程的编程

12、,下面分别介绍它们的具体实现。1. 注册表编程在Windows(98/NT/2000/XP)系统上运行ANSYS安装程序后,便在Windows系统的注册表里记录了一些信息,如初始工作路径,文件名等。利用VC平台调用ANSYS计算模块的程序必须指定ANSYS软件的运行目录以及用APDL语言开发的ANSYS模块程序路径,这样,ANSYS软件的批处理程序才能从给定的路径下读取命令流文件。在接口程序中修改这些注册表信息,可以使用Windows提供的注册表编辑API(Application Programming Interface)函数30,31,具体实现如下:HKEY hSubKey; / 定义子键

13、LONG lRet;char RegPath200=SoftWareANSYS, Inc.ANSYSANSYS 6.10;lRet=RegOpenKeyEx(HKEY_CURRENT_USER,RegPath,0,KEY_ALL_ACCESS,&hSubKey); / 打开子键if(lRet!=ERROR_SUCCESS)return;lRet=RegSetValueEx(hSubKey,Extension,0,REG_SZ,(LPBYTE)txt,3); /设置ANSYS批处理程序读取的文件扩展名if(lRet!=ERROR_SUCCESS)return;lRet=RegSetValueEx

14、(hSubKey,Jobname,0,REG_SZ,(LPBYTE)ZHY);/指定ANSYS模块文件名if(lRet!=ERROR_SUCCESS)return;lRet=RegSetValueEx(hSubKey,WorkingDirectory,0,REG_SZ,(LPBYTE)E:LWSWorkspace ,16);if(lRet!=ERROR_SUCCESS)return; / 键值出错返回RegCloseKey(hSubKey); / 关闭子键通过以上的设置后运行ANSYS批处理程序,界面变成如图3-3所示。从图中可看出ANSYS模块工作路径E:LWSWorkspace、初始文件名

15、ZHY、ANSYS程序文件名ZHY.txt文件、计算结果输出文件名ZHY.out都已经自动出现在ANSYS批处理程序的输入框,往下ANSYS就可以自动从ZHY.txt读取命令流进行计算并将结果输出到ZHY.out文件中。若想改ANSYS模块路径或文件名只需对上面程序稍加修改即可。2. 多进程编程本文在VC平台上对ANSYS进行封装,希望前台处理系统和用户的交互,而后台进行ANSYS的计算。这就要求系统具有并发性,为此,引入多进程编程机制。进程是一个正在运行程序的实例,它具有动态性、并发性、独立性、异步性和结构性等特点。系统中的进程动态产生与消亡,多个进程并发运行,分别执行各自对应的程序段,为各

16、自的目标而工作。一个程序可以包含多个进程。图3-3 ANSYS批处理运行界面在VC6.0中可以利用CreateProcess函数来创建一个进程去执行其他程序,而且可以设置该进程的优先级。CreateProcess函数的原型是:BOOL CreateProcess(LPCTSTR lpAppliciatonNameLPTSTR lpCommandLineLPSECURITY_ATTRIBUTES lpProcessAttributesLPSECURITY_ATTRIBUTES lpThreadAttributesBOOL bInheritHandlesDWORD dwCreationFlagsL

17、PVOID lpEnvironmentLPCTSTR lpCurrentDirectoryLPSTARTUPINFO lpStartupInfoLPPROCESS_INFORMATION lpProcessInformation);当系统调用CreateProcess时,会创建一个进程内核对象,其初始使用计数是1。该进程内核对象不是进程本身,而是操作系统管理进程时使用的一个较小的数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间中。接着,系统为新进程的主线程创建一个线程内核对象(其使用计数为1)。与进程内核对象一样,线程内核

18、对象也是操作系统用来管理线程的小型数据结构。通过执行C/C+运行期启动代码,该主线程便开始运行,它最终调用WinMain、wWinMain、main或wmain函数。如果系统成功创建了新进程和主线程,CreateProcess便返回True。PszApplicationName和pszCommandLine参数分别用于设定新进程将要使用的可执行文件的名字和传递给新进程的命令行字符串。PszApplicationName的参数可以是NULL,表示系统将使用全路径来查看可执行文件,并且不再搜索这些目录;如果参数不是NULL可以将地址传递给pszApplicationName参数中包含可运行的文件的

19、名字字符串。当系统找到了可执行文件后,就创建一个新进程,并将可执行文件的代码和数据映射到新进程的地址空间中。PsaProcess和psaThread参数分别设定进程对象和线程对象需要的安全性。可以为这些参数传递NULL,这种情况下,系统为这些对象赋予默认安全性描述符;也可以指定两个SECURITY_ATTRIBUTES结构,并对它们进行初始化,以便创建自己的安全性权限,并将它们赋予进程对象和线程对象。将SECRURITY_ATTRIBUTES 结构用于psaProcess和psaThread参数的另一个原因是,父进程将来生成的任何子进程都可以继承这两个对象句柄中的任何一个。本程序除了创键调用A

20、NSYS计算模块的进程外,无需再创建其它进程,因而,psaProcess和psaThread参数都为NULL。同理,binheritHandles参数为FALSE。fdwCreate参数用于标识标志,以便用于规定如何来创建新进程,fdwCreate参数也可以用来设定优先级类,不过对于大多数应用程序来说不应该这样做,因为系统会为新进程赋予一个默认优先级。PszCurDir参数允许父进程设置子进程的当前驱动器和目录。如果本参数为NULL,则新进程的工作目录将与生成新进程的应用程序的目录相同;若不为空,则必须指向包含需要的工作驱动器和工作目录的以0结尾的字符串。课题中该参数选择为NULL就可以了。P

21、siStartInfo参数用于指向一个STARTUPINFO结构。当Windows创建新进程时,它将使用该结构的有关成员。大多数应用程序将要求生成的应用程序仅仅使用默认值。至少应该将该结构中的所有成员初始化为零,然后将cb(cb为STARTUPINFO结构成员)设置为该结构的大小。STARTUPINFO结构的其他具体成员参见VC+6.0帮助系统MSDN。PpiProcInfo参数用于指向你必须指定的PROCESS_INFORMATION结构。CreateProcess在返回之前要对该结构的成员进行初始化。该结构的形式如下面所示:Typedef struct _PROCESS_INFORMATI

22、ONHANDLE hProcess;HANDLE hThread;DWORD dwProcessId;DWORD dwThreadId;PROCESS_INFORMATION;CreateProcess在返回之前打开进程对象和线程对象,并将每个对象的与进程相关的句柄放入PROCESS_INFORMATION结构的hProcess和hThread成员中。综上所述,课题创建进程的关键程序如下:STARTUPINFO StartupInfo;PROCESS_INFORMATION ProcessInfo;memset(&StartupInfo,0,sizeof(STARTUPINFO); /分配内存

23、StartupInfo.cb=sizeof(STARTUPINFO); / 初始化StartupInfo.dwFlags=STARTF_USESHOWWINDOW;StartupInfo.wShowWindow=SW_SHOWMAXIMIZED;if(!:CreateProcess(NULL,d:ProgramFilesAnsysIncANSYS61binintelAnsysB”,NULL,NULL,FALS E,0,NULL,NULL,&StartupInfo,&ProcessInfo)AfxMessageBox(error!);GetLastError(); / 创建进程3. 进程的终止要

24、终止进程的运行可以使用如下四种方法:主线程的进入点函数返回;进程中的一个线程调用ExitProcess函数;另一个进程中的线程调用TerminateProcess函数;所有进程中的线程自动终止运行(这种情况一般不会发生)。本文采用第一种方法终止所创建的进程,即当ANSYS计算结束时通过函数返回。在WindowsXP系统中,如果ANSYS批处理程序运行完后,窗口标题会显示“ANSYS已完成”。本文程序开发便可通过这一特点来终止系统所创建的进程。当ANSYS计算模块运行完毕后,系统会弹出一个消息框提示ANSYS已计算完毕,可以进行后处理了。3.3.3 用户界面接口模块用户界面模块主要完成系统和用户的交互。用户界面模块包括计算参数输入和程序调用两部分。计算参数输入部分的主要功能是负责输入诸如地震波数据、是否调幅、时间步长等。计算输入是由对话框构成。计算参数输入对话框界面如下:图3-4 计算参数输入界面程序对各参数的输入范围都进行了设定,如果用户输入的参数超过了这一设定,系统就会弹出对话框以提醒用户输入错误,需要重新输入。ANSYS程序调用通过菜单方式进行。该菜单首先不处于激活状态,而是当三维数值模拟所需参数输入完成后才得到消息激活菜单。这样设计的优点:能够提醒用户输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论