Messklassen =========== Messklassen bündeln einen vollständigen fachlichen Ablauf: Gerätegraph, Messung, Autosave, Auswertung, Rückführbarkeit und Report. Die Skripte unter ``script`` bilden die bevorzugte Bedienebene und konfigurieren die jeweilige Klasse. .. list-table:: Verfügbare Messumgebungen :header-rows: 1 :widths: 18 28 30 24 * - Klasse - Aufgaben - Skripte - Vorbereitende Daten * - ``MSC`` - MainCal, EUTCal, Emission und Immunity in der Modenverwirbelungskammer - ``msc-maincal.py``, ``msc-eutcal.py``, ``msc-emission.py``, ``msc-immunity.py`` sowie Qt-Varianten - MainCal und anschließend EUTCal * - ``TEMCell`` - Verifikation, e0y, Emission und Immunity in TEM-/GTEM-Zellen - ``tem-verification.py``, ``tem-e0y.py``, ``tem-emission.py``, ``tem-immunity.py`` sowie Qt-Varianten - Geometrie und, je nach Aufgabe, Verifikation oder e0y * - ``AmplifierTest`` - Kleinsignalverstärkung, Kompressionspunkte und Schutzgrenzen - ``amplifier-test.py`` und ``amplifier-test-qt.py`` - Gerätekonfiguration und Korrekturpfade Konfigurationsketten -------------------- Die Messskripte akzeptieren beliebig viele Konfigurationsdateien. Sie werden von links nach rechts angewendet, sodass eine allgemeine Basiskonfiguration durch eine lokale Konfiguration ergänzt werden kann:: python script/tem-immunity.py \ /opt/mpylab/gtem/conf/immunity_conf.py \ local_conf.py Jede Datei ist ein Python-Modul und kann ``cdict``, ``update_config`` oder beides definieren. Ein ``cdict`` wird rekursiv mit der bis dahin aufgebauten Konfiguration zusammengeführt. Verschachtelte Dictionaries bleiben dabei erhalten; spätere Werte überschreiben gleichnamige Werte. Listen, Tupel und andere Werte werden dagegen vollständig ersetzt. Damit bleibt beispielsweise ein lokaler Geometrieparameter klein und eindeutig: .. code-block:: python cdict = { "log_filename": "local_immunity.log", "geometry": { "height": 0.75, }, } Für eine gezielte Änderung innerhalb einer Liste dient ``update_config(config)``. Der Hook läuft nach dem ``cdict`` derselben Datei, verändert die aufgebaute Konfiguration direkt und muss ``None`` zurückgeben: .. code-block:: python def update_config(config): parameters = config["measure_parameters"][0] parameters.update( { "dotfile": "immunity.dot", "SearchPaths": ["/opt/mpylab/gtem/conf"], "freqs": [150e6], } ) Ein implizites Zusammenführen von Listenelementen findet bewusst nicht statt. Soll etwa die vollständige Frequenzliste oder die Liste der Beschreibungen geändert werden, wird sie in ``cdict`` vollständig angegeben. Selektive Änderungen an ``measure_parameters`` oder ``evaluation_parameters`` sollten über ``update_config`` erfolgen. Text- und Qt-Skripte verwenden dieselbe Lade- und Überschreibungsreihenfolge. Konfigurationsdateien sind ausführbarer Python-Code und dürfen daher nur aus vertrauenswürdigen Quellen geladen werden. Vor einem Hardwarelauf ist immer die resultierende Gesamtkonfiguration im Preflight zu prüfen. Gemeinsamer Lebenszyklus ------------------------ Die Messklassen folgen grundsätzlich demselben Ablauf: #. Konfiguration laden und validieren. #. Messhistorie neu anlegen oder aus einem Pickle fortsetzen. #. Preflight und Geräteinitialisierung durchführen. #. Messung mit regelmäßigem Autosave ausführen. #. RF sicher abschalten und Geräte beenden. #. Messdaten auswerten. #. Historie und abgeleitete Dateien speichern. #. Optional einen modularen Report erzeugen. Pickle-Dateien sind dabei nicht nur ein Exportformat. Sie enthalten die Messhistorie und ermöglichen, spätere Messungen nachvollziehbar auf Kalibrierungen und vorherige Schritte zurückzuführen. Bedienebene und Programmierschnittstelle ---------------------------------------- Für reguläre Messungen sollten die Skripte verwendet werden. Direkte Aufrufe der Methoden von ``MSC``, ``TEMCell`` oder ``AmplifierTest`` sind vor allem für neue Anwendungen, Tests und spezialisierte Abläufe vorgesehen. .. toctree:: :maxdepth: 2 :caption: Messumgebungen msc tem amplifier