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

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

    关注

    123

    文章

    7095

    浏览量

    140896
  • 代码
    +关注

    关注

    30

    文章

    4536

    浏览量

    66487
  • hfss
    +关注

    关注

    30

    文章

    167

    浏览量

    49803
  • GUI
    GUI
    +关注

    关注

    3

    文章

    599

    浏览量

    38687

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    全面的光模块介绍

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

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

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

    光转电模块是什么?是光模块吗?光转电模块怎么使用?

    光转电模块是什么?是光模块吗?光转电模块怎么使用? 光转电模块是一种能将光能转化为电能的装置,它由太阳能电池板、支撑结构、电池板之间的连接线以及
    的头像 发表于 12-27 11:28 951次阅读

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

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

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

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

    千兆光模块和万兆光模块在数据中心中的应用

    千兆光模块和万兆光模块在数据中心中的应用是网络优化的关键因素之一。本文将详细介绍千兆光模块和万兆光模块的特性、优劣势
    的头像 发表于 11-06 14:55 216次阅读

    Linux模块相关命令 Linux驱动模块编写与挂载

    Linux模块相关命令 Linux驱动模块编写与挂载
    发表于 10-01 12:20 161次阅读
    Linux<b class='flag-5'>模块</b>相关命令 Linux驱动<b class='flag-5'>模块</b>的<b class='flag-5'>编写</b>与挂载

    详细介绍下Aurix芯片的STM模块

    TC37x芯片有3个STM模块,每个STM模块可以产生两个SRx_INT中断信号(通过STM模块的Compare功能实现,下文介绍),Davinci OS中的硬件定时器就是使用STM
    的头像 发表于 09-26 09:12 782次阅读
    详细<b class='flag-5'>介绍</b>下Aurix芯片的STM<b class='flag-5'>模块</b>

    import模块的导入方法

    字 import 加载的模块分为四种类型: 使用python编写的代码 .py 文件 已被编译为共享库或 DLL 的C或C++扩展 一组模块的包 使用C编写并链接到python解释器的
    的头像 发表于 09-11 17:31 736次阅读

    GUI方案中ALPHA通道处理介绍

    伴随着 GUI 应用在嵌入式领域比重日益增加,STM32 专门提供了 DMA2D、LTDC 以及 DSI 等外设,能够实现优良的 GUI 解决方案。本文主要围绕 STM32 的 DMA2D 和 LTDC 展开讨论,
    发表于 09-11 08:16

    GUI方案中ALPHA通道处理介绍

    伴随着GUI应用在嵌入式领域比重日益增加,STM32专门提供了DMA2D、LTDC以及DSI等外设,能够实现优良的GUI解决方案。本文主要围绕STM32的DMA2D和LTDC展开讨论,介绍
    发表于 09-08 08:12

    SA628全双工语音传输模块介绍视频

    模块
    思为无线
    发布于 :2023年07月21日 11:59:16

    67.067 模块模块介绍

    模块代码
    充八万
    发布于 :2023年07月21日 05:31:03

    Python中telnetlib模块的基本使用

    telnetlib 是 Python 标准库中的一个模块,它提供了 Telnet 协议的客户端功能。使用 telnetlib 模块,我们可以在 Python 中编写脚本来自动化 Telnet 会话,执行命令
    的头像 发表于 05-04 14:27 6109次阅读