LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性 BOOL bInheritHandles,//是否继承父进程的句柄 DW0RD dwCreationFlags,//创建标志 LPVOID lpEnvironment,//新的环境变量块 LPCTSTR lpCurrentDirectory,//当前目录 LPSTARTUPINFO lpStartupInfo,//启动信息
LPPROCESS_INFORMATION lpProcessInformation //进程信息
);
当系统调用CreateProcess时,会创建一个进程内核对象,其初始使用计数是1。该进程内核对象不是进程本身,而是操作系统管理进程时使用的一个较小的数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间中。接着,系统为新进程的主线程创建一个线程内核对象(其使用计数为1)。与进程内核对象一样,线程内核对象也是操作系统用来关系线程的小型数据结构。通过执行C/C++运行其启动代码,该主线程便开始运行,它最终调用WinMain、wWinMain、main或wmain函数。如果系统成功创建了新进程和主线程,CreateProcess便返回True。
4.2.2 ANSYS批处理方式运行的程序实现
在本文中通过创建一个进程运行ANSYS批处理程序,来实现ANSYS的建模和求解计算,以下是程序实现的主要代码:
PROCESS_INFORMATION Pi;//记录进程返回信息 STARTUPINFO si;//记录程序初始信息
memset(&si,0,sizeof(si));//初始化变量Startuplnfo si.cb=sizeof(si):
si.dwFlags=STARTF_USESHOWWINDOW;//设置ansys批处理程序以窗口形式运行 si.wShowWindow=SW_SHOWMINIMIZED://设置ansys批处理程序以窗口最小化形式运行; char AnsysCommand[MAX_PATH]:
//记录ANSYS的路径以及批处理时所带的参数 ::WinExec(\
Inc\\\\v100\\\\ANSYS\\\\bin\\\\intel\\\\ANSYS100.exe -b -p anfl -i .\\\\LeaderAxis.txt -o .\\\\LeaderAxis.out\
//记录ANSYS批处理的文件名
::strcpy(AnsysCommand,AnsysFile): //创建“ANSYS”子进程 B00L ret=CreateProcess(NULL, AnsysCommand, ?? &si, &pi): if(!ret) {
TRACE(“CreateProeess 失败!”); }
WaitForSingleObject(pi.hProcess,INFINITE); AfxMessageBox(“计算结束! ”); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); ??
4.3 本章小结
在本章主要研究整个系统开发过程中VISUAL C++调用模块的实现,在这个模块中应用面向对象的编程技术VISUAL C++来实现VISUAL C++与APDL的相互嵌套,以及批处理方式运行ANSYS。在本章重点介绍在系统开发过程所用到的面向对象编程的一些关键技术和利用这些技术来实现需要功能的过程。
第5章 用户界面模块的实现
在本章中主要研究利用VISUAL C++编制可视化参数界面,由于阶梯轴部分参数较多,设计人员在参数设置的时候弄清某个参数的具体位置比较困难,所以若是能实现可视化参数设计,就会使得设计人员在设置参数的时候思路更清晰,也不容易出错。已有的阶梯轴有限元分析的研究对象都是针对某种具体型号阶梯轴,而且从模型和边界条件的处理上存在较大的差别。本软件以VISUAL C++程序强大的可视化功能,弥补了APDL及ANSYS命令流的直观性不强的缺点。同时以“最符合实际工况、最少量简化”为原则,以提高阶梯轴有限元分析的效率、精度和可靠性为目标,在对以往研究归纳、整理、改进的基础上,对阶梯轴有限元模型规范化进行了研究,并借助大型有限元分析软件ANSYS的二次开发语言APDL和VISUAL C++6.0的界面开发技术,研究开发了参数化的阶梯轴有限元分析系统,实现了阶梯轴建模和分析计算的自动化、智能化,大大减小了阶梯轴建模与分析的工作量,提高了新产品研发效率。
5.1 软件编写思想
在程序编制方面,开发工具采用微软公司的VISUAL C++ 6.0。软件框架为MFCAppWized单文档结构。MFCAppWizard帮助程序员快速生成应用程序框架,这在一定程度上实现了软件的自动生成和可视化编程。最基本的MFC应用程序框架由CXApp、CMainFrame、CXDoc和CXView类组成(X代表工程名称)。AppWizard是面向对象程序设计发展和工业化的产物。
MFC(Microsoft Foundation Class,微软基础类库)封装了大部分Windows API(Application Programming Interface)函数,大大简化了程序开发者的工作量,充分的重用代码,提高了程序开发效率。在VISUAL C++中还提供了ClassWizard,它利用Application Framework技术调用MFC库来建立程序需要新类、添加、修改各种消息和消息映射。
软件的7个数据输入框为FormView类型,其属性为无标题栏的Child类型。响应按钮动作转换输入界面的功能在CMainframe中实现,通过CCreateContext类的属性RUNTIME_CLASS操作完成界面之间的跳转。
5.2 阶梯轴有限元模型的规范化
5.2.1几何模型的选取
由于阶梯轴结构形式比较多,而且各种应用需求都不尽相同。本文只考虑十阶以内的阶梯轴建模和分析,对于十阶以上的阶梯轴本文不做分析。根据阶梯轴的阶数,我们对阶梯轴进行建模。将阶梯轴划分为10种形式,通过分类大致可以分成一阶阶梯轴、二阶阶梯轴、三
阶阶梯轴??如此类推,直至十阶阶梯轴。对应10个独立的有限元分析模块,每个模块对应一个用APDL语言编写的*.txt文件,如图5-1所示。根据面向对象的软件设计思想,对模块文件进行了封装,按照模块文件的形成过程,利用VISUAL C++制作了友好的类型导航界面,根据用户阶梯轴的结构参数自动选择分析模块并引导用户输入相应的模块参数,这样不仅精度最高,而且载荷和约束条件的处理也相对简单。
5.2.2 参数化建模
通过输入阶梯轴的各部分的参数进行建模。首先输入各阶梯轴的直径,然后输入各阶梯轴的长度,最后输入阶梯轴键槽的基本参数(长、宽、高)。参数化建模方法工作量小且方便快捷,计算机经过五代演进发展到现在,硬件计算能力己发展到很高的水平,基于以上考虑,三维整体模型参数化建模是科学、合理、可行的。
1、输入阶梯轴各段直径
void CPage1::DoDataExchange(CDataExchange* pDX) {
CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPage1)
DDX_Text(pDX, IDC_EDIT_D1, m_d1); DDX_Text(pDX, IDC_EDIT_D2, m_d2); DDX_Text(pDX, IDC_EDIT_D3, m_d3); DDX_Text(pDX, IDC_EDIT_D4, m_d4); DDX_Text(pDX, IDC_EDIT_D5, m_d5); DDX_Text(pDX, IDC_EDIT_D6, m_d6); //}}AFX_DATA_MAP
}
2、将阶梯轴各段直径写入LeaderAxis.txt文件 LRESULT CPage1::OnWizardNext() {
// TODO: Add your specialized code here and/or call the base class UpdateData();
FILE* pFile=fopen(\fprintf(pFile,\fwrite(\fprintf(pFile,\
fwrite(\fprintf(pFile,\
fwrite(\fprintf(pFile,\
fwrite(\fprintf(pFile,\
fwrite(\fprintf(pFile,\
\
fwrite(\
n(\
fprintf(pFile,\
\
fclose(pFile); return
CPropertyPage::OnWizardNext();
}
3、输入阶梯轴各段长度
void CPage2::DoDataExchange(CDataExchange* pDX)