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

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

    关注

    126

    文章

    7726

    浏览量

    142582
  • 代码
    +关注

    关注

    30

    文章

    4719

    浏览量

    68209
  • hfss
    +关注

    关注

    32

    文章

    167

    浏览量

    50219
  • GUI
    GUI
    +关注

    关注

    3

    文章

    637

    浏览量

    39477

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    EtherCAT总线IO模块功能及安装介绍

    XD系列插片式远程IO模块,成套系统主要由耦合器、各种功能IO模块、电源辅助模块以及终端模块组成。有多种通讯协议总线的耦合器,例如PROFI
    的头像 发表于 07-14 09:14 685次阅读
    EtherCAT总线IO<b class='flag-5'>模块</b>功能及安装<b class='flag-5'>介绍</b>

    插片式远程 IO模块:热电阻温度采集模块与PLC配置案例

    XD系列成套系统主要由耦合器、各种功能I/O模块、电源辅助模块以及终端模块组成。有多种通讯协议总线的耦合器,例如Profinet、EtherCAT、Ethernet/IP、Cclink
    的头像 发表于 07-12 09:34 291次阅读
    插片式远程 IO<b class='flag-5'>模块</b>:热电阻温度采集<b class='flag-5'>模块</b>与PLC配置案例

    AC/DC电源模块的原理、特点以及其在实际应用中的重要性

    取出来,并将其转换为稳定的直流电源,供给各种不同功率需求的设备使用。本文将介绍AC/DC电源模块的原理、特点以及其在实际应用中的重要性。 AC/DC电源模块的原理、特点
    的头像 发表于 06-11 14:11 477次阅读
    AC/DC电源<b class='flag-5'>模块</b>的原理、特点<b class='flag-5'>以及</b>其在实际应用中的重要性

    蓝牙模块怎么使用?一篇全面指南!

    、基础知识 蓝牙模块是什么? 蓝牙模块是一种集成了蓝牙功能的电路板,它可以将数字信号转换为蓝牙信号进行传输。这种模块通常包括一个微控制器,以及用于发射和接收蓝牙信号的无线电频率(RF)
    的头像 发表于 05-29 13:53 2055次阅读

    什么是SFP光模块?如何选择SFP光模块

    本文介绍了SFP光模块的概述、技术原理、外观组成、选择方法、未来趋势及常见问答。SFP光模块是小型化、支持热插拔的光模块,用于光纤通信和数据传输。选择时需考虑传输速率、传输距离等因素。
    的头像 发表于 05-06 11:43 1717次阅读

    蓝牙双模音频模块支持串口AT指令控制介绍

    蓝牙音频模块支持串口AT指令控制介绍,这里推荐BT401蓝牙模块,功能简介如下: BT401模块是一款支持蓝牙、U盘、TF卡播放的5合1的解决方案。模组的亮点在支持无损音乐的播放,
    的头像 发表于 03-28 11:27 666次阅读
    蓝牙双模音频<b class='flag-5'>模块</b>支持串口AT指令控制<b class='flag-5'>介绍</b>

    DC电源模块的分类及特点介绍

    BOSHIDA DC电源模块的分类及特点介绍 DC电源模块是一种将交流电转换为直流电的设备,广泛应用于各种电子设备中。根据其特点和功能,DC电源模块可以分为线性稳压
    的头像 发表于 03-26 13:54 571次阅读
    DC电源<b class='flag-5'>模块</b>的分类及特点<b class='flag-5'>介绍</b>

    全面的光模块介绍

    模块是一种重要的光通信技术,主要负责将电信号转换为光信号或将光信号转换为电信号。它由光电子器件、功能电路和光接口等部分组成。光模块广泛应用于数据中心、基站、存储网络和5G网络等领域,具有传输速率高、传输距离远、抗干扰能力强等优点。
    的头像 发表于 03-25 10:33 2461次阅读

    为什么要进行光模块测试?光模块测试方案

    ,光模块的正确运行对于光通信系统的稳定性和可靠性至关重要。下面我将详细介绍为什么要进行光模块测试以及模块测试方案。 1. 确保光
    的头像 发表于 01-19 11:15 1185次阅读

    介绍四款远距离无线通信模块

    支持远距离无线通信模块包含LoRa模块和TurMass模块,两种模块均有着低功耗、穿透性强、抗干扰能力强、易于部署以及成本低等特点,在工业控
    的头像 发表于 01-15 10:04 3846次阅读
    <b class='flag-5'>介绍</b>四款远距离无线通信<b class='flag-5'>模块</b>

    ROS系统的MoveIt模块介绍

    (包括建模、运动学求解、运动规划、避障等)。 后续我将分几篇博客分别介绍如何一步步使用MoveIt控制自己的机械臂,算是对以前的学习内容的记录和分享。 关于MoveIt最全面的讲解可以参考MoveIt官方网站,推荐大家多参考官方文档和例程,这里的博文系列权当简介和入门
    的头像 发表于 11-28 11:43 778次阅读
    ROS系统的MoveIt<b class='flag-5'>模块</b><b class='flag-5'>介绍</b>

    千兆光模块和万兆光模块的发展趋势

    本篇文章将深入探讨千兆光模块和万兆光模块的领先技术和研发趋势。首先介绍了光模块的工作原理和种类,接着介绍了千兆光
    的头像 发表于 11-20 12:47 744次阅读

    深入了解千兆光模块和万兆光模块

    本文将为读者详细介绍千兆光模块和万兆光模块。首先,我们将解释什么是光模块,光模块是如何工作的,以及
    的头像 发表于 11-20 12:42 1987次阅读

    千兆光模块和万兆光模块在网络安全中的重要性

    本文旨在介绍千兆光模块和万兆光模块在网络安全中的重要性。作为网络通信的基础设施,光模块的性能和稳定性对网络安全至关重要。本文将从光模块的技术
    的头像 发表于 11-13 11:00 544次阅读