• Excel也能调用HFSS?


    学个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,便于开发者自行调用。

    PDF文件和仿真文件可通过原文底部获取~

    原文链接:Excel也能调用HFSS? - RFASK射频问问

    -END-

    作者:微波天线工程师

    应读者朋友们对这个系列文章的喜爱,也为了能够让老师更系统更全面地介绍MATLAB-HFSS-API相关知识,现推出该系列课程,共25课时,欢迎大家加入课程学习!https://www.rfask.net/kc/v/41.html

    ​关于RFASK射频问问

    射频问问 (http://RFASK.NET) 是在"微波射频网 (http://MWRF.NET)”系列原创技术专栏基础上升级打造的技术问答学习平台,主要围绕射频芯片、微波电路、天线、雷达、卫星等相关技术领域,致力于为无线通信、微波射频、天线、雷达等行业的工程师,提供优质、原创的技术问答、专栏文章、射频课程等学习内容。更多请访问:http://www.rfask.net

  • 相关阅读:
    某环保制造企业核心人才培养项目成功案例纪实
    通俗易懂分析:Vite和Webpack的区别
    微服务整合公众号告警系统
    基于神经网络的系统辨识,神经网络的种类和特点
    创建型:工厂模式-工厂方法、抽象工厂
    tf.nest
    基于SSM的校园快递代取系统设计与实现
    2.6 用一套万能文案公式来拆解4个小红书爆文案例【玩赚小红书】
    每天一个狗命小技巧:当你记住这10条Linux命令后,你就再也不会坐穿某个地方咯(狗头)
    标准lua和luajit的一个代码测试对比
  • 原文地址:https://blog.csdn.net/qizu/article/details/126887956