Architektur =========== Die Schichten einer typischen Anwendung sind: .. graphviz:: digraph architecture { rankdir=TB; node [shape=box]; "Skript oder GUI" -> "Measure-Unterklasse"; "Measure-Unterklasse" -> "MGraph"; "MGraph" -> "Gerätetreiber"; "Gerätetreiber" -> "Kommunikationsklasse"; "Measure-Unterklasse" -> "Autosave und Historie"; "Measure-Unterklasse" -> "EUT-Monitor"; "Measure-Unterklasse" -> "Report"; "SCUQ" -> "Measure-Unterklasse" [style=dashed]; "SCUQ" -> "MGraph" [style=dashed]; "SCUQ" -> "Gerätetreiber" [style=dashed]; } Skript oder GUI --------------- Die Bedienebene lädt die Konfiguration, erzeugt oder restauriert die Messklasse und startet Messung und Auswertung. Qt-Anwendungen verschieben langlaufende Hardwarearbeit in Worker-Threads. ``Measure`` und Messklassen --------------------------- ``Measure`` stellt gemeinsame Infrastruktur für Logging, Benutzerinteraktion, Autosave, Pickle-Historie, Geräteinitialisierung und sicheres Beenden bereit. ``MSC``, ``TEMCell`` und ``AmplifierTest`` ergänzen den fachlichen Ablauf. ``MGraph`` ---------- ``MGraph`` liest die DOT-Topologie, wertet Conditions mit explizitem Kontext aus, erzeugt Geräteinstanzen und berechnet Pfadkorrekturen. Leveling und Verstärkerschutz greifen ebenfalls auf den Messgraphen zurück. Gerätetreiber und Kommunikation ------------------------------- Basistreiber definieren eine gemeinsame API für eine Geräteklasse. Gerätespezifische Treiber bilden diese API auf SCPI oder proprietäre Befehle ab. Kommunikationsklassen kapseln GPIB, Serial, Prologix und andere Transporte. SCUQ ---- SCUQ transportiert Nennwert, Einheit, Unsicherheit und Korrelation durch die gesamte Berechnung. Konvertierungen zwischen linearen und logarithmischen Größen werden zentral über mpylab-Hilfsfunktionen durchgeführt.