您當前的位置:首頁 > 歷史

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

作者:由 況澤靈 發表于 歷史時間:2021-12-25

1、外部控制HFSS有什麼好處?

作為一名天線工程師,HFSS是是工作中使用頻率非常高的模擬軟體,其效能強大,且簡單易用,並且支援用指令碼進行二次開發。

然而,在日常工作中,仍然有些繁瑣的操作,靠軟體本身難以滿足,比如畫多個波束疊加的方向圖,也就是一張圖裡面疊加多條方向圖曲線,需要不停地複製、貼上、修改饋電相位。。。既費時又容易出錯。雖然可以編寫指令碼來實現自動化操作,然而工程一換,條件一變,又得重新編寫,讓人非常煩惱

又如,希望透過演算法來最佳化天線圖形,需要控制HFSS畫圖——匯出結果——最佳化圖形,依靠HFSS自身指令碼則難以滿足。

於是,我就構思寫一個能從外部控制HFSS的小程式,具有簡單的介面,並能透過手動輸入引數,應對各種不同的工程檔案,而且還要能形成exe檔案,方便分享。

在網上查了一下,還真沒找到實現類似功能的介紹,好在自己有一定的程式設計基礎,於是花了兩天時間,自己動手造了一個。。。

在這個過程中,我總結主要有三個難點(坑):

如何用Python從外部控制HFSS;

如何編寫一個簡單的GUI(圖形介面);

如何在離線環境中,用pyinstaller打包出一個體積10M左右,可單獨執行的exe;

Ok,介紹完畢,

Let's go!

2、如何用Python控制HFSS

這部分內容相對簡單,我以前寫過一個系列文章,其中就用到了這個技術。

Python可採用win32com模組來控制HFSS,如果沒有win32com模組,則應調出命令提示符,輸入

pip install pywin32

,安裝該模組。

成功安裝後,新建HFSS_controller。py,輸入程式碼如下:

from

win32com

import

client

class

Handler

def

__init__

self

):

self

oAnsoftApp

=

client

Dispatch

‘AnsoftHfss。HfssScriptInterface’

self

oDesktop

=

self

oAnsoftApp

GetAppDesktop

()

self

oProject

=

self

oDesktop

GetActiveProject

()

self

oDesign

=

self

oProject

GetActiveDesign

()

self

prj_name

=

self

oProject

GetName

()

self

des_name

=

self

oDesign

GetName

()

接著開啟HFSS——新建工程,然後執行以下程式碼(例項化Handler),可見已能成功獲取當前開啟的工程(Project)和設計(Design)的名稱。

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

if __name__ == ‘__main__’:

h = Handler()

print(‘Prj: ’, h。prj_name)

print(‘Des: ’, h。des_name)

>>> Prj: Project1

>>> Des: HFSSDesign1

同時注意到,在HFSS同一個視窗中選取其他Project和Design時,再次執行程式,輸出結果也會發生相應變化,說明Python可有效控制HFSS。

注意:如果執行程式碼時沒有開啟HFSS,程式會自動開啟HFSS,並建立一個新的工程,此時,如果電腦開啟HFSS比較慢,會出現“假死”的情況。

3、如何用Tk寫一個簡單的GUI

Python的GUI實現途徑很多,常用的有Tkinter、PyQt、Kivy等,選擇Tkinter一是因為Python自帶,無需額外安裝,二是該例子很簡單,Tkinter效能足亦,三是後續打包相對方便。

然而,選擇Tkinter(簡稱Tk)的最主要缺點是:介面比較醜 。。。下面是其基本功能的實現程式碼。

from tkinter import *

from win32com import client

# HFSS控制器,程式碼見前,略

class Handler:

def __init__(self):

。。。

# 回撥函式:對應“連線”按鈕

def connect():

global h

h = Handler()

prj_name。set(h。prj_name)

des_name。set(h。des_name)

# GUI主介面設定

main = Tk()

main。geometry(‘300x200’)

main。title(‘HFSS控制器’)

# 1、控制按鈕設定

connect_btn = Button(main, text=‘連線’, command=connect)

connect_btn。grid(row=0, column=0)

# 2、顯示Project資訊

Label(main, text=‘工程名: ’)。grid(row=1, column=0)

prj_name = StringVar()

Label(main, textvariable=prj_name)。grid(row=1, column=1)

# 3、顯示Design資訊

Label(main, text=‘設計名: ’)。grid(row=2, column=0)

des_name = StringVar()

Label(main, textvariable=des_name)。grid(row=2, column=1)

# 執行(Loop)

main。mainloop()

執行以後,可以得到如下介面:

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

點選

連線

按鈕,可以在介面中獲取HFSS資訊(同樣注意,HFSS應是開啟狀態)。

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

當然,該段程式碼只是實現了最最基本的功能,此處可以盡情發揮腦洞,並結合HFSS的

程式碼幫助.pdf

(下圖位置開啟),開發控制HFSS的各種功能。

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

比如,加入瞭如下一段方法後,可以實現控制HFSS畫矩形的功能。

class Handler:

def __init__(self):

。。。 # 省略,詳細見前

# 新增方法:畫矩形

def draw_rec(self, x, y, z, name, axis=‘Z’):

self。oEditor = self。oDesign。SetActiveEditor(“3D Modeler”)

self。oEditor。CreateRectangle(

。。。 # 程式碼省略,見pdf中CreateRectangle

# 回撥函式:畫矩形,對應“畫矩形”按鈕

def draw_a_rectangle():

h。draw_rec(100, 50, 0, ‘a’)

# 畫矩形

rec_btn = Button(main, text=‘畫一個矩形’,

command=draw_a_rectangle)

rec_btn。grid(row=3, column=0)

然後即可實現在程式中控制HFSS畫一個矩形。

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

3、如何用pyinstaller打包成exe

如果你想將寫好的程式發給其他人使用,就需要將py檔案打包,例如在Windows電腦上執行,則需要打包成exe檔案。

這個時候,將遇到Python的一個大坑 !網上教程一般會推薦採用pyinstaller打包,然後折騰半天后,你會發現打包的exe體積接近200Mb,而且開啟速度巨慢無比!確實讓人沮喪,這還如何分享??

然而我沒有放棄,經過反覆研究後,我發現核心原因是不能在整合環境(比如Anaconda)中的python。exe作為直譯器來打包py,否則會載入太多無用的包,正確的操作步驟如下:

A、在官網下載純淨的python並安裝,新建一個資料夾,複製py檔案,然後在Pycharm中:File——Settings——Project: XX(XX為你的工程名)——Project Interpreter,在下拉選單中選擇Show All,點選+號,然後選擇純淨的python。exe,Pycharm會建立一個新的

虛擬環境

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

B、安裝必要的模組:pywin32和pyinstaller,有兩種安裝方式:一是在剛才的介面中點選+號安裝,二是在Pycharm整合的console中透過pip來安裝,如下圖(注意命令列前有venv標識,代表這是虛擬環境,這個時候安裝的包不會影響虛擬環境外的Python)

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

注意:如果和我一樣在一個不能聯網的工作環境(不要問我為什麼 ),則只能手動下載。whl或者。tar。gz檔案,然後透過pip進行安裝。

C、在命令列中輸入

pyinstaller -F -w HFSS_controller。py

順利的話則開始打包程式,完成後在當前目錄下的dist資料夾出現可執行檔案如下:

一文講透:如何用Python編寫帶介面的HFSS小工具,並打包成exe檔案

可見打包出來的exe只有10Mb左右,且執行順利,NICE!

4、總結

本文介紹了採用Python控制HFSS的思路,並透過Tk編寫了一個簡易的介面,然後透過Pyinstaller打包成exe,完成了一個可直接執行、帶介面的HFSS控制程式。大家可以按照這個思路,構建屬於自己的HFSS自動化小工具,並且分享給同事。

標簽: HFSS  self  name  main  __