学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天线的原理简介、仿真软件建模、设计、调试过程及思路。如有想看到的内容或技术问题,可以在文尾写下留言。
摘要:
学个Antenna:HFSS脚本建模入门一文,对HFSS脚本建模进行了入门级的介绍,不过要装上日趋臃肿、动辄十几G的MATLAB软件。幸运的是,HFSS支持VBScript进行二次开发,因此在Excel中对HFSS进行调用不是梦!
本文使用的软件为AnsysEM 18.2和Excel 2013
Excel vba
Microsoft Visual Basic for application,简称为VBA,是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。那这个和HFSS软件有啥联系么?
在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编辑器。
一个简单的测试代码如下:
1 Sub Hello() 2 Dim bj As String 3 bj = InputBox("请输入您的文本", "请输入") 4 MsgBox "确定按钮被点击", vbOKOnly 5 End Sub |
Excel调用HFSS软件
当上面的步骤都顺畅无阻后,我们可以进入下一环节,即在Excel vba编辑器里面编写代码调用HFSS软件。首先我们要打开HFSS软件,并保证Project Manager下为空,防止后续出现报错现象。
下图是对ANSYS Electronics脚本的各模块概述
1 'oAnsoftApp为VBScript提供了访问Ansys.ElectronicsDesktop的句柄 2 Set oAnsoftApp = CreateObject("Ansoft.ElectronicsDesktop" |
1 'oDesktop用于执行桌面级操作,包括项目管理。 2 Set oDesktop = oAnsoftApp.GetAppDesktop() |
1 'Project对象对应于产品中打开的一个项目。它用于操纵项目及其数据。 2 '其数据包括变量、材料定义等。 3 Set oProject = oDesktop.GetActiveProject() |
1 'oDesign对象对应于项目中已存在的一个设计实例。该对象用于操纵设计及其数据。 2 '它的数据包括变量、模块和编辑器。 3 Set oDesign = oProject.GetActiveDesign() |
1 'oEditor 对象对应于已存在的一个编辑器,例如3D建模器、布局或原理图编辑器。 2 '该对象用于在编辑器中添加和修改数据。 3 Set oEditor = oDesign.SetActiveEditor("3D Modeler") |
1 'oModule 对象对应设计中的一个模块。Modules 用于处理一组相关功能。 2 Set oModule = oDesign.GetModule("BoundarySetup") |
当然,看完上面的内容可能会云里雾里,现在直观地解释下:
- 首先你要创建一个Ansoft.ElectronicsDesktop对象,并获取oDesktop用于执行桌面级操作。这就是你手动打开HFSS软件并获得该软件控制权的那一步
- 接着oProject和oDesign就是模拟你新建Project和Design,获得其句柄
- 然后oEditor和oModule主要是获取我们建模、设置边界条件、求解器、建立报告等操作的句柄纸上得来终觉浅,我们可以打开HFSS的脚本录制功能,在录制的代码中来学习:
1 ' ---------------------------------------------- 2 ' Script Recorded by ANSYS Electronics Desktop Version 2017.2.0 3 ' ---------------------------------------------- 4 Dim oAnsoftApp 5 Dim oDesktop 6 Dim oProject 7 Dim oDesign 8 Dim oEditor 9 Dim oModule 10 Set oAnsoftApp = CreateObject("Ansoft.ElectronicsDesktop") 11 Set oDesktop = oAnsoftApp.GetAppDesktop() 12 oDesktop.RestoreWindow 13 Set oProject = oDesktop.NewProject 14 oProject.InsertDesign "HFSS", "HFSSDesign1", "DrivenModal", "" |
从上面的代码中,我们可以很直观地感受到:先进行oAnsoftApp,oDesktop,oProject,oDesign,oEditor,oModule五要素的变量定义;接着对oAnsoftApp,oDesktop配置句柄;然后利用oProject.InsertDesign插入一个"HFSSDesign1"的设计文件。
剩下的oEditor,oModule我们可以根据上面的编程逻辑进行句柄的设置。
1 Set oDesign = oProject.SetActiveDesign("HFSSDesign1") 2 Set oEditor = oDesign.SetActiveEditor("3D Modeler") |
到此为止,我们就将调用HFSS需要的句柄全部掌握在手里了,后续在Excel中调用HFSS软件指日可待。
在官方HFSS Scripting Guide的P51:Sample HFSS Script里有一段比较详细的英文教程,建议大家先观摩下。
简单实例演示
以上内容都读懂后,剩下的就是自己录制脚本,分析代码,学习修改代码,封装成function进行调用。
这里给出本人部署好的一段代码,可直接粘贴到Excel vba编辑器进行复现:
1 Sub Training1() 2 Dim oAnsoftApp 3 Dim oDesktop 4 Dim oProject 5 Dim oDesign 6 Dim oEditor 7 Dim oModule 8 9 Dim sub1_H, sub1_W, sub1_L 10 sub1_H = 0.254: sub1_W = 20 11 12 Set oAnsoftApp = CreateObject("Ansoft.ElectronicsDesktop") 13 Set oDesktop = oAnsoftApp.GetAppDesktop() 14 Set oProject = oDesktop.NewProject 15 oProject.InsertDesign "HFSS", "Test", "DrivenModal", "" 16 Set oDesign = oProject.SetActiveDesign("Test") 17 Set oEditor = oDesign.SetActiveEditor("3D Modeler") 18 19 'Variable Define 20 InsertVariable oDesign, "sub1_H", CStr(sub1_H), "mm" 21 InsertVariable oDesign, "sub1_W", CStr(sub1_W), "mm" 22 InsertVariable oDesign, "sub1_L", "2 * sub1_W", "" 23 24 'Create the Substrate 25 CreateBox oEditor, "Sub1", Array("-sub1_W/2", "0mm", "0mm"), _ 26 Array("sub1_W", "sub1_L", "-sub1_H"), "vacuum" 27End Sub 28 29Function InsertVariable(oDesign, Name, value, Unit) 30 oDesign.ChangeProperty _ 31 Array("NAME:AllTabs", _ 32 Array("NAME:LocalVariableTab", _ 33 Array("NAME:PropServers", _ 34 "LocalVariables"), _ 35 Array("NAME:NewProps", _ 36 Array("NAME:" + Name, _ 37 "PropType:=", "VariableProp", "UserDef:=", True, _ 38 "Value:=", value + Unit)))) 39End Function 40'模型建立部分 41Function CreateBox(oEditor, Boxname, S1, D1, material) 42 oEditor.CreateBox Array("NAME:BoxParameters", "XPosition:=", S1(0), "YPosition:=", _ 43 S1(1), "ZPosition:=", S1(2), "XSize:=", D1(0), "YSize:=", D1(1), "ZSize:=", _ 44 D1(2)), Array("NAME:Attributes", "Name:=", Boxname, "Flags:=", "", "Color:=", _ 45 "(34 139 34)", "Transparency:=", 0, "PartCoordinateSystem:=", "Global", "UDMId:=", _ 46 "", "MaterialValue:=", "" & Chr(34) & material & Chr(34) & "", "SurfaceMaterialValue:=", _ 47 "" & Chr(34) & "" & Chr(34) & "", "SolveInside:=", True, "IsMaterialEditable:=", _ 48 True, "UseMaterialAppearance:=", False, "IsLightweight:=", False) 49End Function |
以上代码的编写还是要有一定vba编程的语法基础,难点在于根据录制的脚本代码找规律,将其封装为普适的Function,便于开发者自行调用。
下载HFSS Scripting Guide
PDF文件和仿真文件在下面的总文件夹进行更新:
识别或扫码二维码
下载文件
*本文的图片部分来自HFSS和Excel软件
*欢迎左侧一键转发至朋友圈,同时右侧在看与点赞
以上便是要给大家分享的内容,希望对大家有所帮助~~大家持续关注“微波射频网”,后续精彩不断~
本期原创工程师:94巨蟹座少年
本文为MWRF.NET原创文章,未经允许不得转载,如需转载请联系market#mwrf.net(#换成@)