本文转自原创:努力小菜籽
文末有彩蛋代码,原文链接,以及加入HFSS官方共建微信群(最后57个名额满500人)的方法。
部分api设计参考使用了Matthew Radway在github中分享的Interact with ANSYS HFSS via the HFSS Windows COM API。
地址:http://mradway.github.io/hycohanz/
我们知道HFSS是一款电磁仿真商用软件,用其进行天线的设计十分方便。而该软件也预留了可以运行脚本的接口,使用者可以使用脚本对软件进行控制,实现模型的建立、求解等等。由于后期可能会用到联合仿真,而大多数联合仿真的脚本都是使用的Matlab进行编程,网上也有不少现成的api,因为对python比较熟悉,且python除了数值计算其他的功能也相当强大,并且免费开源,于是决定用python写一个建模的脚本(其实是我matlab学得太烂了),折腾了两天,终于把微带天线的模型建立与仿真的过程搞定了,当然是基于有Matthew Radway这位大牛的基础上。这个例子也是接触HFSS时手绘天线做的第一个例子,现在用代码做一遍,也是很有意思的事情。下面分享给大家。
1、连接软件
GetAppDesktop
Use: GetAppDesktopis a function of oAnsoftApp. This function does not take an input and it returns an object. The object is assigned to the variable oDesktop.
Syntax: GetAppDesktop()
Return Value: Object.
Parameters: None
Example:
Set oDesktop = oAnsoftApp.GetAppDesktop()
给出了函数名,参数值,返回值,以及一个实例(这个帮助文档写得很不错,但是后面阅读过程中也发现了一些小错误,当然很可能是因为我用的是daoban)。这个返回值oAnsoftApp就是后面进行一系列操作要使用的对象,所有的操作的形式都是下面这样:oAnsoftApp.
python中编写了一个接口函数把这个函数封装在里面。代码如下:
from __future__ import division, print_function, unicode_literals, absolute_import
import win32com.client
def setup_interface():
"""
Set up the COM interface to the running HFSS process.
Returns
-------
oAnsoftApp : pywin32 COMObject
Handle to the HFSS application interface
oDesktop : pywin32 COMObject
Handle to the HFSS desktop interface
Examples
--------
>>> import Hyphasis as hfss
>>> [oAnsoftApp, oDesktop] = hfss.setup_interface()
"""
# I'm still looking for a better way to do this. This attaches to an
# existing HFSS process instead of creating a new one. I would highly
# prefer that a new process is created. Apparently
# win32com.client.DispatchEx() doesn't work here either.
oAnsoftApp = win32com.client.Dispatch('AnsoftHfss.HfssScriptInterface')
oDesktop = oAnsoftApp.GetAppDesktop()
return [oAnsoftApp, oDesktop]
作者用了win32com.client.Dispatch()这个函数,这个函数是专门用来连接接口的,返回值中的那个oDesktop就是生成的对象。
实际调用代码:[oAnsoftApp, oDesktop] = hfss.setup_interface()
2、新建一个project
oProject = hfss.new_project(oDesktop)
这里就是用了上面生成的oDesktop对象新建了一个object,具体查阅help文档和编写api的工作和上一步一致,并且平时使用时直接使用接口调用即可。注意,下面进行的操作都在这个project中,所以下面操作的对象就是oProject了。这个时候HFSS里应该长这样了。