![]() |
Mehrere Cases verwenden - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Mehrere Cases verwenden (/Thread-Mehrere-Cases-verwenden) |
Mehrere Cases verwenden - dimitri84 - 25.06.2010 08:17 Ich habe noch nie was mit serieller Kommunikation gemacht, trotzdem hier mein Vorschlag: Für den Datentyp der Queue würde ich einen Cluster aus Enum (Status für Consunmer Loop) und String (Daten) nehmen. In der Producer Loop machst du 3 States: "Init" (VISA konfigurieren), "VISA Read", "VISA Close". In der Consumer Loop bringst du den Rest unter: "Init" (vielleicht deine Berechnungen für f0 und df, und deine x-Achsen Maximas setzen), "Darstellung" (hier wird die Queue gelesen und die ankommenden Daten verarbeitet), ... Hier kannst du mal ein bisschen gucken. (Kein besonders gutes Beispiel aber das Prinzip sollte klar werden.) Mehrere Cases verwenden - Yantit - 25.06.2010 08:51 OT @dimitri84: Wie hast du in einem Jahr eigentlich so viel LV-KnowHow draufgeschafft? Irgendwelche Tipps? ![]() Mehrere Cases verwenden - dimitri84 - 25.06.2010 08:58 ' schrieb:OT @dimitri84: Wie hast du in einem Jahr eigentlich so viel LV-KnowHow draufgeschafft? Irgendwelche Tipps?Ich habe hier 3 Monitore und viel Zeit. 2 für LV und 1 für's Forum. Mehrere Cases verwenden - GerdW - 25.06.2010 09:06 Hallo Dimitri, anscheinend hast du einen "verständigen" Arbeitgeber und keine Deadlines ![]() Mehrere Cases verwenden - Yantit - 25.06.2010 09:11 ' schrieb:Hallo zusammen, Daran bin ich momentan tatsächlich dran, ob mans glaubt oder nicht, ein Großteil der Sub-VIs wurde schon "verschönt":) Mehrere Cases verwenden - dimitri84 - 25.06.2010 09:14 ' schrieb:Hallo Dimitri,1-Jahres-Absolventenpraktikum. Ich bin hier um was zu lernen. Nebenbei fallen ein paar Programme ab die das Institut schon seit vielen Jahren nötig hatte. Selbst findest du aber auch die ein oder andere Minute, Gerd ![]() Mehrere Cases verwenden - Yantit - 28.06.2010 14:30 Hallo! Ich habe es jetzt soweit geschafft, mein Programm in eine Art FSM umzubauen. Funktioniert auch eigentlich ganz toll, nur habe ich jetzt noch ein Problem: Wenn ich auf dem FP einen der Werte ändere und auf übernehmen klicke, hängt sich das Programm auf mit der Fehlermeldung in den Sub-VIs im Case "Parameter": 'Die gegebene Session oder Objektreferenz ist ungültig". Jetzt kann ich mir eigentlich nicht erklären, woran das jetzt liegen sollte, denn das Sub-VI ist ja das gleiche wie in der Initialisierung und da funktioniert es ja auch. Die Session sollte eigentlich auch keinen Timeout oder ähnliches liefern, da ja vom Gerät permanent Werte abgefragt werden. Kann mir vielleicht noch jemand helfen? [attachment=27431] ![]() Mehrere Cases verwenden - GerdW - 28.06.2010 14:49 Hallo Yantit, du hast mehrere Fehler in deinen VIs: - bei diversen Case-Strukturen hast du undefinierte Ausgänge ("Use default if unwired") - das kann tötlich enden bei einer Statemachine! - du verwendest zu viele Sequenzstrukturen - die sind unnötig! - du hast einiges an RubeGoldberg drin (warum machst du einen Vergleich eines boolschen Wertes mit TRUE???) - du hast für meinen Geschmack zu viele lokale Variablen - die zugehörigen Terminals gehören außerhalb der Casestruktur hin, evtl. mit einem Shiftregister verbunden und schon brauchst du keine locals mehr... Ich hab schon mal angefangen zu editieren, schau's dir an. Insbesondere die diversen Case-Strukturen und deren Ausgänge! ![]() Mehrere Cases verwenden - Yantit - 28.06.2010 15:20 Zitat:Hallo Yantit, Verbindet man die Ein- und Ausgänge dann einfach durch, falls diese in einem Case nicht gebraucht werden oder gibt es eine andere, bessere Lösung? Zitat:- du verwendest zu viele Sequenzstrukturen - die sind unnötig! Ok, ich werde die Sequenzen löschen. Aber ich weiß immer noch nicht genau, wann es sinnvoll ist, eine Sequenz zu benutzen und wann nicht...? Zitat:- du hast einiges an RubeGoldberg drin (warum machst du einen Vergleich eines boolschen Wertes mit TRUE???)Das ist wahr, ist mir gar nicht aufgefallen, dass das total sinnlos ist ![]() Zitat:- du hast für meinen Geschmack zu viele lokale Variablen - die zugehörigen Terminals gehören außerhalb der Casestruktur hin, evtl. mit einem Shiftregister verbunden und schon brauchst du keine locals mehr...Ich fand, dass die Variablen eigentlich ein bisschen mehr Übersicht hineinbringen, da dann nicht noch mehr Leitungen in einen Case hineinführen und die Variablen auch noch "schön" benannt sind. Ich habe zwar schon gelesen, dass man Variablen eher meiden sollte, aber irgendwie konnte ich keine Begründung finden. Was ist denn das Hauptproblem damit? Zitat:Ich hab schon mal angefangen zu editieren, schau's dir an. Insbesondere die diversen Case-Strukturen und deren Ausgänge! Danke & Gruß Mehrere Cases verwenden - GerdW - 28.06.2010 15:25 Hallo Yantit, "oder gibt es eine andere, bessere Lösung?" Wieviel einfacher als einen einfachen Draht brauchst du es noch? "wann es sinnvoll ist, eine Sequenz zu benutzen" Nie. Mach dir lieber ein subVI mit ErrorIO-Anschlüssen... "Was ist denn das Hauptproblem damit?" RaceConditions. Zusätzlicher Speicherbedarf. Unübersichtlichkeit. "da dann nicht noch mehr Leitungen in einen Case hineinführen und die Variablen auch noch "schön" benannt sind." In einem Cluster bündeln: nur eine Leitung. Clusterelemente ordentlich benennen (und typedef anlegen): immer ordentlich benannt dank (Un)BundleByName (oder InPlace-Struktur). Edit: Hab mal 2 Cluster eingebaut, einen für die Eingaben, einen für deine Rechenwerte. Diese Rechenwerte waren typisch textbasiertes Programmieren: versteckte Anzeigeelemente, nur damit man einen "Variablennamen" zur Verfügung hat. Für solche Zwecke reicht immer ein Shiftregister! ![]() |