Hallo liebe Forenmitglieder,
ich habe eine Frage, habe ein LabView-Programm, dass in einen case andauernd false "reingibt".
Eigentlich dürfte kein Signal nach dem case rauskommen.
Tut es aber.
False soll nicht durchlassen (siehe Bild 1) und true soll durchlassen (siehe Bild 2).
Da die false-Konstante "F" anliegt, kann das Programm aber gar nichts durchlassen nach dem case (eigentlich), aber es wird ignoriert, das Signal läuft einfach durch.
Warum funktioniert der case hier nicht?
Danke.
Hallo,
setz dir dochmal eine Sonde in die beiden cases. Dann wirst du feststellen, dass schon der richtige case von LV gewählt wird. Ich denke, dein Problem liegt woanders. Dazu müsstest du aber mal zeigen, welche Signale da jeweils herauskommen.
Dass die case-Struktur kaputt ist, wage ich zu bezweifeln!
Gruß, Marko
Bei dem Datenwirrwarr, den Du hier hast blickt ja keiner durch. Ersetze mal die dynamischen Daten durch richtige Dateitypen (sprich ersetze den DAQ-Assistent und die Express-VIs).
Bei Dir gibt's ja zig Typumwandlungen (Coercion Dots), dass Dir da sonst keiner weiterhelfen kann (allein schon beim Case kommt einmal ein Double "raus" und einmal dynamische Daten).
Gruß Markus
Du gibst doch ein "Null" aus, auch das ist ein Signal.
Was genau die ganzen Express-VIs machen, das lässt sich auf Grund des Screenshots nicht genau sagen.
Wenn du willst, dass im False-Case keine weitere Datenverarbeitung stattfindet, dann ist die Lösung einfach: Case-Struktur größer machen...
Gruß, Jens
(07.08.2013 17:07 )TestingForLife schrieb: [ -> ]Warum funktioniert der case hier nicht?
Der Case an sich funktioniert schon. Du musst einfach 'alles' was nicht ausgeführt werden soll bei 'False', in den Case ziehen!
Weiter empfehle ich dir noch folgende Links zur Einarbeitung:
(20.01.2012 11:02 )NWOmason schrieb: [ -> ] (20.01.2012 09:32 )prinz3nroll3 schrieb: [ -> ]aber leider bin ich ein blutiger Anfänger.
Dann würde ich zum Durcharbeiten folgender Tutorials raten:
Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466
Introduction to NI LabVIEW - Learn LabVIEW Basics
http://www.ni.com/gettingstarted/labviewbasics/
Beste Grüße,
NWO
Hallo TFL,
allgemeine Antwort: THINK DATAFLOW!
Du hast programmiert:
Code:
IF Condition THEN
5 Signale durchlassen
ELSE
eine einzige Null ausgeben (<- !!!)
ENDIF
Schon hier sollte dir ein Problem auffallen: unterschiedliche Anzahl von Daten - begünstigt durch unüberlegten Einsatz des DDT.
Eigentlich brauchst du aber:
Code:
IF Condition THEN
Signal(e) bearbeiten, anzeigen, speichern
ELSE
do nothing
ENDIF
Wie gesagt: THINK DATAFLOW!
Und wie auch schon gesagt: DDT/ExpressVIs tragen nicht zur Übersichtlichkeit bei...
Wie du die Signale umsortierst, zeugt von überbordender Kreativität.
Sich klar auszudrücken scheint nicht zu den Stärken von Testxxx zu gehören. Falls er aber das gemeint hat:
Zitat:Eigentlich brauchst du aber:
Code:
IF Condition THEN
Signal(e) bearbeiten, anzeigen, speichern
ELSE
do nothing
ENDIF
dann wäre die Antwort: Das geht nicht mit der Casestruktur allein, dazu braucht man auch noch Shift-Register, Rückkopplungsknoten oder lokale Variable. Beispiel:
[
attachment=45808]
und in Textsprache übersetzt würde das heißen:
IF Condition THEN
Y = true
ELSE
Y = Y
ENDIF
Hallo Lucki,
ich verstehe gerade nicht, was du ausdrücken willst, aber könnte man die Casestruktur in deinem Snippet nicht durch ein wesentlich übersichtlicheres OR-Gatter ersetzen?
(08.08.2013 08:56 )GerdW schrieb: [ -> ]Hallo Lucki,
ich verstehe gerade nicht, was du ausdrücken willst, aber könnte man die Casestruktur in deinem Snippet nicht durch ein wesentlich übersichtlicheres OR-Gatter ersetzen?
Natürlich ginge das, aber bei der Frage ging es um die Case-Struktur. Das Beispiel ist ansonsten sinnfrei, und daran würde auch eine anderer Code nichts ändern.
Also noch mal:
Der true-False Case-Struktur ist ja immer von der Form
If true then A else B;
Aber was tut man, wenn im "else" case nichts passieren soll?
Ich kann mich schwach erinnern, dass ich da auch mal Schwierigkeiten hatte das Problem zu lösen.
Die beiden Lösungmöglichkeiten sind:
a) Die Casestruktur darf entweder gar keinen Ausgang haben (Beipiele: Der Variablen wird in einem Case ein Wert über eine Lokale Variable zugewiesen, oder es wird ein SubVI ausgeführt, welches keine Ausgänge hat.)
b) Wenn sie aber einen Ausgang hat, dann muß dafür gesorgt werden, dass dem Ausgang im "else"-Case der alte Wert zugewiesen wird, das ist dann genau so als wäre nichts passiert. Und dazu diente das Beispiel.