LabVIEWForum.de - Bewegungssimulation

LabVIEWForum.de

Normale Version: Bewegungssimulation
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich habe folgendes Szenario:

Ein Tankinhalt soll gefüllt werden und auf dieser Oberfläche (auf dem "Wasser") befindet sich ein Grafik-Ring als Objekt.
Die Funktionen seperat funktionieren. Ich habe nur das Problem, dass ich den Grafik-Ring nicht synchron mit dem "Wasser"
bewegen lassen kann, d.h. der Grafik-Ring soll sich auf dem Tanktinhalt mit noch oben bewegen.
Ich habe schon sämtliche Synchronisierungen probiert und mir ist aufgefallen, dass der Ring viel zu langsam gegenüber
dem steigenden Tank ist.

Wie kann ich es lösen?
(15.07.2014 16:47 )Tisinho schrieb: [ -> ]Wie kann ich es lösen?

Hallo Tisinho,

ich fürchte, da musst du uns mit einem kleinen VI erfreuen!
GGf. führst du diesen Ring über einen TO einer Eventstruktur, der zu groß gestellt ist oder in einer Parallelschleife mit zu großer Wartezeit, oder was auch immer.
Ein VI würde das Raten beenden.


Gruß, Marko
Ich hoffe der Screenshot reicht aus.
Das VI darf ich nicht hochladen, da es geschützte Bilder enthält.
Hallo Tisinho,

Zitat:Ich hoffe der Screenshot reicht aus.
Nein: Du scheinst da zwar eine Anzeige zu verschieben, aber man sieht am Screenshot leider nicht, ob diese Verschiebung (in Pixelkoordinaten) überhaupt zu deiner Tank-Anzeige passt…

Zitat:dass der Ring viel zu langsam gegenüber dem steigenden Tank ist.
Das könnte u.a. an den unterschiedlichen Taktraten deiner "synchronen" Schleifen liegen…

Das, was du da programmiert hast, könnte man ganz sicher viel einfacher realisieren! Wozu 5 Schleifen mit 3 Sequenzstrukturen, 3 verschiedenen Taktraten und einer Occurance, wenn man all das auch innerhalb einer Schleife erledigen könnte?
Beispiel:
[attachment=50274]

Dein "Stop"-Button funktioniert nicht korrekt! THINK DATAFLOW!
Es bleibt ein Ratespiel.
Welches Objekt ist der Grafikring? "Bewegung nach links"?
Wenn dem so ist, dann funktioniert dein Versuch nur, wenn sich die Tank-Füllstandslinie genau um 1 Pixel "erhöht", wenn du den Wert um 1 änderst. Das wäre jetzt schon ein großer Zufall.

Besser und Variabler:
Aus Größe des Tanks in Pixels, Lage des Tanks im Frontpanel sowie Min & Max Anzeige lässt sich auf die Lage der "Wasserlinie" in Pixeln berechnen. (Die Mathematik dazu darfst du dir selber überlegen). Wenn du das hast, dann weißt du auch, wo du den Grafikring positionieren musst.
[attachment=50276]

Gruß, Jens

EDIT: Und was willst du mit dem Rendezvous VIs erreichen? Der Screenshot führt dazu, dass die untere Schleife immer wieder (jedes 5. Mal) eine Durchlaufzeit von 1600 ms anstatt 800 ms hat. Soll das so sein? Und dass der Stopp-Button nicht funktioniert, darauf hat dich Gerd schon hingewiesen.
Danke schonmal für die Hinweise.

Ich beschäftige mich erst seit kurzem mit Labview, daher versuche ich es so einfach wie möglich zu halten um es besser verstehen zu können und
auch die Fehler schnell zu finden.

Ich habe mal schnell meine VI nachgebildet. Ist sehr einfach gehalten.

Hoffentlich hilft es weiter.
Hallo Tisinho,

- Du hast keine Wartezeiten in deinem VI, wenn noch nicht der OK-Button gedrückt wurde. Das führt zu 100% CPU-Last beim Warten auf eine User-Aktion - und das ist schlecht…

Zitat:Ich beschäftige mich erst seit kurzem mit Labview, daher versuche ich es so einfach wie möglich zu halten
Dann helfen dir sicher die Links in meiner Signatur, diese ganzen Probleme zu verstehen…

- Wozu das Rendezvouz? Was willst du damit erreichen? Was hat das mit "so einfach wie möglich" zu tun?
- Wozu die ganzen lokalen Variablen von ansonsten ungenutzten Terminals (Tank, Pegel)? THINK DATAFLOW!
- Deine Schleife mit der Event-Struktur erzeugt eine herrliche Race-Condition! Das ist schlecht…

Hast du unseren Kommentaren bis hierher schon mal Beachtung geschenkt?
Das Rendezvouz sollte die Zähler synchronisieren, damit auch sichergestellt wird, dass sowohl der Tank als auch das Objekt im gleichen Takt steigen.
Die Schleife der Event-Struktur muss doch sein, sonst würde doch das Event nur einmal aufgerufen werden?!
Hallo Tosinho,

Zitat:Das Rendezvouz sollte die Zähler synchronisieren, damit auch sichergestellt wird, dass sowohl der Tank als auch das Objekt im gleichen Takt steigen.
Warum dann nicht einfach beide in eine einzige Schleife, damit beide im gleichen Takt aktualisiert werden?

Zitat:Die Schleife der Event-Struktur muss doch sein, sonst würde doch das Event nur einmal aufgerufen werden?!
Ich habe nicht die Schleife um die Event-Struktur bemängelt, sondern die Race-Condition, die du dort programmiert hast…
(15.07.2014 18:54 )Tisinho schrieb: [ -> ]Das Rendezvouz sollte die Zähler synchronisieren, damit auch sichergestellt wird, dass sowohl der Tank als auch das Objekt im gleichen Takt steigen.
Was muss da groß synchronisiert werden? Du musst nur anders vorgehen.
Wenn du einen neuen Wert für "Tank" setzt, dann musst du "nur" aus der aktuellen Höhe des Tanks die neue Position des Grafik-Ring berechnen und setzen.

Gruß, Jens
Referenz-URLs