利用Python脚本实现向HFSS批量导入变量

本文介绍了如何使用HFSS的Python脚本功能批量导入工程设计中的变量。首先,详细阐述了HFSS如何批量导出变量,然后通过录制脚本和编写Python代码,展示了创建和运行脚本来批量导入变量的步骤。最后,提供了脚本文件和CSV模板的下载链接,以供读者实践操作。

ANSYS HFSS 可以批量导出工程 (Project) 其中一个设计 (Design) 中的所有变量,但是却缺乏批量导入变量的功能,这一点逊色于 CST,但是,我们可以利用 HFSS 的脚本功能来二次开发,实现向 HFSS 批量导入变量。

本文介绍实现的方法。大家可下载文中的脚本文件来使用。

1. HFSS 批量导出变量

HFSS 本身便支持变量导出。举个例子,打开一个名为「model」的HFSS 工程,工程下有一个名为「input」的设计,在这个设计中我制作了一个矩形波导转悬置微带线的模型。这个模型的所有变量都显示在左侧的 「Properties」栏里。

把鼠标放在上面然后点击右键,然后左键选择弹出的「Copy to Clipboard」命令,即可将所有变量复制到粘贴板中。

001

或者,我们可以选择上方菜单栏中的「HFSS > Design Properties…」,在弹出的变量列表中,同样把鼠标放在上面然后点击右键,然后左键选择弹出的「Copy to Clipboard」命令,将所有变量复制到粘贴板中。

002

003

然后我们在一个空白的表格文件中,ctrl+v 粘贴,即可将「input」设计中的所有变量导出到表格文件中了。

004

2. HFSS 批量导入变量

我们使用 ANSYS HFSS 建模和仿真,通常是图形化界面上用鼠标点击来操作。其实 ANSYS 支持 Visual Basic 脚本,在18.0版本后更支持 Python 脚本,用户在图形化界面上的每一个操作都可以通过运行对应的脚本指令来实现。通过编写并运行脚本指令,就可以完成一些重复的人工操作。

因此,我们可以利用 HFSS 的脚本功能来实现变量的批量导入,思路是:

  1. 使用脚本录制功能,获得「在 HFSS 中新建一个变量」的操作所对应的脚本指令。
  2. 编写脚本,实现「在 HFSS 中新建多个变量」的操作。
  3. 在 HFSS 中运行脚本,即可实现变量的批量导入。

本文用的是 Python 脚本。

2.1 录制脚本

我们仍以矩形波导转悬置微带线的 HFSS 工程为例,录制脚本,来看看「在 HFSS 中新建一个变量」所对应的脚本指令是怎么样的。

启动 ANSYS,但先不打开工程。

选择上方菜单栏中的「Tools > Record Script To File…」,在弹出的「另存为」窗口中,选择脚本文件的保存目录、名称,选择「*.py」的脚本格式,保存。现在我们在 HFSS 中的每一步操作都会被记录到所保存的这个 Python 脚本文件中。

005

006

点击「Open」,打开「model」工程。

在「model」工程的「input」设计里,选择上方菜单栏中的「HFSS > Design Properties…」,在弹出的变量列表中,点击「Add…」来新增一个变量。在弹出的窗口中设置:

  • 变量名称为「myVar」
  • 变量类型为「length」
  • 单位为「mm」
  • 数值为「0.1」

确认,保存工程。

007

现在选择「Tools > Stop Script Recording」,结束脚本录制。现在可以去查看所录制的脚本了。

008

2.2 编写脚本

在刚才保存的目录中打开「addVariables.py」脚本,查看代码。

这就是刚才的操作,即「在 ANSYS 中打开一个 HFSS 工程,并在其中一个设计里添加一个变量」所对应的代码了:

# ----------------------------------------------
# Script Recorded by ANSYS Electronics Desktop Version 2018.2.0
# 18:47:49  4月 09, 2022
# ----------------------------------------------
import ScriptEnv
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()
oDesktop.OpenProject("D:/files/Desktop/model.aedt")
oProject = oDesktop.SetActiveProject("model")
oDesign = oProject.SetActiveDesign("input")
oDesign.ChangeProperty(
	[
		"NAME:AllTabs",
		[
			"NAME:LocalVariableTab",
			[
				"NAME:PropServers", 
				"LocalVariables"
			],
			[
				"NAME:NewProps",
				[
					"NAME:myVar",
					"PropType:="		, "VariableProp",
					"UserDef:="		, True,
					"Value:="		, "0.1mm"
				]
			]
		]
	])
oProject.Save()

我们来解读代码。

这是一些初始化操作,无需理会或改动:

import ScriptEnv
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()

这三句代码对应我们打开「model.aedt」工程文件、激活「model」工程、激活「input」设计的操作:

oDesktop.OpenProject("D:/files/Desktop/model.aedt")
oProject = oDesktop.SetActiveProject("model")
oDesign = oProject.SetActiveDesign("input")

这些代码就对应我们添加变量的操作,其中 ”NAME:myVar“ 和 ”0.1mm“ 对应变量的名称、数值和单位:

oDesign.ChangeProperty(
	[
		"NAME:AllTabs",
		[
			"NAME:LocalVariableTab",
			[
				"NAME:PropServers", 
				"LocalVariables"
			],
			[
				"NAME:NewProps",
				[
					"NAME:myVar",
					"PropType:=","VariableProp",
					"UserDef:=",True,
					"Value:=","0.1mm"
				]
			]
		]
	])

那么,我们在脚本代码中设置 for 循环,在循环中赋予变量名称和数值等,就可以实现向 HFSS 工程添加多个变量了。

据此,我编写了**「向 HFSS 工程批量导入变量」**的脚本:

# ----------------------------------------------
# Script author:Nan_beta.  
# 2022-04-09
# ----------------------------------------------

import ScriptEnv
import csv

# set paths and names
variables_path  = "D:/myVariables.csv"
project_path    = "D:/model.aedt"
project_name    = "model"
design_name     = "input"

# read variables list
variables_data = open(variables_path)
variables_csvreader = csv.reader(variables_data)
variables_list = list(variables_csvreader)

# initialize
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()
oDesktop.OpenProject(project_path)
oProject = oDesktop.SetActiveProject(project_name)
oDesign = oProject.SetActiveDesign(design_name)

# add variables
for i in range(1,len(variables_list)):
	name = variables_list[i][0]
	value= variables_list[i][1]
	unit = variables_list[i][2]
	oDesign.ChangeProperty(
		[
			"NAME:AllTabs",
			[
				"NAME:LocalVariableTab",
				[
					"NAME:PropServers", 
					"LocalVariables"
				],
				[
					"NAME:NewProps",
					[
						"NAME:"+name,
						"PropType:=","VariableProp",
						"UserDef:=",True,
						"Value:=",value+unit
					]
				]
			]
		])

# save project
oProject.Save()

我将想要导入到 HFSS 工程的变量保存在 csv 文件里,脚本会读取 csv 文件中的变量名称、数值和单位,然后以添加新变量的方式,在一个 for 循环中逐一将变量添加到指定的 HFSS 工程的指定设计中。

使用此脚本时,需要在开头「# set paths and names」注释下的代码中设置保存变量信息的 csv 文件的路径、HFSS 工程文件的路径、工程名称和设计名称。其他代码无需改动。

2.3 使用脚本

现在来演示脚本的使用方法。

step1:获取 Python 脚本文件和 csv 文件。

此脚本需要配合一个 csv 文件使用。文末会提供 Python 脚本文件和 csv 文件的下载方式。

step2:编辑 csv 文件和 Python 脚本文件

将准备导入到 HFSS 工程的变量输入到 csv 文件中,变量的名称、数值和单位逐行输入。

注意:每一列的列头「Name」、「Value」和「Unit」不要删除。

009

用 vs code等编辑器或者记事本即可打开 Python 脚本文件。留意,脚本是由 ANSYS 来运行的,因此本计算机上并不需要配置 Python 运行环境,我们只需要打开脚本文件来稍作修改而已。

在脚本中设置 csv 文件的路径、准备导入变量的HFSS 工程文件的路径、工程名称和设计名称,脚本的其他代码无需改动。

# set paths and names
variables_path  = "D:/myVariables.csv"
project_path    = "D:/model.aedt"
project_name    = "model"
design_name     = "input"

010

step3:在 ANSYS 中运行脚本

打开 ANSYS,无需打开 HFSS 工程文件,点击「Tools > Run Script…」。

011

在弹出的文件选择窗口中找到并选中脚本文件,点击确认,即可让 ANSYS 运行该脚本。

012

脚本运行完毕后,查看 「model」工程下的「input」设计的变量,可以看到,我们的8个变量已经顺利添加到设计中了。

013

如此,我们就实现了向 HFSS 工程批量导入变量啦。

关注微信公众号「南贝塔」,后台回复「0010」获取向 HFSS 批量导入变量的 Python 脚本文件和 csv 文件。

谢谢观看。

如何利用CST和Matlab的协同工作,实现天线和超表面结构的自动化建模以及相关数据集的自动化计算与收集。首先,通过CST的VBA宏录制功能和Matlab的COM接口,实现了对CST的远程控制,从而能够自动生成多种不同尺寸的谐振环结构。接着,针对数据收集的问题,提出了一种自动化方案,即在CST宏中加入数据输出命令,并通过Matlab进行文件检测和读取。此外,还探讨了超表面单元仿真的参数化模型生成方法,特别是六边形孔洞阵列的生成。最后,在数据集整理方面,推荐使用Matlab的dataset数组来高效地管理和筛选大量仿真数据。文中还分享了一些实用的小技巧,如释放CST对象连接、使用try-catch语句捕获错误、采用并行计算提高效率等。 适合人群:从事电磁场仿真、天线设计、超表面研究的技术人员,尤其是那些希望提高工作效率、减少重复劳动的研究者和工程师。 使用场景及目标:适用于需要频繁进行电磁仿真计算的科研项目或工业应用,旨在通过自动化手段大幅缩短仿真时间,提升数据处理效率,为后续的设计优化提供坚实的数据支持。 其他说明:尽管自动化流程极大提高了工作效率,但在设置参数空间时仍需谨慎,避免因参数过多导致计算量过大而浪费时间和资源。同时,合理的调试方法可以帮助快速定位并解决问题,确保整个流程顺利运行。
### 如何在HFSS中设置变量方程 为了在Ansys HFSS中设置变量方程,可以遵循一系列特定的操作流程来定义和应用这些变量。虽然提供的参考资料未直接涉及HFSS的具体操作指南,但可以根据软件的一般使用经验和常见实践提供指导。 #### 打开项目并进入设计环境 启动HFSS后,在主界面选择要编辑的设计或创建新设计。这一步骤确保工作空间准备好接受新的参数化输入。 #### 定义全局变量 通过`Project Manager`窗口中的`Variables...`选项打开变量管理器对话框。在此处可以直接键入变量名称及其对应的表达式或数值[^1]: ```plaintext Name: myVariable Value/Equation: 5*mm + sin(PI/4)*cm ``` #### 使用脚本自动化过程 对于更复杂的方程式设定,利用Python API接口编写自定义脚本批量处理多个变量的赋值成为可能。下面是一个简单的例子展示如何通过pywin32库控制COM对象实现这一点: ```python import win32com.client as win32 hfss = win32.Dispatch('AnsoftHfss.HfssScriptInterface') oDesktop = hfss.GetAppDesktop() oProject = oDesktop.NewProject() # Add variables via script command oProject.AddGlobalVar("freq", "1GHz") oProject.AddGlobalVar("length", "0.5*meter") print("Variables added successfully.") ``` #### 应用于几何模型和其他属性 一旦定义好变量之后,就可以在整个仿真过程中重复利用它们——无论是构建三维结构还是调整材料特性等各个方面都可方便地引用之前所设好的变量名来进行动态链接。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值