学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天线的原理简介、仿真软件建模、设计、调试过程及思路。如有想看到的内容或技术问题,可以在文尾写下留言。

摘要:
学个Antenna:HFSS脚本建模入门一文,对HFSS脚本建模进行了入门级的介绍,不过要装上日趋臃肿、动辄十几G的MATLAB软件。幸运的是,HFSS支持VBScript进行二次开发,因此在Excel中对HFSS进行调用不是梦!
本文使用的软件为AnsysEM 18.2和Excel 2013


在HFSS软件中顺着Help文件找到HFSS Scripting(文末有HFSS官方HFSS Scripting Guide下载链接),打开该PDF,在Introduction to VBScript章节,我们可以获得以下信息。
ANSYS Electronics Desktop uses theMicrosoft® Visual Basic® Scripting Edition (VBScript) scripting language to recordmacros. VBScript is based on theMicrosoft Visual Basic programming language
ANSYS Electronics Desktop 使用 Microsoft® Visual Basic® Scripting Edition (VBScript) 脚本语言来记录宏。 VBScript 基于 Microsoft Visual Basic 编程语言
Using scripts is a fast, effective way to accomplish tasks you want to repeat.When you execute a script, the commands in the script are performed.
使用脚本是完成您想要重复的任务的一种快速、有效的方法。当您执行脚本时,脚本中的命令就会被执行。
You can write a script using any text editor or you can record a script fromwithin the ANSYS Electronics Desktop interface. After recording the script fromwithin ANSYS Electronics Desktop, you can thenmodify it if necessary using a text editor.
您可以使用任何文本编辑器编写脚本,也可以从 ANSYS Electronics Desktop 界面中记录脚本。 在 ANSYS Electronics Desktop 中记录脚本后,如有必要,您可以使用文本编辑器对其进行修改。
由于Excel内置了VBA代码编辑器,因此理论上可以用其进行调用HFSS进行建模。
新建一个excel文件,另存为.xlsm格式(扩展名xlsm在打开excel文件时,会自动执行宏代码)。如下图所示,即可打开VBA编辑器。

一个简单的测试代码如下:
Sub Hello()Dim bj As Stringbj = InputBox("请输入您的文本", "请输入")MsgBox "确定按钮被点击", vbOKOnlyEnd Sub

当上面的步骤都顺畅无阻后,我们可以进入下一环节,即在Excel vba编辑器里面编写代码调用HFSS软件。首先我们要打开HFSS软件,并保证Project Manager下为空,防止后续出现报错现象。

下图是对ANSYS Electronics脚本的各模块概述

'oAnsoftApp为VBScript提供了访问Ansys.ElectronicsDesktop的句柄Set oAnsoftApp = CreateObject("Ansoft.ElectronicsDesktop")
'oDesktop用于执行桌面级操作,包括项目管理。Set oDesktop = oAnsoftApp.GetAppDesktop()
'Project对象对应于产品中打开的一个项目。它用于操纵项目及其数据。'其数据包括变量、材料定义等。Set oProject = oDesktop.GetActiveProject()
'oDesign对象对应于项目中已存在的一个设计实例。该对象用于操纵设计及其数据。'它的数据包括变量、模块和编辑器。Set oDesign = oProject.GetActiveDesign()
'oEditor 对象对应于已存在的一个编辑器,例如3D建模器、布局或原理图编辑器。'该对象用于在编辑器中添加和修改数据。Set oEditor = oDesign.SetActiveEditor("3D Modeler")
'oModule 对象对应设计中的一个模块。Modules 用于处理一组相关功能。Set oModule = oDesign.GetModule("BoundarySetup")
当然,看完上面的内容可能会云里雾里,现在直观地解释下:
首先你要创建一个Ansoft.ElectronicsDesktop对象,并获取oDesktop用于执行桌面级操作。这就是你手动打开HFSS软件并获得该软件控制权的那一步
接着oProject和oDesign就是模拟你新建Project和Design,获得其句柄
然后oEditor和oModule主要是获取我们建模、设置边界条件、求解器、建立报告等操作的句柄
纸上得来终觉浅,我们可以打开HFSS的脚本录制功能,在录制的代码中来学习:
' ----------------------------------------------' Script Recorded by ANSYS Electronics Desktop Version 2017.2.0' ----------------------------------------------Dim oAnsoftAppDim oDesktopDim oProjectDim oDesignDim oEditorDim oModuleSet oAnsoftApp = CreateObject("Ansoft.ElectronicsDesktop")Set oDesktop = oAnsoftApp.GetAppDesktop()oDesktop.RestoreWindowSet oProject = oDesktop.NewProjectoProject.InsertDesign "HFSS", "HFSSDesign1", "DrivenModal", ""
从上面的代码中,我们可以很直观地感受到:先进行oAnsoftApp,oDesktop,oProject,oDesign,oEditor,oModule五要素的变量定义;接着对oAnsoftApp,oDesktop配置句柄;然后利用oProject.InsertDesign插入一个"HFSSDesign1"的设计文件。
剩下的oEditor,oModule我们可以根据上面的编程逻辑进行句柄的设置。
Set oDesign = oProject.SetActiveDesign("HFSSDesign1")Set oEditor = oDesign.SetActiveEditor("3D Modeler")
到此为止,我们就将调用HFSS需要的句柄全部掌握在手里了,后续在Excel中调用HFSS软件指日可待。
在官方HFSS Scripting Guide的P51:Sample HFSS Script里有一段比较详细的英文教程,建议大家先观摩下。
以上内容都读懂后,剩下的就是自己录制脚本,分析代码,学习修改代码,封装成function进行调用。
这里给出本人部署好的一段代码,可直接粘贴到Excel vba编辑器进行复现:
Sub Training1()Dim oAnsoftAppDim oDesktopDim oProjectDim oDesignDim oEditorDim oModuleDim sub1_H, sub1_W, sub1_Lsub1_H = 0.254: sub1_W = 20Set oAnsoftApp = CreateObject("Ansoft.ElectronicsDesktop")Set oDesktop = oAnsoftApp.GetAppDesktop()Set oProject = oDesktop.NewProjectoProject.InsertDesign "HFSS", "Test", "DrivenModal", ""Set oDesign = oProject.SetActiveDesign("Test")Set oEditor = oDesign.SetActiveEditor("3D Modeler")'Variable DefineInsertVariable oDesign, "sub1_H", CStr(sub1_H), "mm"InsertVariable oDesign, "sub1_W", CStr(sub1_W), "mm"InsertVariable oDesign, "sub1_L", "2 * sub1_W", ""'Create the SubstrateCreateBox oEditor, "Sub1", Array("-sub1_W/2", "0mm", "0mm"), _Array("sub1_W", "sub1_L", "-sub1_H"), "vacuum"End SubFunction InsertVariable(oDesign, Name, value, Unit)oDesign.ChangeProperty _Array("NAME:AllTabs", _Array("NAME:LocalVariableTab", _Array("NAME:PropServers", _"LocalVariables"), _Array("NAME:NewProps", _Array("NAME:" + Name, _"PropType:=", "VariableProp", "UserDef:=", True, _"Value:=", value + Unit))))End Function'模型建立部分Function CreateBox(oEditor, Boxname, S1, D1, material)oEditor.CreateBox Array("NAME:BoxParameters", "XPosition:=", S1(0), "YPosition:=", _S1(1), "ZPosition:=", S1(2), "XSize:=", D1(0), "YSize:=", D1(1), "ZSize:=", _D1(2)), Array("NAME:Attributes", "Name:=", Boxname, "Flags:=", "", "Color:=", _"(34 139 34)", "Transparency:=", 0, "PartCoordinateSystem:=", "Global", "UDMId:=", _"", "MaterialValue:=", "" & Chr(34) & material & Chr(34) & "", "SurfaceMaterialValue:=", _"" & Chr(34) & "" & Chr(34) & "", "SolveInside:=", True, "IsMaterialEditable:=", _True, "UseMaterialAppearance:=", False, "IsLightweight:=", False)End Function
以上代码的编写还是要有一定vba编程的语法基础,难点在于根据录制的脚本代码找规律,将其封装为普适的Function,便于开发者自行调用。
原创不易,多多点赞转发,或者给个赞赏请作者喝杯咖啡呗。

下载HFSS Scripting Guide
识别或扫码二维码

下载文件
*本文的图片部分来自HFSS和Excel软件
*欢迎左侧一键转发至朋友圈,同时右侧在看与点赞
