LabVIEWForum.de
Programmablauf - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Programmablauf (/Thread-Programmablauf--24139)



Programmablauf - creo_123 - 24.05.2013 09:58

Hallo,

ich hätte noch eine allgemeine Frage zu meinem Programmablauf..

Ich habe einen Schalter, um den eigentlichen Mess-Case zu starten. Darin sind verschiedene Einzelmessungen
(im Beispiel 2), die auch nochmal über einen Schieberegler aktiviert bzw. deaktiviert werden können, um nur die
benötigten Messungen durchzuführen. Die Messwerte speichere ich dann in Arrays, mit denen ich dann in einem
späteren Auswerte-Teil des Programms irgendwelche Operationen ausführe.

Momentan gehe ich über lokale Variablen vom Mess- in den Auswerte-Teil. Da dort auch While-Schleifen zum Einsatz
kommen, aktiviere ich den Auswerte-Teil über einen zusätzlichen Case, der ein True erhält, wenn der Mess-Case beendet ist.
So habe ich trotz lokalen Variablen einen definierten Ablauf meines Programms und meine While-Schleife läuft nicht unnötig.


Meine Frage ist jetzt, ob es da bessere oder elegantere Lösungen gibt. Ich habe noch nicht so viel Erfahrung mit Labview, um
das selbst beurteilen zu können und wäre deshalb für ein paar Meinungen oder Ratschläge dankbar.


RE: Programmablauf - GerdW - 24.05.2013 10:17

Hallo creo,

dein Beispiel-VI könnte man so vereinfachen, dass man ohne Sequenz und lokale Variablen auskommt:
[attachment=44752]
Anmerkungen:
- Deine Berechnungs-While-Loop testete auf i == Anzahl Arrayelement: Wenn TRUE, bist du schon "aus dem Array heraus"! Nimm bei bekannter Elementeanzahl immer eine FOR-Loop! Dies gilt auch für die Messschleifen...
- Für den Fall "Messung"=False hast du keine Wartezeit und das VI verbrät unnötig CPU-Zeit...

Tipps:
- Denke über den Einsatz einer Statemachine nach (Idle, Messung, Rechnung).
- Controls haben Labels und Captions (Namen und Untertitel). Der Name sollte eineindeutig und selbsterklärend sein, das Caption ist für den User da. Deine "Namen" "ja ... nein" gehören eindeutig ins Caption!
Edit:
"ja" und "nein" kann man bei den Schaltern natürlich auch in den boolschen Text packen...


RE: Programmablauf - Lucki - 24.05.2013 13:32

Die ideale Struktur für solche variablen Abläufe ist die Queued State Machine Architecture. Kannst Dich da ja mal zumindest etwas einlesen.


RE: Programmablauf - creo_123 - 27.05.2013 10:33

Danke für die Tipps..

@Gerd: wenn ich das richtig sehe, sind bei deinem VI die Ausgänge der Case-Strukturen noch weiß und das heißt doch dann,
dass die im anderen Case nicht belegt sind. Ich habe da immer eine Konstante angeschlossen, um das Programm
ausführen zu können. Das Problem ist nur, dass meine Messergebnisse dann dadurch überschrieben werden, sobald der
Case wieder wechselt. Deshalb bin ich irgendwann zu den lokalen Variablen gekommen..
Was wäre denn eine sinnvolle Wartezeit für den False-Case?

@Lucki: ok, werde mich da mal einlesen. Was aber bei meinem Beispiel-Vi jetzt nicht deutlich geworden ist, ist dass die Messungen
nicht parallel laufen, sie müssen sogar nacheinander geschehen.. ist das dann immer noch der richtige Ansatz?


RE: Programmablauf - GerdW - 27.05.2013 11:43

Hallo creo,

Zitat:Was wäre denn eine sinnvolle Wartezeit für den False-Case?
Das hängt davon ab, wie schnell du mit der Maus klicken kannst. Üblicherweise sind 100ms-Wartezeiten schnell genug...

Zitat:wenn ich das richtig sehe, sind bei deinem VI die Ausgänge der Case-Strukturen noch weiß
Das siehst du NICHT richtig: die sind jetzt "Default if unwired"...
Wenn deine Messung nicht aufgerufen wird, wird auch die Berechnung nicht aufgerufen. Also ist es dann auch egal, was in den Messdaten-Drähten für Werte ankommen...