Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich habe ein Problem mit verschachtelten Struckturen. Innerhalb einer Case-Strucktur befinden sich weitere Case- und While-Struckturen.
Damit möchte ich an einem Versuchsstand zwischen den Zuständen "Messen" ("M") und "Aufzeichnen" ("A") unterscheiden.
Dabei soll "M" auch ohne "A" möglich sein, "A" jedoch nicht ohne "M".
Sobald "A" betätigt wird und "M" aktiv ist soll nach dem Pfad der Aufzeichnungsdatei gefragt werden.
Leider wird der "A"-Case aber nur aktiv, wenn die "M"-Schleife einmal gestoppt und wieder gestartet wird.
Ich habe das Problem aus dem komplexen Steuerprogramm in ein einfaches VI übertragen und dabei die Random-Number-Funktion
als Indikator einer laufenden Schleife eingesetzt.
Ich hoffe ihr findet euch durchs Programm und könnt mir weiterhelfen.
Sollte es irgendwie einfacher gehen, bin ich auch gerne bereit von meinem Case-While Fällen abzuweichen.
wie wäre es mit einer State-Machine (gibt es in den NI-Beispielen)? Ein Case fängt per Event-STruktur die Knöpfe ab und startet dann den Messvorgang. Wenn der Aufzeichnen-Knopf gedrückt wird, fragst Du im Event ggf. noch ab, ob es ein Speicherverzeichnis gibt (alternativ: Gleich in einer Initialisierungsroutine abfragen, dann hat man auch keinen zeitintensiven Code in der Event-STruktur). Falls nein, erst das festlegen, dann am Ende des entsprechenden Aufzeichnen-Cases in den Messcase springen.
Noch eleganter wird es ggf. mit einer State-Machine als Consumer mit einer Producer-Consumer-Struktur (heißt in den Beispielen glaube ich Event-driven im Vergleich zu Data-driven), da kann man in der Queue gleich festlegen, dass beide Cases nacheinander abgefragt werden sollen...
@ RMR, genau das ist mein Problem. Natürlich macht es keinen Sinn sich bei einem Versuch schon von Anfang an für das Aufzeichnen entscheiden zu müssen.
Mein Ziel ist es zu Messen und wenn die Werte gut aussehen zusätzlich aufzuzeichnen.
@ ChrissyPu, ich mag elegante Lösungen und bin gerade dabei mich durch die NI-Beispiele zu graben
Beste Grüße, Hannes
30.08.2010, 11:34 (Dieser Beitrag wurde zuletzt bearbeitet: 30.08.2010 11:42 von jg.)
Da gäbe es noch die Möglichkeit mit 2 parallelen WHILE. Ich war so frei das ChissyPu VI zu verschandeln und 2 parallele WHILE daraus zu machen. Jetzt kannst du natürlich auch AUFZEICHEN ohne zu MESSEN, aber das kannst du ja selbst noch verriegeln wenn du magst.
Für den Moment sind solche schnellen und unkomplizierten Lösungen einfach super!
Ist ja fast schon peinlich da nicht selber drauf gekommen zu sein
Und für die Zukunft werde ich mir aber diese Event-Struckturen im Hinterkopf behalten..
@RMR Dein Beispiel ist alles andere als vollständig - Was ist mit der Kommunikation der beiden Schleife? So trivial ist das nicht. Das was du da "misst" ist nicht das was du speicherst.
' schrieb:@RMR Dein Beispiel ist alles andere als vollständig - Was ist mit der Kommunikation der beiden Schleife? So trivial ist das nicht. Das was du da "misst" ist nicht das was du speicherst.
Hallo Dimitri,
Das war mir durchaus bewusst, daß die beiden While nicht miteinander kommunizieren. War auch nur als "Quick n Dirty" gedacht. Der OP kann ja "Lokale Variablen":rolleyes: zum speichern verwenden, dann ist die "Kommunikation" gegeben.
Die State gefällt mir, auch wenn ich mir gerade nicht vorstellen kann wie ich zB damit kontinuierlich über einen längeren Zeitraum aufzeichen kann.
Hoffe das liegt nicht an der frühen Stunde.^_^
Bei meinen Anwendungen muss ich immer mal wieder die Daten auf Platte wegschreiben da die Versuchslaufzeiten oft über mehrere Tage oder Wochen dauern.
Mri ist es daher zu riskant die Daten in einem Array im RAM stehen zu haben.