摘要:本節(jié)主要介紹主調(diào)模塊,以及GUI模塊的編寫(xiě)。
主調(diào)模塊
終于到了主調(diào)模塊了,之前的章節(jié)主要介紹了參數(shù)計(jì)算,波導(dǎo)查值,以及HFSS封裝和調(diào)用等,所有準(zhǔn)備工作已就緒,只差一個(gè)“主體”將這些模塊調(diào)用起來(lái),實(shí)現(xiàn)這個(gè)功能的便是主調(diào)模塊main.py。
這一步的編寫(xiě)相對(duì)比較簡(jiǎn)單,按我個(gè)人習(xí)慣,還是采用了面向?qū)ο蟮?a href="http://www.asorrir.com/v/tag/1315/" target="_blank">編程思路,寫(xiě)一個(gè)叫Horn的對(duì)象,首先通過(guò)對(duì)象的初始化功能將輸入?yún)?shù)導(dǎo)入進(jìn)來(lái),然后調(diào)用“波導(dǎo)查值”模塊確定波導(dǎo)尺寸、“參數(shù)計(jì)算”模塊計(jì)算喇叭尺寸,再調(diào)用“HFSS調(diào)用模塊”,通過(guò)規(guī)定一系列建模動(dòng)作(如第三節(jié)所述),完成HFSS建模和運(yùn)算。
示意代碼如下,如果對(duì)于建模的動(dòng)作有不太明白了,請(qǐng)看上一篇文章的講解。
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()
# 設(shè)置變量
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(‘a(chǎn)b’, 75/self.freq)
# 波導(dǎo)內(nèi)腔
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_’)
# 喇叭內(nèi)腔
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_’)
# 波導(dǎo)外形
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_’)
# 布爾運(yùn)算生成喇叭,然后設(shè)為PEC
h.unite(‘horn’, ‘wg’)
h.unite(‘horn_in’, ‘wg_in’)
h.set_material(‘horn’)
# 生成區(qū)域并賦予輻射邊界
h.create_region(‘a(chǎn)b’)
h.assign_radiation_region()
h.insert_radiation_setup()
# 設(shè)置端口
h.create_centered_rectangle(‘wg_a’, ‘wg_b’, 0, ‘port’)
h.assign_port(‘port’)
h.insert_analysis_setup(self.freq)
# 創(chuàng)建報(bào)告
h.create_reports()
# 保存工程并運(yùn)行
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()
以上代碼可能沒(méi)有太多需要解釋的,可以看到的是,定義好HFSS接口后,調(diào)用過(guò)程就很輕松愉快了。
圖形交互界面模塊
開(kāi)篇提到過(guò),Python實(shí)現(xiàn)圖形界面的方法有很多,除了Tkinter屬于自帶包外,其他著名的包如PyQt、wxPython等都需要額外安裝,考慮到我們的小程序功能單一,界面也不需要太花哨,采用Python自帶的Tkinter是一種較為經(jīng)濟(jì)快捷的選擇。
由于第一次寫(xiě)界面,代碼質(zhì)量可能有點(diǎn)差,實(shí)現(xiàn)效果也不怎么樣,好在我們要做的東西功能簡(jiǎn)單,不會(huì)影響使用。(自我安慰。。。)
不廢話,直接上代碼。
from tkinter import Tk, Label, StringVar, Entry, Button, Frame, TOP
import main
root = Tk()
root.title(‘最佳喇叭計(jì)算 by kuangzl’)
root.geometry(‘420x280’)
root.resizable(width=False, height=False)
tip = Label(root, text=‘由波束寬度計(jì)算喇叭尺寸,
使得該尺寸下增益最大化’, 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=‘波導(dǎo)寬(mm):’).grid(row=0, column=2)
Label(frm, text=‘波導(dǎo)窄(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=‘喇叭長(zhǎng)(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()
這段代碼實(shí)現(xiàn)的效果是這樣的:
小結(jié)
至此,該小程序已經(jīng)完成了九成以上,作為自用已經(jīng)毫無(wú)問(wèn)題了!但如果還想將程序分享出來(lái),則須打包成可執(zhí)行文件(如exe),這一步貌似很簡(jiǎn)單,卻有不少的坑,我將在下一節(jié)詳細(xì)介紹。
本篇即到此為止,下一篇將會(huì)是終篇,謝謝各位觀看(*^_^*)!
編輯:jq
-
封裝
+關(guān)注
關(guān)注
128文章
8459瀏覽量
144720 -
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70217 -
hfss
+關(guān)注
關(guān)注
32文章
167瀏覽量
50791 -
GUI
+關(guān)注
關(guān)注
3文章
674瀏覽量
40713
原文標(biāo)題:用Python實(shí)現(xiàn)喇叭天線設(shè)計(jì)小工具(四)
文章出處:【微信號(hào):mwrfnet,微信公眾號(hào):微波射頻網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
藍(lán)牙低功耗模塊的原理和應(yīng)用介紹
國(guó)產(chǎn)SiC碳化硅功率模塊全面取代進(jìn)口IGBT模塊的必然性

博世GTM IP模塊架構(gòu)介紹

儲(chǔ)能變流器PCS中碳化硅功率模塊全面取代IGBT模塊
數(shù)據(jù)I/O模塊的概念、特點(diǎn)以及作用
SFP模塊的監(jiān)控與故障排除技巧
智慧光迅VOLT光模塊介紹

40G光模塊介紹及常見(jiàn)問(wèn)題探討

EtherCAT總線IO模塊功能及安裝介紹

插片式遠(yuǎn)程 IO模塊:熱電阻溫度采集模塊與PLC配置案例

AC/DC電源模塊的原理、特點(diǎn)以及其在實(shí)際應(yīng)用中的重要性

評(píng)論