Doku LabVIEW-Programm FluxControl

FluxControl-tiny-mods

Geschrieben von Mathias Lindner 2015. Änderungen von Henrik Haftmann, September 2016.

Änderungen

  • Alle Fehlergeneratoren in allen Sub-VIs mit Aufrufpfad zur Lokalisierungsmöglichkeit
  • VI-Terminierung per Fensterschließknopf (= Ereignisstruktur)
  • Pfade sowie Schriftgröße für Pfade (kleiner, damit man sieht, dass sie lang sind)
  • Bedingtes SPCM-Start.vi im Case "Measure", nicht bei fehlendem Trigger, dadurch Fehlermeldung weg
  • Diverse Tunnel mit Default (kosmetisch)
  • aux_buildXYGraph.vi: Durchgehende Daten entfernt (kein Datenmodifizierer!)
  • Abbruch bei fehlendem Trigger mit „Wiederholen“ (automatsich nach 5 Sekunden) und „Abbrechen“, nicht „Wiederholen“ und „Beenden“
  • Signaldarstellungen mit sofort wirksamen Ein/Aus-Schaltern (ähnlich LV2015+), Buttons mit OFF-Text
  • "Switch_Full_Traces" und "Help" in Ereignisstruktur gesetzt (wo's hingehört)
  • Zustände "Switch_Full_Traces" und "Help" entfernt, Wait→Idle und auf Platz 0 (für später: Default-Case 0)
  • Hilfe-Dialog darf mit Klick oben rechts beendet werden (= Ereignisstruktur), Aufruf der CHM-Datei mit Extra-Knopf eingebunden
  • Alle versteckten Steuerelemente außer XY-Diagramm „Single_Traces_full“ sichtbar gemacht (für Klarheit!) im Freibereich des Tabs „Parametrize“. Diese dienen schlicht als lokale Variablen. Wenn man sie dereinst nicht mehr benötigt, ist es besser, sie außerhalb des Fensterbereiches zu platzieren statt sie zu verstecken, um das Programmverständnis nicht allzu sehr in Mitleidenschaft zu ziehen.
  • Enabled-Status über Referenz-Array statt Namen schalten (bei Idle) — reaktivere GUI
  • Temperaturanzeigen im Statusbereich als double, nicht als int

Bearbeitungshinweis

Achtung! Niemals gleichnamige VI-Dateien aus verschiedenen Ordnern zugleich öffnen!! (Also nicht aus FluxControl-tiny-mods und FluxControl-backup zugleich!) Das danach entstehende Chaos ist kaum mehr zu entflechten.

Die Bezeichner („Label“) der Steuerelemente darf nicht geändert werden, da die Bezeichner an einigen tiefen Stellen hartkodiert sind (= schlechter Programmierstil). Bei Änderung oder Übersetzung ist „Caption“ zu aktivieren.

Außerdem können die Typdefinitionen nicht auf „strikt“ gestellt werden, sonst geht der tiefe Komponentenzugriff beim Laden/Speichern in die Hose (ebenfalls schlecht).

Datendurchlauf

Die Messwerte (4 AI-Kanäle) und „Sec. Voltage Setpoint“ durchlaufen folgende VIs (Case „Measure_Check“ im Fall „Single Test“):
  1. aux_data_conditioning.vi
    1. aux_data_conversion.vi
      • Skalierung (= Multiplikation mit Werten aus Rig.Conversion), außer Uset
      • Aus „Sec. Voltage Setpoint“ wird irgendwie ein periodisches Signal neu gebaut (unklar!)
    2. aux_data_add_time.vi
      • Fügt den 4+1 Signalen jeweils eine Zeitachse (als Spalte 0) hinzu. In Millisekunden über die Dauer von "Rig.AO.Test Time". Da die beiden Signalgruppen verschiedene Längen (= Anzahl Abtastwerte) haben, ergibt sich so ein unterschiedliches Δt der beiden Gruppen. Ansonsten ist alles äquidistant und man könnte mit dem LabVIEW-Datentyp „Signal“ viel komfortabler arbeiten.
    3. aux_data_trim.vi
      • “trim switch on effects and cut end to get full periods” (für alle 4+1 Signale)
      • calc_sine_phase_matlab.vi
        • “Calc polarization from field strength based on static magnetization curve”
    4. aux_data_stray_correction.vi
      • Nur für den Fall “stray correction in software”, nur die vier AI-Signale:
      • aux_lowpass.vi
        • IIR-Tiefpassfilter, hier mit 1. Ordnung, ohne Fensterung, True für “Zero Phase with IC”
    5. aux_data_filter.vi
      • Filtern der 4 AI-Signale mit den "Filter"-Parametern (Struktur des Hauptfensters), nur wenn Filter.FFT = false und entsprechender Filter-Schalter (pro Signal) ein:
      • aux_lowpass.vi
        • IIR-Tiefpassfilter, hier mit 1. Ordnung, ohne Fensterung
    6. aux_data_freq_correction.vi
      • Filtern der 4 AI-Signale mit den "Filter"-Parametern (Struktur des Hauptfensters), nur wenn Filter.FFT = true und entsprechender Filter-Schalter (pro Signal) ein, mittels Matlab freq_correction()
    7. aux_data_trim.vi
      • “trim switch on effects and cut end to get full periods” (für alle 4+1 Signale), noch einmal mit “one period trimmed automatically”
      • calc_sine_phase_matlab.vi
        • “Calc polarization from field strength based on static magnetization curve”
  2. aux_calc_results.vi (nur für die vier AI-Kanäle)
    • calc_formfactor.vi
    • calc_dynamic_hysteresis.vi, generiert H-J-Array, Tests folgen:
      1. aux_review_fieldstrength_lf_offset.vi
      2. aux_review_ranges.vi
        • aux_adjust_ranges.vi
          • Verändert etwas in der Benutzeroberfläche
      3. aux_review_polarization_overlap.vi
        • aux_sort2Darray.vi
        • aux_sortUpDown.vi
          • aux_detectUpDown.vi
            • aux_detect_amplitudes.vi
              • “detect indexes of local amplitudes of periodic signals with appox equal amplitude highs including boundaries (local amplitude at start/end)”
    • calc_amplifier_characteristics
      • “create amp characteristics”


Doku LabVIEW-Programm FluxControl

Geschrieben von Mathias Lindner. Er ist wohl ein Enlisch-Fan(atiker), jemand mit riesigem Bildschirm und ein Freund von Double-Arrays. Kennt sich in LabVIEW einigermaßen aus, aber einige VIs erscheinen wie Fremdkörper (nämlich jene die mit Referenzen arbeiten), also irgendwo geklaut.

Änderungen von Henrik Haftmann.

So sah das Hauptfenster aus
Hysterese-Modell (hm…)

Datenfluss und beteiligte VIs

Dateneingabe

Durch viele Blöcke zieht sich ein zweidimensionales Double-Array hindurch, welches in Spalte 0 Zeitstempel und in den Spalten 1..4 die Messwerte enthält.

Datenausgabe

  • aux_enable_system.vi: MAX-Task NI_USB_6351/port1/line0:1 oder NI_USB_6351/port0/line1:0

Sonstiges

  • Der Autor Mathias Lindner hatte offenbar zwei Bildschirme, durch die Dokumentation sind jetzt alle Fenster auf einem Schirm übereinander
  • Keine strikten Strukturen
  • aux_init_calc_dac.vi, aux_data_conditioning.vi ruft Matlab auf.
  • Dort wo's sinnvoll ist hätte man auch mit LabVIEW-Einheiten arbeiten können. Gerade bei der Magnetflussberechnung und ähnlichen Dingen
  • Umbau auf Waveform dringend! Erfordert lebendes Objekt, um keine Fehler einzubauen.
Möglicherweise stand dem Autor keine Professional-Version von LabVIEW zur Verfügung, weil keine Ereignisstruktur … Oder hat er das falsche Buch gelesen?

Umbau

  • Globale Verweise (Referenzen) auf Strukturen und Buttons im Haupt-VI
  • Sub-VIs in FluxControl.llb gepackt
  • Viele Sub-VIs nun mit Zugriff auf globale Variablen statt (Unmengen von) Eingängen; dadurch dass alles Referenzen sind kann jedes Sub-VI Werte verändern, die sofort im Hauptprogramm sichtbar werden
  • Strikte Typdefinitionen
  • Einheiten (hier wirklich praktisch einsetzbar!!)
  • Waveform und Waveform-Grafen (= Abschaffung der XY-Grafen)
  • H-J-Array nun Array aus Clustern (u.a. wegen der Einheiten)
  • Ereignis-Behandlungsstruktur, Knöpfe weitestgehend mit Single-Push-Ereignis
  • Zustands-Enum mit Idle==0 (Programm-Default), einige Zustände gelöscht
  • Zweite Zustandsvariable „After Measure“
  • Fehlermeldungen mit Aufrufpfad