3. HFSS项目对象模型与API入口

在HFSS自动化脚本开发中,真正决定脚本能否稳定运行、能否复用、能否批量扩展的,不是某一条命令的写法,而是对HFSS项目对象模型的理解。HFSS的脚本接口本质上是一棵以项目为根、以设计为分支、以求解与几何为叶子的对象树。只有先建立这棵树的层级认知,才能知道“某个操作应该挂在哪个对象上”,也才能在批量仿真中准确地定位、修改和读取参数。

HFSS的自动化入口通常有两种:一种是通过IronPython或CPython调用PyAEDT,另一种是直接使用HFSS内置的脚本录制与VBScript/JScript接口。无论哪种方式,对象模型的主干是一致的。根对象是Aedt或Hfss应用实例,向下依次是Project、Design、SolutionSetup、Modeler、Boundary、Excitation、Analysis等。理解这些对象的从属关系,是编写自动化脚本的第一步。

HFSS 项目对象模型层级与 API 入口 Aedt / Hfss 应用实例 API 根入口 · 启动/连接 Project 项目对象 project_name · 保存/关闭/复制 Design 设计对象 design_name · 求解类型 · 设计类型 Modeler 几何模型 create_box / create_cylinder unite / subtract / fillet object_name · material · color SolutionSetup 求解设置 create_setup / adaptive frequency · max_passes delta_S · basis_order Boundary 边界条件 assign_perfectE / radiation assign_lumpedRLC / symmetry boundary_name · faces Excitation 激励源 wave_port lumped_port Analysis / Results 分析与结果 analyze_setup · get_solution_data export_report · S参数 / 场图 典型 API 调用链 hfss.modeler.create_box(...) hfss.create_setup("Setup1") 对象访问要点 先定位父对象,再操作子对象 名称唯一,避免重名覆盖

从图中可以看到,Design对象是自动化操作的核心枢纽。几何建模、求解设置、边界条件和激励都挂在同一个设计之下,而分析求解与结果读取则依赖前面这些对象的正确配置。因此,脚本中常见的写法是:先获取或创建Design,再通过design.modeler、design.create_setup()、design.assign_perfectE()等入口分别操作各子对象。这种“先父后子”的访问顺序,是HFSS API使用中最基本的纪律。

几何模型对象的API访问

几何模型由Modeler对象管理。在PyAEDT中,常用入口是hfss.modeler。创建基本体时,create_box需要指定原点坐标、尺寸和名称;create_cylinder需要指定原点、半径、高度和轴向。例如,创建一个中心位于原点、半径10mm、高20mm的圆柱,可以写成:

cylinder = hfss.modeler.create_cylinder(
    cs_axis="Z",
    position=[0, 0, 0],
    radius=10,
    height=20,
    name="DielectricRod",
    material="Teflon"
)

这里cs_axis指定圆柱轴向,position是底面圆心坐标,material直接绑定材料属性。创建后返回的对象可以继续用于布尔运算,如hfss.modeler.unite(["obj1","obj2"])或hfss.modeler.subtract("target","tool")。需要注意的是,布尔运算会改变对象名称和拓扑,批量脚本中应在运算后重新获取对象引用,而不是依赖运算前的变量名。

求解设置对象的API访问

求解设置通过create_setup创建,返回一个SolutionSetup对象。对于驱动模式求解,关键参数包括求解频率、最大迭代次数、收敛误差delta_S和基函数阶数。一个典型的设置如下:

setup = hfss.create_setup("Setup_2p4G")
setup.props["Frequency"] = "2.4GHz"
setup.props["MaximumPasses"] = 12
setup.props["MaxDeltaS"] = 0.02
setup.props["BasisOrder"] = 1
setup.update()

其中MaxDeltaS是自适应网格收敛的S参数变化阈值,MaximumPasses限制迭代上限。批量仿真时,常把频率和收敛阈值作为扫描变量,通过循环修改setup.props并调用update()来生成多个求解设置。这里要特别注意:修改属性后必须调用update(),否则HFSS内部不会刷新配置。

边界条件与激励对象的API访问

边界条件通过assign_*系列方法创建。理想导体边界用assign_perfectE,辐射边界用assign_radiation,集总RLC边界用assign_lumped_rlc。这些方法通常需要传入面对象列表和边界名称。例如:

hfss.assign_perfectE(
    assignment=["GND_face"],
    name="GND"
)
hfss.assign_radiation(
    assignment=["Rad_face"],
    name="Radiation"
)

激励源方面,波端口用assign_wave_port,集总端口用assign_lumped_port。波端口需要指定参考导体和积分线,集总端口需要指定阻抗和终端线。在批量参数化仿真中,端口位置和积分线方向往往随几何变化,因此脚本中应把端口面名称和积分线坐标也作为变量管理,而不是写死在代码里。

分析求解与结果读取

所有设置完成后,通过hfss.analyze_setup("Setup_2p4G")触发求解。求解结束后,用hfss.post.get_solution_data()读取S参数、阻抗或场数据。结果对象可以进一步导出为CSV或Touchstone文件,供后续数据处理使用。批量仿真的价值正在于此:把“建模—设置—求解—导出”整条链路封装成可循环执行的脚本,而对象模型就是这条链路的骨架。

在实际脚本中,建议先打印hfss.design_list和hfss.modeler.object_names确认当前对象状态,再执行修改操作。这样可以避免因对象不存在或名称不匹配导致的静默失败。

总结来看,HFSS项目对象模型的核心关系可以概括为:应用实例管理项目,项目管理设计,设计管理几何、求解、边界和激励,分析模块消费这些配置并产出结果。掌握这条主线,就能在自动化脚本中准确找到每个操作的挂载点,也能在批量任务中稳定地复用和扩展代码。