HFSS 您所在的位置:网站首页 cst怎么用脚本 HFSS

HFSS

2024-01-30 19:08| 来源: 网络整理| 查看: 265

仿真脚本发展现状

脚本语言相关:由于Python编程语言发展较晚,此前自动化等脚本都是VBA,例如CST/HFSS/AWR/ANSYS/ABAQUS/Excel等软件现在仍保留着这些接口。但是VB的弊端很明显,语法不够简单、灵活性有限。因此可以看到和预料到近年以及后续会有越来越多的软件适配Python接口。(笔者4年前也是感觉有此趋势所以在那个时候就开始学习Python了)

脚本二次开发常见适用领域:

CAD二次开发。例如autoCad,Creo等CAD软件。由于目前各行各业使用CAD+CAE的比例越来越高,水平越来越好,模型/业务越复杂,自动化CAD建模会有越来越大的需求。目前市场需求稍微多一点的是AutoCad自动建模。

CAE二次开发。如电磁/流体/光学/力学仿真等。CAE往往需要建模+剖分+计算,因此CAE可以做的地方更多。大致大家就分为了前处理+后处理+自动优化等。目前市场需求较大的是自动MESH和后处理。 总之,就一句话,人生苦短,请用Python。

学习建议

Python语言相关

基础语法。这个就不用多说了。

Python相关的库。建议学习numpy,pandas这2个数据处理的库,matplotlib绘图库,如xlwt等Excel文件处理相关的库,最后就是pyqt5写GUI界面的库。

仿真软件相关

仿真的基本过程。仿真软件的运行和使用过程。不需要很会建模啊,搞设计,但是呢,软件怎么运行的,大致的按钮,每个功能是什么这些必须得会。这一块建议多学学,能否做一个好的软件,软件使用水平很重要。怎么建模,怎么简化模型,怎么设置材料库,怎么mesh,怎么设置边界,怎么设置激励,怎么建立仿真sutup,怎么获取数据等等。脚本相关的文档。查看对应CAE软件的script脚本文档,里面会清楚地告知怎么调用每个接口,函数参数等。部分好一点的商业软件还内置了录制脚本的功能,这个非常非常实用。 这块需要不断的学习,笔者也只学了ANSYS/CST/ABAQUS的目前。 HFSS自动化实例

脚本开发目的:能自动化设置激励,自动化导出结果,最终形成一个汇总指标单。

界面开发:由于是脚本,所以需要在仿真的服务器或者是PC上运行,自动和程序交互,所以需要编写一个GUI程序界面。 在这里插入图片描述 pyqt编写的,具体怎么写这个界面,搭建可以自行百度,用designer即可拖拽形成界面。界面几个模块主要是仿真文件的对应参数,不同行业肯定不一样,所以就不赘述了。 总体思路是:程序自动打开HFSS软件,自动根据激励文件输入激励并输出结果。这个代码太长所以就不放上面了。

更改激励脚本:

def get_excitions(Am, Ph, array, sum): array=[int(i) for i in array] home_list = [["IncludePortPostProcessing:=", True, "SpecifySystemPower:=", False]] for i in range(1, sum + 1): if i in array: name = str(i) am = str(Am[array.index(i)]) + "W" phase = str(Ph[array.index(i)]) part = [ "Name:=", name, "Magnitude:=", am, "Phase:=", phase] else: name = str(i) part = [ "Name:=", name, "Magnitude:=", "0W", "Phase:=", "0deg"] home_list.append(part) return home_list

通过此函数可以安装幅度相位数据自动生成相应的激励代码,输出的home_list即HFSS可以识别的更改激励的设置。 (具体的里面每个参数建议录制脚本参考)

抽取结果并导出为CSV文件代码:

从3D数据里面抽取结果,s参数,2D方向图等,此脚本是2D方向图数据。

def generate_report(xiaqing, oDesign, outcom_path, setup_name, radiation, port_num): oModule = oDesign.GetModule("ReportSetup") # 垂直面 V_name = "T" + str(xiaqing) + "_V" oModule.CreateReport(V_name, "Far Fields", "Rectangular Plot", setup_name, [ "Context:=", radiation ], [ "Theta:=", ["All"], "Phi:=", ["0deg"], "Freq:=", ["All"], ], [ "X Component:=", "Theta", "Y Component:=", ["dB(GainTotal)"] ], []) # 水平面 H_name = "T" + str(xiaqing) + "_H" theta = str(90 + int(xiaqing)) + "deg" print(H_name, theta) oModule.CreateReport(H_name, "Far Fields", "Rectangular Plot", setup_name, ["Context:=", radiation], [ "Phi:=", ["All"], "Theta:=", [theta], "Freq:=", ["All"], ], [ "X Component:=", "Phi", "Y Component:=", ["dB20(co1)", "dB20(cro1)"] ], []) oModule.AddTraces(H_name, setup_name, ["Context:=", radiation], [ "Phi:=", ["All"], "Theta:=", [theta], "Freq:=", ["All"], ], [ "X Component:=", "Phi", "Y Component:=", ["dB(GainTotal)"] ], []) # 建结果文件夹 path = outcom_path + "/PORT" + str(port_num) H = path + "/T" + str(xiaqing) + "_H.csv" V = path + "/T" + str(xiaqing) + "_V.csv" if not os.path.exists(path): os.makedirs(path) oModule.ExportToFile(H_name, H) oModule.ExportToFile(V_name, V) oModule.DeleteReports([H_name, V_name])

注:里面涉及到一些3D数据构成和方向图知识,非电磁专业的工程师可能不理解。

汇总成Excel代码:

将导出的CSV 方向图文件进行计算,并形成报告。

# 解析水平面数据并保存图片 def parse(datas, name, temp_dirs): columns = datas.columns.values.tolist() # 获取列名列表,注意values,tolist的使用 theta = datas[columns[0]].values.tolist() empty = pd.DataFrame( columns=['PORT&T', '频点', '水平面增益Gain', '水平面波宽(3dB)', '水平面波宽(10dB)', '主极化前后比', '交叉极化前后比', '交叉极化比(0°)' , '交叉极化比(±60°)', '水平面波束偏移(最大值)','水平面波束偏移(3dB)', '+60°边缘功率下降', '-60°边缘功率下降',"总功率前后比(±15°)","总功率前后比(±30°)","总功率前后比(±180°)"]) fig = plt.figure() for column in columns[1:]: freq = float(re.findall(".*?Freq='(.*?)GHz.*?'", column)[0]) * 1000 if 'co1' in column: data1 = datas[column].values.tolist() # 主极化 column2 = column.replace('co1', 'cro1') data2 = datas[column2].values.tolist() # 交叉极化 if max(data1)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有