VB调用ANSYS程序的关键代码:
Private Sub Command1_Click()
Dim x
x = Shell("C:\Program Files\Ansys Inc\v100\ANSYS\bin\intel\ansys100.exe -b -p ane3fl -i X.mac -o output.txt", vbMinimizedFocus) '调用ANSYS的Multiphsics模块进行仿真计算
Timer1.Enabled = True '激活Timer1控件
End Sub
代码中的C:\Program Files\Ansys Inc\v100\ANSYS\bin\intel\ansys100.exe 是ANSYS的安装路径以及版本(ANSYS10.0),若是安装在其它盘内或ANSYS版本不同,照改即可。
代码中的 ane3fl 是ANSYS不同模块的产品特征代码,可在ANSYS的安装路径 C:\Program Files\Ansys Inc 中按文件类型搜索文件,一个跟ANSYS帮助文件相同类型的文件里有这个产品特征代码的列表。
X.mac是ANSYS的宏文件,output.txt用于保存正常运行ANSYS时的output window输出的内容。两个文件放在工程所在的文件夹内即可。也可以指定绝对路径,如F:\ANSYS\X.mac,但是指定绝对路径不利于所开发软件的移植。推荐路径:ANSYS\X.mac,在工程所在文件夹内新建ANSYS文件夹,将X.mac放进去即可。即:x = Shell("C:\Program Files\Ansys Inc\v100\ANSYS\bin\intel\ansys100.exe -b -p ane3fl -i ANSYS\X.mac -o output.txt", vbMinimizedFocus)
另一关键代码段为:
Private Sub Timer1_Timer()
If Dir (App.Path & "\file.err") <> "" Then '判断file.err文件是否存在
MsgBox ("ANSYS运行完毕!") '若file.err文件已生成,表明ANSYS运算已结束,弹出提示框
End If
Timer1.Enable=False '关闭Timer控件
End Sub
Timer控件一开始的Enable属性设置为False,Interval属性设为3000,即3秒钟循环一次。
调用ANSYS完毕后(即ANSYS运算结束后),Timer控件被激活,弹出"ANSYS运算完毕!"的对话框。
对话框弹出后,Timer控件被关闭,对话框不会重复弹出。
附注:
一:VB对ANSYS的调用属后台调用,可在 windows的标题栏看到最小化后的ANSYS图标,不能看到ANSYS窗口(也许最大化调用可以看到,未验证),不能认为调用失败,调用是否成功要看 在工程(也就是生成的exe可执行文件)所在目录下是否有结果文件生成(file.err、file.log、DB文件等等)。
二:未生成exe可执行文件,直接在VB里调试程序的可用性时,结果文件被放在C:\Documents and Settings\Administrator里面。被调用的X.mac当然也要放在那里才能调用成功。
VB调用MATLAB:
网络上和文献里介绍了很多的方法,由于鄙人是VB的门外汉,难以看懂,所以自己摸索了一种及其简单、实用,又粗糙不堪的方法——通过批处理调用。
其实就是VB调用批处理命令,批处理命令再调用MATLAB,从而实现对MATLAB的间接调用。
批处理调用MATLAB的命令如下:
@echo off
matlab /r X;exit
X是MATLAB宏文件X.m的文件名,exit用于MATLAB运行完毕后自动退出
可以用VB的Print #1命令将批处理命令集成在VB中:
Private Sub Command2_Click()
Open App.path & "\MATLAB\调用MATLAB.bat" For Output As #1
Print #1, "@echo off"
Print #1, "matlab /r X;exit"
Print #1,"cd MATLAB" '进入MATLAB文件夹
Print #1,"del 调用MATLAB.bat" '删除该文件夹下的 调用MATLAB.bat 文件
Close #1
Dim x
x=shell(App.path & "\MATLAB\调用MATLAB.bat")
End Sub
MATLAB文件夹也放在工程所在文件夹内(作为子文件 夹),将名为 X.m 的MATLAB宏文件放在里面供VB调用。VB会自动生成一个批处理命令文件调用MATLAB,调用完毕后该批处理文件会被自动删除(没啥大用,就是好看 些,放在MATLAB子文件夹内也是为了不让人看到)。
This is correct one:
ReplyDelete!"C:\Program Files\Ansys Inc\v110\ANSYS\bin\intel\ansys110.exe" -b -i "D:\Wei_Diser\programs\20100814\S3_SOSH.mac" -o "D:\Wei_Diser\programs\20100814\output1.txt"