0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全面介绍主调模块,以及GUI模块的编写

iIeQ_mwrfnet ? 来源:老猫电磁馆 ? 作者:况泽灵 ? 2021-06-30 15:23 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

摘要:本节主要介绍主调模块,以及GUI模块的编写。

主调模块

终于到了主调模块了,之前的章节主要介绍了参数计算,波导查值,以及HFSS封装和调用等,所有准备工作已就绪,只差一个“主体”将这些模块调用起来,实现这个功能的便是主调模块main.py。

这一步的编写相对比较简单,按我个人习惯,还是采用了面向对象的编程思路,写一个叫Horn的对象,首先通过对象的初始化功能将输入参数导入进来,然后调用“波导查值”模块确定波导尺寸、“参数计算”模块计算喇叭尺寸,再调用“HFSS调用模块”,通过规定一系列建模动作(如第三节所述),完成HFSS建模和运算。

示意代码如下,如果对于建模的动作有不太明白了,请看上一篇文章的讲解。

import paraCalc

import wg

import sim

class Horn:

def __init__(self, freq, HPE, HPH, wg_name=None):

self.freq = freq

self.HPE = HPE

self.HPH = HPH

self.wg_name = wg_name

self.wg_a, self.wg_b, self.horn_a, self.horn_b, self.horn_l = None, None, None, None, None

def wg_size(self):

if self.wg_name is None:

self.wg_a, self.wg_b = wg.check_by_freq(self.freq)

else:

self.wg_a, self.wg_b = wg.check_by_name(self.wg_name)

return self.wg_a, self.wg_b

def para(self):

self.wg_size()

if (self.wg_a or self.wg_b) is None:

print(‘Input error!’)

else:

self.horn_a, self.horn_b, self.horn_l = paraCalc.calc(self.freq, self.HPE, self.HPH, self.wg_a, self.wg_b)

def realize_in_hfss(self):

h = sim.HFSS()

# 设置变量

h.set_variable(‘wg_a’, self.wg_a)

h.set_variable(‘wg_b’, self.wg_b)

h.set_variable(‘wg_l’, self.wg_a*1.5)

h.set_variable(‘horn_a’, self.horn_a)

h.set_variable(‘horn_b’, self.horn_b)

h.set_variable(‘horn_l’, self.horn_l)

h.set_variable(‘wg_t’, 0.5)

h.set_variable(‘ab’, 75/self.freq)

# 波导内腔

h.create_centered_rectangle(‘wg_a’, ‘wg_b’, 0, ‘wg_in’)

h.create_centered_rectangle(‘wg_a’, ‘wg_b’, ‘wg_l’, ‘wg_in_’)

h.connect(‘wg_in’, ‘wg_in_’)

# 喇叭内腔

h.create_centered_rectangle(‘wg_a’, ‘wg_b’, ‘wg_l’, ‘horn_in’)

h.create_centered_rectangle(‘horn_a’, ‘horn_b’, ‘wg_l+horn_l’, ‘horn_in_’)

h.connect(‘horn_in’, ‘horn_in_’)

# 波导外形

h.create_centered_rectangle(‘(wg_a+wg_t*2)’, ‘(wg_b+wg_t*2)’, ‘-wg_t’, ‘wg’)

h.create_centered_rectangle(‘(wg_a+wg_t*2)’, ‘(wg_b+wg_t*2)’, ‘wg_l’, ‘wg_’)

h.connect(‘wg’, ‘wg_’)

# 喇叭外形

h.create_centered_rectangle(‘(wg_a+wg_t*2)’, ‘(wg_b+wg_t*2)’, ‘wg_l’, ‘horn’)

h.create_centered_rectangle(‘(horn_a+wg_t*2)’, ‘(horn_b+wg_t*2)’, ‘horn_l+wg_l’, ‘horn_’)

h.connect(‘horn’, ‘horn_’)

# 布尔运算生成喇叭,然后设为PEC

h.unite(‘horn’, ‘wg’)

h.unite(‘horn_in’, ‘wg_in’)

h.subtract(‘horn’, ‘horn_in’)

h.set_material(‘horn’)

# 生成区域并赋予辐射边界

h.create_region(‘ab’)

h.assign_radiation_region()

h.insert_radiation_setup()

# 设置端口

h.create_centered_rectangle(‘wg_a’, ‘wg_b’, 0, ‘port’)

h.assign_port(‘port’)

h.insert_analysis_setup(self.freq)

# 创建报告

h.create_reports()

# 保存工程并运行

h.save_prj()

h.run()

if __name__ == ‘__main__’:

f, E, H = 10, 30, 20

a_horn = Horn(f, E, H)

a_horn.realize_in_hfss()

以上代码可能没有太多需要解释的,可以看到的是,定义好HFSS接口后,调用过程就很轻松愉快了。

图形交互界面模块

开篇提到过,Python实现图形界面的方法有很多,除了Tkinter属于自带包外,其他著名的包如PyQt、wxPython等都需要额外安装,考虑到我们的小程序功能单一,界面也不需要太花哨,采用Python自带的Tkinter是一种较为经济快捷的选择。

由于第一次写界面,代码质量可能有点差,实现效果也不怎么样,好在我们要做的东西功能简单,不会影响使用。(自我安慰。。。)

不废话,直接上代码。

from tkinter import Tk, Label, StringVar, Entry, Button, Frame, TOP

import main

root = Tk()

root.title(‘最佳喇叭计算 by kuangzl’)

root.geometry(‘420x280’)

root.resizable(width=False, height=False)

tip = Label(root, text=‘由波束宽度计算喇叭尺寸,

使得该尺寸下增益最大化’, height=3,

font=(‘Microsoft YaHei UI’, 12, ‘italic’))

tip.pack(side=TOP)

frm = Frame(root)

frm.pack()

Label(frm, text=‘中频(GHz):’).grid(row=0, column=0)

Label(frm, text=‘E面(deg):’).grid(row=1, column=0)

Label(frm, text=‘H面(deg):’).grid(row=2, column=0)

Label(frm, text=‘波导宽(mm):’).grid(row=0, column=2)

Label(frm, text=‘波导窄(mm):’).grid(row=1, column=2)

Label(frm, text=‘喇叭宽(mm):’).grid(row=2, column=2)

Label(frm, text=‘喇叭窄(mm):’).grid(row=3, column=2)

Label(frm, text=‘喇叭长(mm):’).grid(row=4, column=2)

def calc():

f = float(v1.get())

E = float(v2.get())

H = float(v3.get())

horn = main.Horn(f, E, H)

horn.para()

v4.set(horn.wg_a)

v5.set(horn.wg_b)

v6.set(horn.horn_a)

v7.set(horn.horn_b)

v8.set(horn.horn_l)

def hfss():

f = float(v1.get())

E = float(v2.get())

H = float(v3.get())

horn = main.Horn(f, E, H)

horn.para()

horn.realize_in_hfss()

v1 = StringVar()

Entry(frm, textvariable=v1, width=8).grid(row=0, column=1, padx=10, pady=5)

v2 = StringVar()

Entry(frm, textvariable=v2, width=8).grid(row=1, column=1, padx=10, pady=5)

v3 = StringVar()

Entry(frm, textvariable=v3, width=8).grid(row=2, column=1, padx=10, pady=5)

v4 = StringVar()

Label(frm, textvariable=v4, width=10).grid(row=0, column=3)

v5 = StringVar()

Label(frm, textvariable=v5, width=10).grid(row=1, column=3)

v6 = StringVar()

Label(frm, textvariable=v6, width=10).grid(row=2, column=3)

v7 = StringVar()

Label(frm, textvariable=v7, width=10).grid(row=3, column=3)

v8 = StringVar()

Label(frm, textvariable=v8, width=10).grid(row=4, column=3)

Button(frm, text=‘calc’, command=calc).grid(row=4, column=0)

Button(frm, text=‘hfss’, command=hfss).grid(row=4, column=1)

root.mainloop()

这段代码实现的效果是这样的:

小结

至此,该小程序已经完成了九成以上,作为自用已经毫无问题了!但如果还想将程序分享出来,则须打包成可执行文件(如exe),这一步貌似很简单,却有不少的坑,我将在下一节详细介绍。

本篇即到此为止,下一篇将会是终篇,谢谢各位观看(*^_^*)!

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 封装
    +关注

    关注

    128

    文章

    8859

    浏览量

    146027
  • 代码
    +关注

    关注

    30

    文章

    4908

    浏览量

    71296
  • hfss
    +关注

    关注

    32

    文章

    167

    浏览量

    51104
  • GUI
    GUI
    +关注

    关注

    3

    文章

    686

    浏览量

    41609

原文标题:用Python实现喇叭天线设计小工具(四)

文章出处:【微信号:mwrfnet,微信公众号:微波射频网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    国产电源模块测试软件功能应用全面解析

    应用方面进行全面解析。 电源测试系统 核心功能解析: 多类型电源全面测试支持? 纳米软件电源测试系统能够对多种类型的电源进行测试,包括DC-DC电源、AC-DC电源、开关电源、电源适配器等。针对不同类型的电源模块,纳米软件
    的头像 发表于 08-01 11:51 ?224次阅读
    国产电源<b class='flag-5'>模块</b>测试软件功能应用<b class='flag-5'>全面</b>解析

    无线充电发射模块厂家

    本文主要介绍了无线充电发射模块的技术特点和供应商,包括功率转换电路、控制芯片、线圈系统以及通信解调模块。其中,无线充电发射模块的核心构成包括
    的头像 发表于 07-03 08:38 ?190次阅读
    无线充电发射<b class='flag-5'>模块</b>厂家

    24PIN芯片 收发一体1×9光模块介绍

    模块介绍: 光模块其实就是一个能将电信号转化为光信号,由此加快数据传输效率的设备.他主要由:电芯片,光芯片以及光组件构成的.总结来说,光模块
    的头像 发表于 06-12 17:10 ?368次阅读

    蓝牙低功耗模块的原理和应用介绍

    随着物联网技术的快速发展,蓝牙低功耗模块在连接各种设备和传输数据方面发挥着重要作用。今天将为您介绍蓝牙低功耗模块的工作原理以及其广泛的应用领域。 蓝牙低功耗
    的头像 发表于 05-21 15:56 ?494次阅读

    国产SiC碳化硅功率模块全面取代进口IGBT模块的必然性

    国产SiC模块全面取代进口IGBT模块的必然性 ——倾佳电子杨茜 BASiC基本半导体一级代理倾佳电子(Changer Tech)-专业汽车连接器及功率半导体(SiC碳化硅MOSFET单管,SiC
    的头像 发表于 05-18 14:52 ?501次阅读
    国产SiC碳化硅功率<b class='flag-5'>模块</b><b class='flag-5'>全面</b>取代进口IGBT<b class='flag-5'>模块</b>的必然性

    博世GTM IP模块架构介绍

    上篇文章我们介绍了博世GTM IP模块的核心功能及基础结构模块。本篇文章将继续解析GTM模块架构,重点介绍I/O
    的头像 发表于 03-07 17:50 ?1365次阅读
    博世GTM IP<b class='flag-5'>模块</b>架构<b class='flag-5'>介绍</b>

    储能变流器PCS中碳化硅功率模块全面取代IGBT模块

    在储能变流器(PCS)中,碳化硅(SiC)功率模块全面取代传统IGBT模块的趋势主要源于其显著的技术优势、成本效益以及系统级性能提升。SiC模块
    的头像 发表于 02-05 14:37 ?754次阅读

    数据I/O模块的概念、特点以及作用

    ? 本文简单介绍了数据I/O模块的概念、特点以及作用。 一、数据 I/O 模块是什么 1. 承接内外数据交互的“桥梁” 数据 I/O 模块
    的头像 发表于 01-21 11:10 ?1068次阅读

    SFP模块的监控与故障排除技巧

    模块的第一步是了解其基本参数,包括光功率、温度、电压和数据速率等。这些参数可以通过设备的管理界面或专用的监控工具来获取。 2. 使用管理界面 大多数网络设备都提供了管理界面,如命令行界面(CLI)或图形用户界面(GUI),用于查看SFP
    的头像 发表于 01-16 18:11 ?1282次阅读

    SiC MOSFET分立器件及工业模块介绍

    BASiC国产SiC碳化硅MOSFET分立器件及碳化硅功率SiC模块介绍
    发表于 01-16 14:32 ?2次下载

    Dali通信模块的选择与配置

    DALI(数字可寻址照明接口)通信模块的选择与配置涉及多个方面,包括网络架构、设备选择、布线要求以及功能实现等。以下是对DALI通信模块选择与配置的介绍: 一、DALI通信
    的头像 发表于 01-10 10:55 ?860次阅读

    智慧光迅VOLT光模块介绍

    颠覆你对中小场景网络搭建的传统认知,感受到一丝丝来自全光网络的震撼。 01 产品介绍 VOLT光模块的外观相体型稍大于普通的SFP光模块,采用了标准的GPON协议,可以注册基于GPON协议的ONU或者光AP。为了应用各种复杂场景
    的头像 发表于 12-03 09:32 ?2812次阅读
    智慧光迅VOLT光<b class='flag-5'>模块</b><b class='flag-5'>介绍</b>

    400G OSFP光模块全面解析与应用

    、高速传输的特点,已成为数据中心及高性能计算中心的核心通信组件。本文将详细介绍400G OSFP光模块的基本概念、协议分类、模块种类以及它在高性能计算中心中的应用,并结合实际数据进行分
    的头像 发表于 12-02 14:17 ?1041次阅读
    400G OSFP光<b class='flag-5'>模块</b>的<b class='flag-5'>全面</b>解析与应用

    40G光模块介绍及常见问题探讨

    模块厂家提供40G光模块,应用于数据中心,云计算,高性能计算场景,广泛兼容华为,华三,思科,锐捷等光纤模块品牌,助您实现高速数据传输。本文介绍40G光
    的头像 发表于 11-25 11:56 ?997次阅读

    唯创知音SoundSticker V7.0 贺卡模块介绍

    模块
    WT-深圳唯创知音电子有限公司
    发布于 :2024年10月25日 17:36:28