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!
Bin noch ziemlich neu dabei was das LabView-Programmieren betrifft. Vlt. könnt ihr mir ja weiterhelfen...
Folgendes Problem:
Ich möchte eine Grafik (Rechteck) in einem bestimmten Bereich steuern können. Das ganze soll über boolesche Taster erfolgen: "Links", "Rechts", "Hoch", "Runter". So, da fängt das Problem auch schon an... Ich habe bis jetzt noch nicht verstanden, wie man ganz Simpel bei 4 Bedingungen eine Auswahl treffen kann. Erst habe ich es mit Enum probiert, bin dann aber daran gescheitert, die booleschen Taster mit dem Enum in Verbindung zu bringen. Sprich, wie wandle ich True/False in Zahlenwerte um, um das jeweilige "Case" von Enum anzusteuern? [ich möchte nicht den Case via Enum auswählen, sondern das ganze soll nur über die 4 Taster laufen].
Ich habe jetzt eine alternative Lösung gefunden: Ereignisstruktur. Ob das jetzt die ultimative Lösung ist, weiß ich auch noch nicht so ganz. Auf jedenfall kann ich bis jetzt schon mal das Rechteck in die 4 "Grenzecken" bewegen. Jetzt soll das ganze quasi als Ablauf zu sehen sein. Sprich, ich drücke Taster "Rechts" => das Rechteck verfährt bis zur rechten Grenze. So soll das auch mit den anderen Tastern funktionieren (NUR solange man den Taster drückt).
Meine Versuche das ganze mit einer While-Schleife zu lösen (Abbruch-Bedingung über "Neuer Wert" der Ereignisstruktur) scheiterte. Er führt die While-Schleife unendlich aus und das Rechteck fährt ins Nirvana.
Das gleiche Problem bei der For-Schleife. Auch wenn ich als maximalen Schleifendurchlauf 400 einstelle, fährt er bis zur rechten Grenze, hört aber nicht auf zu verfahren, wenn ich den Taster loslasse. Und genau das soll er aber tun...
Habt ihr vlt. einen Tipp für mich?`
danke schonmal im voraus und einen angenehmen Abend
Anzeige
17.02.2014, 07:04 (Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2014 07:04 von Clyde.)
Dein Ansatz mit der Eventstruktur ist meiner Meinung nach der beste. Ich kann dein VI leider nicht öffnen, da ich lediglich LabVIEW 2012 habe - das Problem dürfte der ein oder andere hier auch haben.
Im Anhang findest du ein VI, welches ein Control auf Tastendruck verschiebt. Das dürfte dir schon einmal weiterhelfen. Die Abfrage, ob das Objekt aus deinem definierten Bereich rausfährt, musst du noch dazu stricken
Ich habe ein wenig weiter gearbeitet an meinem Labview Projekt. Ich beschreibe mal kurz mein aktuelles Problemchen:
Ich habe ein VI erstellt, welches ein Rechteck via Taster verfahren lässt (in einer vorgegebenen Umgebung). Nun wollte ich verhindern, dass das Rechteck in den Endlagen genauso schnell verfährt, wie auf der restlichen Strecke. Das ganze habe ich über ein SubVI realisiert. Momentan übergebe ich die Position des Ring (Top + Left) und überprüfe dann im SubVI, ob sich das Rechteck in einer Endlage befindet.
Gibt es eine Möglichkeit die Position des Ring komplett, sprich als Bundle zu übergeben? Momentan übergebe ich die Werte einzeln und habe im SubVI 2 Anzeigeelemente... Das möchte ich gerne umgehen. Hättet ihr einen Tipp?`
(24.02.2014 19:41 )LabViewUser2014 schrieb: Gibt es eine Möglichkeit die Position des Ring komplett, sprich als Bundle zu übergeben? Momentan übergebe ich die Werte einzeln und habe im SubVI 2 Anzeigeelemente... Das möchte ich gerne umgehen. Hättet ihr einen Tipp?`
auch dir einen guten Abend,
ich kann dein VI zwar im Moment nicht öffnen, dein Problem hört sich aber so an, als ob es mit der Funktion Bundle aus der Clusterpalette lösbar wäre. Wenn du zukunftssicher sein möchtest, erstellst du dir auch gleich noch eine TypDef. für dieses Cluster und kannst es dir im Sub-VI (entweder per Referenz oder direkt übergeben) wieder auseinanderpflücken mit unbundle.
Danke erstmal für deine Antwort. Ich fasse deinen Tipp jetzt so auf:
- Die Positionen des Ring (Top + Left) zu einem Cluster bündeln und an das SubVI übergeben
- Dort wieder "auseinander ziehen) und verwenden
Was mir gerade nicht einleuchtet:
Wenn ich mir von der Ring-"Variable" einen Eigenschaftsknoten mit der Position erstelle, warum kann ich diesen nicht übergeben? (Funktionierte bei mir bis jetzt nicht).
Ich habe das Programm nochmal als 2011'er Version angehangen
(24.02.2014 20:53 )LabViewUser2014 schrieb: Was mir gerade nicht einleuchtet:
Wenn ich mir von der Ring-"Variable" einen Eigenschaftsknoten mit der Position erstelle, warum kann ich diesen nicht übergeben? (Funktionierte bei mir bis jetzt nicht).
Hallo Niko,
wenn du die Eigenschaft Position wählst, musst du dort Alle Elemente wählen. Von diesem Eigenschaftsknoten kannst du dann mit der rechteen Maus ein Bedienelement erstellen und dieses in dein Sub-VI ziehen und dort als Eingang verknüpfen.
So z.B. kommst du zu den von Jens bereitgestellten VIs.
Spricht etwas dagegen (vom Programmierstil her), das ganze mit einer Referenz zu lösen? Ich habe es mal ausprobiert, kommt ja im Endeffekt auf das Selbe hinaus wie mit dem Cluster. Mir hat bis jetzt nur das Verständnis gefehlt, wie man einfach Werte bzw. Variablen an SubVIs übergibt
Ich bin ein bisschen weiter gekommen mit meinem LabView-Projekt. Jetzt stehe ich mal wieder vor einem neuem Problem.
Sowas wie Speicherschaltungen (RS-Flip-Flop) scheint es ja nicht baufertig in LabView zu geben... Ich habe hier zwar ein Beispiel gefunden, nur habe ich jetzt folgendes Problem:
Wenn ich den RS-Flip-Flop als SUBVI mehrmals ausführe, dann setzt er mir zu Beginn alle Ausgänge aus True, obwohl sie FALSE sein sollten. Vlt. habe ich noch ein Logik-Problem, aber im Moment komme ich da nicht weiter (Ich habe auch schon probiert, für jede SUBVI Instanz einen eigenen Speicherbereich zuzuweisen, ohne Erfolg). Was ich im Endeffekt bezwecken möchte:
Ich möchte jetzt einen Automatikmodus implementieren und habe überlegt, wie man dies am besten realisieren könnte. Dazu habe ich zu erst Endlagen in jede Ecke des Verfahrweges gebastelt und wollte diese als Boolsche Bedingung für die Flip-Flops nehmen. Klappt bis dato nicht. Ich arbeite noch dran...
Was ich jetzt mal erfragen wollte: Gibt es in LabView eine simple Lösung, um Speicherschaltungen zu realisieren (mit Rücksetzbedingung)? Irgendwie bin ich grad zu doof dafür oder vlt. gelingt mir das Umdenken zum LabView Konzept noch nicht.