Eine Strichzeichnung eines Kryostaten, dessen äußeres Gefäß eine innere Kammer umschließt, mit einer weinrot markierten Probe in der Mitte einer Magnetbohrung. Leiterbahnen führen vom Kryostaten zu fünf übereinander angeordneten Gerätesymbolen rechts: einem Bildschirm, einem Messgerät mit Zeiger, einem Oszilloskop, einer Steuereinheit und einem Messinstrument.

Instrumentensoftware · seit 2024

CryoSoft

Kryogene Messungen, die 30 bis 40 Stunden ohne Aufsicht laufen, innerhalb von Sicherheitsgrenzen, die die Software selbst durchsetzt.

Kurz gesagt

Der LabVIEW-Messcode des Labors war eine flache Folge fest einprogrammierter Befehle: Geräteparameter waren über den ganzen Code verstreut, der Austausch eines Geräts bedeutete stundenlanges Umschreiben, und die Metadaten, mit denen sich ein Messartefakt zurückverfolgen lässt, wurden nicht gespeichert. Messläufe über Nacht von 30 bis 40 Stunden hatten kein Sicherheitsnetz in der Software, sodass nichts einen unsicheren Übergang von Magnet oder Temperatur aufgehalten hätte.

Rolle
Alleiniger Entwickler
Zeitraum
seit 2024
PythonPyQt6pyqtgraphPyVISAPyMeasureh5pynumpyruamel.yamlpytestpytest-qtmypyHDF5Zustandsautomaten

Zum Repository →

Mein Mess-Stack seit 2024, hinter den Arbeiten zum Magnetowiderstand und zum Exchange Bias, und die Grundlage, die I2AS verallgemeinert.

Eine hellgraue Strichzeichnung auf dunklem Grund: ein Kryostat, dessen äußeres Gefäß eine innere Kammer umschließt, mit einer weinrot markierten Probe in der Mitte einer Magnetbohrung. Leiterbahnen führen vom Kryostaten zu fünf übereinander angeordneten Gerätesymbolen rechts: einem Bildschirm, einem Messgerät mit Zeiger, einem Oszilloskop, einer Steuereinheit und einem Messinstrument. Ein Programm zwischen dem Kryostaten und jedem Gerät um ihn herum.

Wie

  • Den Stack in sechs Schichten aufgeteilt: rohe Treiber, typisierte virtuelle Instrumente, eine YAML-Registry des Messplatzes (ruamel.yaml), ein Orchestrator, Messabläufe und die GUI, jede nur von der darunterliegenden abhängig, sodass ein Gerätetausch eine Änderung der Konfiguration ist. Jeder echte Treiber (Oxford Mercury iPS, ITC 503, ILM 200, Lakeshore 335, Keithley 6221 und 2182A, über PyVISA und PyMeasure) hat einen simulierten Zwilling zum Testen ohne Gerät.
  • Die Sicherheit in einen Zustandsautomaten für den Kryostaten gelegt, getaktet von einem einzigen Qt-QTimer. Prüfungen bei jedem Takt erzwingen EMERGENCY bei niedrigem Heliumstand oder einem veralteten Sensorwert, und Rampenziele werden über eine RampableVI-Schnittstelle validiert, die einen CryoSoftSafetyError auslöst.
  • Die GUI mit PyQt6 und pyqtgraph per Introspektion erzeugt, aus Methoden, die als monitored oder control markiert sind, mit Pythons inspect und typing, sodass die Bedienelemente eines neuen Geräts ohne GUI-Code erscheinen.
  • Eine HDF5-Datei pro Messung geschrieben, mit h5py und numpy: Metadaten, Datenpunkte mit Zeitstempel und ein vollständiges Abbild aller Geräte für jeden Sweep-Punkt, genug für die Ursachenanalyse eines Artefakts. Bei einem Abbruch werden die Arrays sauber gekürzt.
  • Getestet und typisiert gehalten, mit pytest, pytest-qt und mypy.

Neuere Arbeit hat einen Konfigurationseditor, eine Sitzungsverwaltung und eine Agenten-Umgebung für Inbetriebnahme, neue Treiber und Fehlersuche hinzugefügt. Ich erweitere das System so, dass Software-Agenten über MCP damit arbeiten können.