Hallo Zusammen,
habe mal wieder eine Frage
:
Ich schreibe ein Programm um analoge Sauerstoffsensoren zu kalibrieren. Es handelt sich dabei um eine 2 PunktKalibrierung, bei der einmal bei 100% Sauerstoff und einmal bei 21% Sauerstoff gemessen wird. Aus den beiden Punkten wird dann die Steigung und der Achsenabschnitt berechnet. Diese beiden Werte sollten dann als Konstante in ein SubVI: analog-digital-Wandler eingebracht werden.
Bei diesem habe ich aber 2 Eingänge:Steigung und Achsenabschnitt.
Wenn ich das SubVi a/d-Wandler zu einem späteren Zeitpunkt benutzte sind die Eingänge ja unbesetzt.
Ich wollte lokale Variablen zum verbinden nutzten, habe aber in der Beschreibung von NI (
http://zone.ni.com/reference/de-XX/help/...nd_global/ ) gelesen, dass diese umsichtig verwendet werden müssen.
Ich hätte pro Sensor 2 lokale Variable also 6 insgesamt... das ist doch ziemlich viel... gibt es eine andere Möglichkeit?
LG mikadm
Hallo mikadm,
Zitat:Diese beiden Werte sollten dann als Konstante in ein SubVI: analog-digital-Wandler eingebracht werden.
Wird diese Kalibriermessung zum Start jeder Messung durchgeführt? Oder erfolgt diese "Kalibrierung" nur ein einziges mal und du willst diese Werte dann die nächsten Tage/Wochen/Monate benutzen?
Zitat:Ich wollte lokale Variablen zum verbinden nutzten,
Erst willst du "Konstanten" erstellen, dann zeigst du Controls in deinem Bild und jetzt willst du auch noch lokale Variablen dieser Controls verwenden?
Wie passt das alles zusammen?
Zitat:Ich hätte pro Sensor 2 lokale Variable also 6 insgesamt... das ist doch ziemlich viel... gibt es eine andere Möglichkeit?
Je nach Antwort oben:
- Schieberegister
- ein 1D-Array mit allen Parametern
- ein 1D-Array of Cluster of [a, b], d.h. ein Paar Skalierungsfaktoren pro Sensor/Kanal
- ein 2D-Array mit 2 Columns (zwei Parameter pro Kanal)
- ein 2D-Array mit mehr als 2 Columns, weil du vorausschauend eine Mehrpunkt-Kalibrierung mit höherer Polynom-Ordnung vorbereitest und deshalb gleich mehr Skalierungsparameter vorsiehst…
- …
Zum Bild: anstatt mehrere Frames aneinanderzureihen solltest du an eine Statemachine denken!
Wenn Kalibrierung und Messung zeitlich unabhängig sind, d.h., die Messung beliebig später erfolgen kann, bleibt nur eine persistente Speicherung z.B. in einer Datei, aus der dein analog-digital-Wandler die Werte liest.
Das hat auch den Vorteil, dass deine Kalibrierung dokumentiert ist, wenn du zusätzlich Dinge wie Datum, Prüfer oder SerienNr des Sensors mit in die Datei schreibst.
Und etwas weiter gedacht, kann dein Wandler dann auch feststellen, wenn die Kalibrierung zu lange her ist und eine neue empfehlen.
Die Kalibriermessung muss vor jeder Messung durchgeführt werden. Die Controls habe ich einfach vorläufig eingefügt um zu zeigen wo welche ein/Ausgänge sind.
Was spricht denn gegen die Flache Sequenzstruktur?
Bei der Statemachine habe ich das Problem, dass ich Tunnel habe, die nicht bei jedem Zustand verbunden werden können und dann kann man das Programm nicht starten.
Hallo mikadm,
Zitat:Die Kalibriermessung muss vor jeder Messung durchgeführt werden. Die Controls habe ich einfach vorläufig eingefügt um zu zeigen wo welche ein/Ausgänge sind.
Dann hast du also ein VI, welches diese Kalibriermessung durchführt und die Faktoren ausspuckt und ein VI, welches diese Werte dann benutzt.
Dazwischen sollte man Drähte verwenden…
Zitat:Was spricht denn gegen die Flache Sequenzstruktur?
Unübersichtlich. Verhindert parallele Abarbeitung. Lässt sich durch THINK DATAFLOW! ersetzen…
Zitat:Bei der Statemachine habe ich das Problem, dass ich Tunnel habe, die nicht bei jedem Zustand verbunden werden können und dann kann man das Programm nicht starten.
Man kann Tunnel immer verdrahten. Muss man eben nur machen!
(Hast du an Schieberegister in deiner Statemachine gedacht?)
Tipp: seit etlichen LabVIEW-Versionen kann man Tunnel "connecten" und danach automatisch verdrahten lassen…
Ich hab mich falsch ausgedrückt...sorry!
Vor jeder Messung wird gefragt ( mit Eingabeaufforderung für Benutzer) ob die Kalibration durchgeführt werden soll. Wenn nicht, dann sollen die Werte von der vorherigen Kalibration genommen werden. Wie kann ich das realisieren?
Zur Statemachine: Wenn ich das oben gezeigte SubVI als Statemachine programmiere, dann habe ich ja in der zweiten und dritten Sequenz keine Tunnel.
Bei der Statemachine werden da aber die Tunnel aus der ersten Sequenz angezeigt und LabVIEW fordert, dass diese belegt werden. Wie soll ich die dann verbinden ?
LG mikadm
(26.08.2020 13:31 )mikadm schrieb: [ -> ]Vor jeder Messung wird gefragt ( mit Eingabeaufforderung für Benutzer) ob die Kalibration durchgeführt werden soll. Wenn nicht, dann sollen die Werte von der vorherigen Kalibration genommen werden.
Und was wenn das Programm beendet und neugestartet wird?
a) Nach Neustart muss vor der ersten Messung immer eine Kalibrierung durchgeführt werden. Dann brauchst du dir die Kalibrierwerte nur im Programm merken.
b) Auch nach Neustart sollen die zu letzt ermittelten Kalibrierwerte benutzt werden. Dann bleibt nur die Speicherung in einer Datei.
(26.08.2020 13:31 )mikadm schrieb: [ -> ]Wenn ich das oben gezeigte SubVI als Statemachine programmiere, dann habe ich ja in der zweiten und dritten Sequenz keine Tunnel.
Tunnel = Wert in jeder Iteration gleich, entspricht dem Wert vor der Schleife
Schieberegister = Wert aus der vorherigen Iteration
[
attachment=61170]
Das ist eine einfache StateMachine mit einem Enum für die Zustände. Das Enum sollte ein TypDef sein, habe ich hier der Einfachheit halber weggelassen. Das Bild ist übrigens ein
Snippet, das kannst du herunterladen und in LabVIEW als Code einfügen.
danke th13 für deine Antwort.
So wie du bei a) beschrieben hast soll es sein.
Wie setzte ich das um ?
Hallo mikadm,
Zitat:So wie du bei a) beschrieben hast soll es sein. Wie setzte ich das um ?
Erst die Kalibriermessung durchführen, dann die Kalibrierwerte in einem Schieberegister merken.
(Und alles natürlich in einer Statemachine abarbeiten.)
(27.08.2020 09:35 )mikadm schrieb: [ -> ]Wie setzte ich das um ?
Überleg dir eine Oberfläche für dein Programm: Hast du ein Hauptfenster, aus dem heraus man Messung und Kalibrierung starten kann, oder soll immer das Messfenster angezeigt werden und bei Bedarf die Kalibrierung, sollen Messung und Kalibrierung in der selben Oberfläche erfolgen. Einfach mit ein paar Skizzen auf nem leeren Blatt anfangen.
Überlege dir eine Struktur, mit der du das umsetzt: StateMachine ist da schon ein richtiger Ansatz. Mal dir die Zustände auf und von welchem du wohin kommst.
Überlege dir Speicherstrukturen für die Messwerte, die Kalibrierwerte - wer darf was ändern.
In deinem StartVI werkelt die StateMachine als Zentrale und ruft je nach State SubVIs auf, die Messung und Kalibrierung übernehmen. Wenn du ein Hauptfenster haben willst, zeigst du das FrontPanel des Start-VIs an, sonst nicht.
Die Daten kannst du in einer oder mehreren funktionalen globalen Variablen (FGV) oder wie in meinem StateMachine-Bsp als Cluster in einem Schieberegister verwalten.
Wenn du ein für den produktiven Einsatz gedachtes Messprogramm mit Kalibriermodus schreiben willst, kommst du nicht umhin, dich mit LabVIEW zu beschäftigen.
Edit: Hm, Gerd war schneller und kompakter...