PyAEDT HFSS Antennen-/HF-Simulation Skill
Was dieses Skill löst
Es standardisiert den Prozess, bei dem ein Agent mit Python Ansys HFSS für Antennen-/HF-Simulationen steuert. Es bietet drei Dinge:
- Umgebungs-Handshake – Wie findet man AEDT lokal? Nutzt man gRPC oder COM? Wie vermeidet man Lizenzkonflikte?
- Standard-Antennensimulations-Pipeline – Projekt erstellen → Modellieren → Randbedingungen/Anregung → Lösungs-Setup → Sweep → Lösen → Nachbearbeitung, jeder Schritt liefert kopierbaren Code.
- Drei häufige Aufgaben-Templates – S-Parameter-Extraktion, Fernfelddiagramm, parametrischer Sweep, direkt als Startpunkt nutzbar.
Es designt keine Antenne (Geometrie, Speisung, Zielfrequenz sind Aufgabe des Users/Ingenieurs), sondern sorgt nur dafür, dass der Weg von „bekanntes Design → Simulationsergebnis“ reibungslos funktioniert.
Wann auslösen
- Der User sagt „Simuliere diese Antenne mit HFSS“, „Extrahiere S-Parameter“, „Sweep 2-6 GHz“, „Zeichne Richtdiagramm“, „Zeige Gewinn“
- Der User gibt ein
.aedt/.aedtz/.hfss-Projekt und bittet um automatisches/Batch-Simulieren - Der User schreibt Code
import ansys.aedt.core/from pyaedt import Hfss - Der User fragt „Wie starte ich HFSS mit pyaedt?“, „Warum verbindet es nicht zu AEDT?“, „Was tun bei Lizenzkonflikt?“
Standard-Workflow (eine Hauptlinie)
Egal welche spezifische Aufgabe, Antennen-/HF-Simulation folgt immer dieser Hauptlinie. Baue zuerst eine mentale Karte entlang dieser Linie auf, springe dann zum passenden Template:
[1] Umgebungs-Handshake → AEDT-Version + Python-Version + Kommunikationsschnittstelle bestätigen
Siehe references/environment-setup.md
Bei Unsicherheit zuerst scripts/check_env.py ausführen
[2] Projekt erstellen/öffnen → Hfss(project=..., design=..., version=..., new_desktop=...)
Wichtig: non_graphical=True für CI/Batch
new_desktop=False, um bereits geöffneten Desktop wiederzuverwenden
close_on_exit=True, um Lizenz nach Lauf freizugeben
[3] Geometrie modellieren → hfss.modeler.create_box / create_cylinder / create_polyline ...
Oder hfss.modeler.import_3d_cad("xxx.step")
Empfehlung: zuerst Variablen definieren (siehe unten), dann Geometrie damit steuern
[4] Variablen parametrisieren → hfss[" $patch_w "] = "30mm" (Projektvariable, mit $)
hfss["patch_l"] = "32mm" (Designvariable, ohne $)
Empfehlung: Alle möglicherweise zu sweependen Maße als Variable anlegen
[5] Randbedingungen & Anregung → Strahlungsrand: hfss.assign_radiation_boundary_to_objects(["AirBox"])
Port: hfss.lumped_port / hfss.wave_port / hfss.create_floquet_port
Masse: hfss.assign_perfecte_to_sheets(...)
[6] Lösungs-Setup → 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] Lösen → hfss.analyze(setup="Setup1", cores=8) # blockierend
Oder hfss.analyze_setup("Setup1")
[8] Nachbearbeitung → S-Parameter: hfss.post.get_solution_data("S(1,1)")
Fernfeld: hfss.insert_infinite_sphere(...)
hfss.post.get_far_field_data(...)
Export: data.export_data_to_csv("xxx.csv")
[9] Abschluss → hfss.save_project()
hfss.release_desktop(close_projects=False, close_desktop=True)
Wenn nicht freigegeben, bleibt die Lizenz dauerhaft belegt!
Wie dieses Skill verwenden
Beim ersten Antennen-/HF-Simulationsauftrag
- Zuerst
references/environment-setup.mdlesen – Herausfinden, welche AEDT-Version, Python-Version und ob pyaedt installiert ist. Falls unklar,scripts/check_env.pyausführen. - Dann
references/antenna-workflow.mdlesen – Das ist die „vergrößerte“ Version der obigen Hauptlinie, mit API-Nutzung und häufigen Parametern für jeden Schritt. - Vor Fehlern kurz in
references/common-pitfalls.mdschauen – 80% der „Verbindet nicht / Läuft nicht / Ergebnis falsch“-Probleme sind dort aufgelistet.
Beim Schreiben von Code
Wähle aus templates/ das passendste Template, kopiere den gesamten Block und passe ihn an:
| Aufgabentyp | Template |
|---|---|
| Einzelprojekt, Einzel-/Multifrequenz-S11/S21 Sweep | templates/sparam_extraction.py |
| Fernfelddiagramm, Gewinn, Strahlungseffizienz, 3D-Diagramm | templates/far_field_pattern.py |
| Geometrie-/Materialparameterscan, mehrere Ergebnisse | templates/parametric_sweep.py |
Die Templates sind eigenständig ausführbare Skripte, die oben einheitlich PROJECT_PATH / DESIGN_NAME / FREQ_* usw. exponieren. Zuerst die Kopfzeilen anpassen, dann den Geometrie-/Randbedingungsteil in der Mitte.
Wichtige Prinzipien
- Erst klein, dann groß: Bei jedem ersten Lauf eines Skripts setze
MaximumPassesauf 3-5 und Sweep-Punkte auf 21. Erstmal die Pipeline durchlaufen lassen, dann verfeinern. Einmaliger Durchlauf mit voller Genauigkeit kostet Stunden. - Immer
release_desktop: Nicht freigegebene Lizenz = Fehler beim nächsten Start. Umschließe das Skriptende mittry/finally. non_graphicalstandardmäßig True: Nur wenn Geometrie/Debugging nötig ist, GUI öffnen. Spart Speicher und ermöglicht Parallelisierung.- Absolute Pfade verwenden: Relative Pfade zeigen im AEDT-Prozess möglicherweise nicht auf das erwartete Verzeichnis.
- Variablen bevorzugen: Jedes Maß, das „später geändert werden könnte“, zuerst als Variable anlegen. Nicht als Literal hartcodieren, sonst muss der parametrische Sweep umgeschrieben werden.
pyaedt installieren (falls noch nicht geschehen)
# Empfohlene Kombination (2025 R2 / 2026 R1)
pip install pyaedt
# Altes AEDT mit altem pyaedt (genaue Zuordnung siehe references/environment-setup.md)
pip install pyaedt==0.17.5 # AEDT 2025 R1
pip install pyaedt==0.13.3 # AEDT 2024 R2
Nicht tun
- Nicht direkt
import pyaedt– Seit Version 1.0 offiziell empfohlen:import ansys.aedt.core as pyaedtoderfrom ansys.aedt.core import Hfss. Alter Codefrom pyaedt import Hfssfunktioniert noch, ist aber deprecated. - Nicht
new_desktop=Trueverwenden, wenn GUI bereits AEDT geöffnet hat – Es öffnet einen weiteren Prozess und verdoppelt die Lizenz. Mitnew_desktop=Falseden bereits geöffneten Desktop wiederverwenden. - Nicht natives AEDT auf Mac erwarten – AEDT läuft nur auf Windows/Linux. Auf Mac entweder per Remote auf Windows oder PyEDB für EDB statt HFSS verwenden.
- Nicht
hfss.save_project()weglassen – Vorreleasemuss gespeichert werden, sonst sind Änderungen beim nächsten Öffnen nicht sichtbar. - Nicht mit zu lockerem
MaxDeltaS(>0.05) Ergebnisse ausliefern – Unzureichende Konvergenz zeigt S11 als Rauschen, nicht als Physik.
Referenzdateien-Liste
pyaedt-hfss-antenna/
├── SKILL.md ← Das liest du gerade
├── references/
│ ├── environment-setup.md ← Versionszuordnung, Installation, gRPC/COM, Lizenz
│ ├── antenna-workflow.md ← API-Details der Hauptworkflow-Linie
│ └── common-pitfalls.md ← Häufige Fehler und Behebung
├── templates/
│ ├── sparam_extraction.py ← S-Parameter-Sweep-Extraktion
│ ├── far_field_pattern.py ← Fernfelddiagramm/Gewinn
│ └── parametric_sweep.py ← Variablen-Parametrischer Sweep
└── scripts/
└── check_env.py ← Erkennt lokales AEDT/Python/pyaedt
Empfohlene Lesereihenfolge: Dieses Dokument → environment-setup.md → Kopfzeilen der Templates → antenna-workflow.md (bei Bedarf entsprechend des Schrittes) → Bei Fehlern common-pitfalls.md.