PyAEDT HFSS 天線/RF 仿真 Skill
這個 skill 解決什麼問題
把「agent 用 Python 驅動 Ansys HFSS 做天線/RF 仿真」這件事流程化。它給你三樣東西:
- 環境握手指引 —— 怎麼找到本機 AEDT、用 gRPC 還是 COM、避免授權衝突
- 標準天線仿真流水線 —— 建專案 → 建模 → 邊界/激勵 → 求解設定 → 掃頻 → 求解 → 後處理,每步給出可貼上改寫的程式碼骨架
- 三個高頻任務模板 —— S 參數提取、遠場方向圖、參數化掃頻,直接當起點改
它不替你設計天線(幾何、饋電方式、目標頻段是用戶/工程師的工作),只負責把「已知設計 → 跑出仿真結果」這條路走順。
何時觸發
- 用戶說「用 HFSS 仿真這個天線」、「提取 S 參數」、「掃頻 2-6 GHz」、「畫方向圖」、「看增益」
- 用戶給出了
.aedt/.aedtz/.hfss工程,要求自動跑/批次跑 - 用戶寫程式碼
import ansys.aedt.core/from pyaedt import Hfss - 用戶問「怎麼用 pyaedt 啟動 HFSS」、「為什麼連不上 AEDT」、「授權佔用怎麼辦」
標準工作流(一條主線)
無論具體任務是什麼,天線/RF 仿真都遵循下面這條主線。先沿這條線建立心智地圖,再跳到對應模板:
[1] 環境握手 → 確認 AEDT 版本 + Python 版本 + 通訊介面
見 references/environment-setup.md
不確定時先跑 scripts/check_env.py
[2] 建/打開工程 → Hfss(project=..., design=..., version=..., new_desktop=...)
關鍵:non_graphical=True 用於 CI/批次
new_desktop=False 複用已開的桌面
close_on_exit=True 跑完釋放授權
[3] 幾何建模 → hfss.modeler.create_box / create_cylinder / create_polyline ...
或用 hfss.modeler.import_3d_cad("xxx.step")
建議先定義變數(見下),再用變數驅動幾何
[4] 變數參數化 → hfss[" $patch_w "] = "30mm" (專案變數,帶 $)
hfss["patch_l"] = "32mm" (設計變數,不帶 $)
建議把所有可能掃的尺寸都建成變數
[5] 邊界與激勵 → 輻射邊界:hfss.assign_radiation_boundary_to_objects(["AirBox"])
埠: hfss.lumped_port / hfss.wave_port / hfss.create_floquet_port
接地: hfss.assign_perfecte_to_sheets(...)
[6] 求解設定 → setup = hfss.create_setup("Setup1", Frequency="3GHz",
MaximumPasses=15, MaxDeltaS=0.02)
sweep = setup.create_linear_count_sweep(
unit="GHz", start_frequency=2, stop_frequency=6,
num_of_freq_points=401, sweep_type="Interpolating")
[7] 求解 → hfss.analyze(setup="Setup1", cores=8) # 阻塞式
或 hfss.analyze_setup("Setup1")
[8] 後處理 → S 參數:hfss.post.get_solution_data("S(1,1)")
遠場: hfss.insert_infinite_sphere(...)
hfss.post.get_far_field_data(...)
匯出: data.export_data_to_csv("xxx.csv")
[9] 收尾 → hfss.save_project()
hfss.release_desktop(close_projects=False, close_desktop=True)
不釋放會一直佔用授權!
怎麼用本 skill
第一次接到天線/RF 仿真任務時
- 先讀
references/environment-setup.md—— 弄清用戶機器上 AEDT 是哪個版本、Python 是哪個版本、要不要裝 pyaedt。如果不清楚,執行scripts/check_env.py。 - 再讀
references/antenna-workflow.md—— 這裡是上面那條主線的「放大版」,每一步給出 API 用法和常用參數。 - 遇到報錯前先掃一眼
references/common-pitfalls.md—— 80% 的「連不上 / 跑不動 / 結果不對」都列在這裡。
寫程式碼時
去 templates/ 挑最貼近任務的那個模板,整段複製後改:
| 任務類型 | 模板 |
|---|---|
| 單個工程,單/多頻點 S11/S21 掃頻提取 | templates/sparam_extraction.py |
| 遠場方向圖、增益、輻射效率、3D 方向圖 | templates/far_field_pattern.py |
| 幾何尺寸/材料參數掃描,提取多組結果 | templates/parametric_sweep.py |
模板都是可獨立執行的腳本,頂部統一暴露 PROJECT_PATH / DESIGN_NAME / FREQ_* 等參數,先改頂部,再改中間幾何/邊界部分。
關鍵原則
- 先小後大:第一次跑任何腳本,把網格
MaximumPasses設成 3-5,掃頻點設成 21,先跑通流水線再加密。一次到位會浪費幾小時。 - 永遠 release_desktop:不釋放授權 = 下次啟動報錯。腳本結尾用
try/finally包住。 - non_graphical 預設 True:除非要看幾何/除錯,否則不開 GUI,省記憶體且能並行。
- 路徑用絕對路徑:相對路徑在 AEDT 處理程序裡不一定指向你以為的目錄。
- 變數優先:任何一個「可能要改」的尺寸,先建成變數,別寫死字面量,否則後面參數掃描要重寫。
安裝 pyaedt(如果還沒裝)
# 推薦組合(2025 R2 / 2026 R1)
pip install pyaedt
# 老 AEDT 用舊 pyaedt(具體對照見 references/environment-setup.md)
pip install pyaedt==0.17.5 # AEDT 2025 R1
pip install pyaedt==0.13.3 # AEDT 2024 R2
不要做的事
- 不要直接 import pyaedt —— 1.0 起官方推薦
import ansys.aedt.core as pyaedt或from ansys.aedt.core import Hfss。老程式碼from pyaedt import Hfss仍可用但已 deprecated。 - 不要在 GUI 已經開著 AEDT 的情況下用
new_desktop=True—— 會另開一個處理程序,授權翻倍。要複用已開的桌面用new_desktop=False。 - 不要在 Mac 上期待原生 AEDT —— AEDT 只跑 Windows/Linux。Mac 上要嘛遠端到 Windows,要嘛用 PyEDB 處理 EDB 而非 HFSS。
- 不要省略
hfss.save_project()—— release 之前必須 save,否則下次打開找不到改動。 - 不要用
MaxDeltaS太鬆(>0.05)就交付結果 —— 收斂不夠看到的 S11 是噪音不是物理。
參考檔案清單
pyaedt-hfss-antenna/
├── SKILL.md ← 你正在讀這個
├── references/
│ ├── environment-setup.md ← 版本對照、安裝、gRPC/COM、授權
│ ├── antenna-workflow.md ← 主線工作流的 API 詳解
│ └── common-pitfalls.md ← 高頻報錯與處置
├── templates/
│ ├── sparam_extraction.py ← S 參數掃頻提取
│ ├── far_field_pattern.py ← 遠場方向圖/增益
│ └── parametric_sweep.py ← 變數參數掃描
└── scripts/
└── check_env.py ← 探測本機 AEDT/Python/pyaedt
讀取順序建議:本文 → environment-setup → 模板頂部說明 → antenna-workflow(用到哪步看哪步)→ 出問題查 common-pitfalls。