当前位置: 首页 > news >正文

HFSS脚本建模入门

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

​摘要:

HFSS作为高频结构设计的首选工具和行业标准,能从几何结构、材料特性到分析、控制及所有后处理进行全参量化设计。可对于仿真设计相关的工程师来说,利用HFSS软件进行3D可视化建模容易,但是后期的模型维护和传阅却难以为继。

本文使用的电磁仿真软件为ANSYS Electronics Desktop Version 2017.2.0

HFSS脚本录制

下图所示环形器的HFSS建模不难,但是工程师们建模习惯不同,最后各自的仿真模型在进行传阅时,其可读性就难免参差不齐。有的喜欢预估好初始值后进行纯数字建模,有的喜欢variables和数字混用,即使是有些人采用全参量化建模,由于大家命名习惯大相径庭,最终拿到别人的仿真文件进行参数微调时,也会对模型的建立逻辑和某些结构对应的变量有所困惑。

特别是在别人已经建立好的模型上进行调试优化时,面对“一砖一瓦”构成的复杂结构时,想通过Delete Last Operation操作来窥视开发者的模型确实比较麻烦。

这里提供一种最简单的方法:HFSS自带的Record Script To File功能进行vbs脚本的录制。可能大家听说过这个功能,但是在实施过程中遇到一些困难。比如明明录制好了,再次Run Script进行重构模型为什么报错呢?

​如下图所示,随便建立一个文件进行模型的绘制,对其进行vbs脚本录制:

​Run Script后,HFSS软件提示报错,很多人第一次使用这个可能都会遇到这种问题。

其实只需要在录制脚本前,软件处于空文件状态(Project Manager下无Project和Design),这样从零开始录制的脚本执行起来就不会报错。

​经过上述操作后录制的vbs代码如下(可直接复制到txt文件里,将文件类型后缀改为.vbs,在HFSS软件中的Tool->Run Script载入执行即可):

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", ""
15 Set oDesign = oProject.SetActiveDesign("HFSSDesign1")
16 Set oEditor = oDesign.SetActiveEditor("3D Modeler")
17 oEditor.CreateRegularPolyhedron Array("NAME:PolyhedronParameters", "XCenter:=", _
18 "-0.4mm", "YCenter:=", "-0.4mm", "ZCenter:=", "0mm", "XStart:=", "0.2mm", "YStart:=", _
19 "0.2mm", "ZStart:=", "0mm", "Height:=", "1.2mm", "NumSides:=", "12", "WhichAxis:=", _
20 "Z"), Array("NAME:Attributes", "Name:=", "RegularPolyhedron1", "Flags:=", "", "Color:=", _
21 "(143 175 143)", "Transparency:=", 0, "PartCoordinateSystem:=", "Global", "UDMId:=", _
22 "", "MaterialValue:=", "" & Chr(34) & "vacuum" & Chr(34) & "", "SurfaceMaterialValue:=", _
23 "" & Chr(34) & "" & Chr(34) & "", "SolveInside:=", true, "IsMaterialEditable:=", _
24 true, "UseMaterialAppearance:=", false)
25 oEditor.CreateCylinder Array("NAME:CylinderParameters", "XCenter:=", "0.8mm", "YCenter:=", _
26 "1.8mm", "ZCenter:=", "0mm", "Radius:=", "0.2mm", "Height:=", "1mm", "WhichAxis:=", _
27 "Z", "NumSides:=", "0"), Array("NAME:Attributes", "Name:=", "Cylinder1", "Flags:=", _
28 "", "Color:=", "(143 175 143)", "Transparency:=", 0, "PartCoordinateSystem:=", _
29 "Global", "UDMId:=", "", "MaterialValue:=", "" & Chr(34) & "vacuum" & Chr(34) & "", "SurfaceMaterialValue:=", _
30 "" & Chr(34) & "" & Chr(34) & "", "SolveInside:=", true, "IsMaterialEditable:=", _
31 true, "UseMaterialAppearance:=", false)
32 oEditor.CreateBox Array("NAME:BoxParameters", "XPosition:=", "0.6mm", "YPosition:=", _
33 "-2.6mm", "ZPosition:=", "0mm", "XSize:=", "0.8mm", "YSize:=", "0.4mm", "ZSize:=", _
34 "0.8mm"), Array("NAME:Attributes", "Name:=", "Box1", "Flags:=", "", "Color:=", _
35 "(143 175 143)", "Transparency:=", 0, "PartCoordinateSystem:=", "Global", "UDMId:=", _
36 "", "MaterialValue:=", "" & Chr(34) & "vacuum" & Chr(34) & "", "SurfaceMaterialValue:=", _
37 "" & Chr(34) & "" & Chr(34) & "", "SolveInside:=", true, "IsMaterialEditable:=", _
38 true, "UseMaterialAppearance:=", false)
39 oEditor.CreateCone Array("NAME:ConeParameters", "XCenter:=", "2.2mm", "YCenter:=", _
40 "-0.2mm", "ZCenter:=", "0mm", "WhichAxis:=", "Z", "Height:=", "0.6mm", "BottomRadius:=", _
41"0.447213595499958mm", "TopRadius:=", "0.4mm"), Array("NAME:Attributes", "Name:=", _
42 "Cone1", "Flags:=", "", "Color:=", "(143 175 143)", "Transparency:=", 0, "PartCoordinateSystem:=", _
43 "Global", "UDMId:=", "", "MaterialValue:=", "" & Chr(34) & "vacuum" & Chr(34) & "", "SurfaceMaterialValue:=", _
44 "" & Chr(34) & "" & Chr(34) & "", "SolveInside:=", true, "IsMaterialEditable:=", _
45 true, "UseMaterialAppearance:=", false)

除了录制建模的脚本,我们还可以进行繁琐的数据处理、导出步骤的录制,如下面代码就是为了实现S11和3D方向图数据的一键式导出。

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 'dipole_simu:项目名称 Project Name
14 Set oProject = oDesktop.SetActiveProject("dipole_simu")
15 'veeDipole_idealFeed1:设计名称 Design Name
16 Set oDesign = oProject.SetActiveDesign("veeDipole_idealFeed1")
17 Set oModule = oDesign.GetModule("ReportSetup")
18 'oModule.ExportToFile "Results下的报告名称", "csv保存路径+csv文件名"
19 oModule.ExportToFile "S11", "C:/Users/Administrator/Desktop/S11.csv"
20 oModule.ExportToFile "Gain Plot 1", _
21 "C:/Users/Administrator/Desktop/Gain Plot 1.csv"
22

HFSS API脚本化建模 前文已经介绍了如何录制脚本,便于模型的重建和数据的导出。但是对方收到vbs文件后,要进行模型的修改,没有注释其实看起来也是一团糟的。虽然可以通过多次删除部分vbs代码一步步回构到自己想要的节点,不过这种方法也是有点麻烦。

幸运的是,matlab调用hfss的这项工程早已在Github上模块化并开源了。

由于Github在境内大概率访问不了,这里贴了一条镜像的链接:

https://github.com.cnpmjs.org/yuip/hfss-api

如果遇到下面问题,多刷新几次就好了:

​最后我们可以选择排的最靠前的yuip/hfss-api,对其zip文件进行下载。

因为都是英文注释,需要使用者有一点英文阅读水平,通过examples里面的示例进行各模块function的功能以及参量传入、调用方法的熟练使用。

有了matlab和hfssapi后,能做的事情就多了,比如下面这个就利用matlab读入图像并保存各像素点rgb数值,然后再利用hfssapi中的hfssRectangle和hfssSetColor函数进行图像在HFSS中的重绘。

​想更深一步了解hfss脚本,可以在ANSYS Electronics Desktop Version 2017.2.0及以上版本中的Help中打开HFSS Scripting这个帮助文档,一千多页的内容特别详实。

想象一下,你给别人一个vbs脚本,就几kB,然后对方就能复构你的HFSS模型,是不是特别酷炫,还节省占用空间?

以上便是要给大家分享的内容,希望对大家有所帮助~~

END

原文链接:学个Antenna:HFSS脚本建模入门 - RFASK射频问问

作者:微波天线工程师

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

关于RFASK射频问问

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

相关文章:

  • 「运维有小邓」自助AD更新
  • 【LeetCode】双指针题总结(持续更新)
  • 专业的ADAS测试记录仪ETHOS
  • 【Java面试】听说Java求职者/面试官都关注了我,这道面试题一个空Object对象的占多大空间?你答的上来吗
  • CAD如何使插入的块为分解状态?CAD如何绘制五瓣花?
  • AVProVideo☀️四、视频播放案例
  • 支持流畅运行win10的最低配置是什么
  • 不以功利谈“感统”:拒绝焦虑,顺应养育,才能让孩子走得更远
  • 通信算法之七十七:无人机设备上的通信系统
  • 【LeetCode】链表题总结(持续更新)
  • 新能源汽车如何融合互联网,结合消费者习惯打造全新的营销策略?
  • DPDK 网卡设备scan及probe流程
  • 面对中小型机房动力环境该如何实现监控?
  • VXlan隧道三层网关功能对接华为设备测试
  • LeetCode 官方强推的算法笔记,是有什么与众不同的魅力?
  • css的样式优先级
  • C语言笔记(第一章:C语言编程)
  • emacs初体验
  • JS专题之继承
  • PAT A1120
  • Promise初体验
  • vue 配置sass、scss全局变量
  • 简单基于spring的redis配置(单机和集群模式)
  • 码农张的Bug人生 - 见面之礼
  • 判断客户端类型,Android,iOS,PC
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 设计模式走一遍---观察者模式
  • 使用SAX解析XML
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • ​linux启动进程的方式
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #stm32驱动外设模块总结w5500模块
  • (2)STL算法之元素计数
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)Linux+Windows下安装ffmpeg
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)四层和七层负载均衡的区别
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net和jar包windows服务部署
  • .net经典笔试题
  • .NET项目中存在多个web.config文件时的加载顺序
  • /etc/motd and /etc/issue
  • @JSONField或@JsonProperty注解使用
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [C#][DevPress]事件委托的使用
  • [C#]C#学习笔记-CIL和动态程序集
  • [C#C++]类CLASS
  • [C++]:for循环for(int num : nums)
  • [docker] Docker容器服务更新与发现之consul