LabVIEWForum.de - 2 While Schleifen parallel

LabVIEWForum.de

Normale Version: 2 While Schleifen parallel
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo FilthHound,

hier der Lösungsvorschlag von oben mit Rendezvous.

Gruß,
Marko
Hallo!

Danke für das Bild. Hab die Rendevouzs in mein Programm eingebaut...Programm läuft auch, allerdings ohne Veränderung zu vorher. Irgendwie scheint LabVIEW Probleme zu haben zwei Sachen parallel laufen zu lassen, da ja schon die LED die synchron mit der Achsenbewegung blinken soll erst anfängt zu blinken wenn die Bewegung beendet ist.
Hallo Filth Hound, versuche das Blinking zuerst einzuschalten, also vor der Messung.

Gruss, Eugen
' schrieb:Hallo Surfman, hier mein Vorschlag mit Occurences, aber es geht genauso mit Semaphoren.
Gruss, Eugen


Obwohl das Thema schon älter ist, schreibe ich doch was dazu. Die Semaphoren sind zwar zum Synchronisieren gedacht, Lösen diese Aufgabe aber nicht, weil die gerade adie umgekehrte Funktion erfüllen.
Genauer gesagt, wenn man zwei Whiles hat und möchte, dass die nacheinander ablaufen und nicht parallel. Meine Aussage, dass es genauso mit Semaphoren geht ist also falsch. Sorry, hab damals nicht dran gedacht.

eg
' schrieb:in beiden schleifen ist eine verzögerung von 100ms eingebaut aber trotzdem laufen beide nicht gleich...
Die Schleifen laufen synchron, wenn Du für die Verzögerung in den Schleifen anstelle der Uhr den Metronom benutzt.
Zwei parallelE While-Schleifen absolut zu synchronisieren ist in dem Sinn nicht moeglich.
Mit der Timed Loop ist es moeglich, zwei Schleifen zur exakt gleichen Zeit zu starten, aber dann hat jede Schleife Ihre Eigendynamik.
Auch das Timen mit dem Metronom bringt nichts, weil bei einem Ueberlauf bereits eine ganze Iteration ausgesetzt wird (ok wenn es gewuenscht ist)...
Wenn beide Schleifen die gleiche Iterationszeit haben sollen und obendrein noch absolut synchron sein muessen...
...waere es dann nicht das einfachste, die Codefragmente von beiden Schleifen in eine zu packen? :-)

Wenn das nicht moeglich, dann wirst nur mit Timed Loops zum Ziel kommen und diese entsprechend so synchronisieren, dass bei einer Latency die fehlende Iteration asap aufgeholt wird, trotzdem der Basistakt nach wie vor eingehalten wird.
' schrieb:Auch das Timen mit dem Metronom bringt nichts, weil bei einem Ueberlauf bereits eine ganze Iteration ausgesetzt wird (ok wenn es gewuenscht ist)...

Mit "...bringt nichts" hättest Du nur recht, wenn in praktisch jeder Applikation solche Überläufe in den Schleifen die Regel wären. Ich würde aber eher sagen, daß das nur in seltenen, zeitkritischen Anwendungen ein Problem ist. Der Metronom ist also nicht immer, aber in sagen wie mal 98% der Anwendungen eine ausreichende Methode zur Synchronisation mehrerer Schleifen.

Zitat:Wenn beide Schleifen die gleiche Iterationszeit haben sollen und obendrein noch absolut synchron sein muessen...
...waere es dann nicht das einfachste, die Codefragmente von beiden Schleifen in eine zu packen? :-)
Gute Frage, aber wie macht man das, wenn die Schleifen in verschiedenen VIs laufen?

Anwendungshinweis für Metronom <---> Uhr:
Bei Verwendung der Uhr hat man nicht nur Phasenverschiebungen beim Start der beiden Schleifendurchläüfe, (- die oft nicht stören würden -) sondern es ist über längere Zeit auch mit Phasendrift zu rechnen (d.h die Durchlauffrequenzen unterscheiden sich geringfügig)
Bei Verwendung des Metronomes ist zu beachten, daß die voreingestellte Verzögerung (z.B 100ms) erst beim zweiten Durchlauf wirksam ist. Beim ersten Durchlauf sind es 1..100 ms. Will man das verhindern, muß man die Schleife(n) mit einem äußeren Metronom schon synchronisiert starten.

Man kann hier im Forum auch beobachten, daß versucht wird, Schleifen miteinander zu synchronisieren, bei denen das gar nicht nötig ist bzw. wo damit sogar Schaden angerichtet wird. Beispiel IO-Datenerfassung: Das IO-Read wartet geduldig, bis die angeforderten Daten erfasst sind. Ein Timer in der Schleife ist unnötig bis fehlerhaft. Ebenso synchronisieren sich bei Verwendung von Queues Sender und Empfänger bei richtiger Konfiguration von selbst, ein Timer sollte höchstens in einer der beiden Schleifen vorhanden sein. Ich würde sogar sagen, daß, wer die Synchronisation über Timer statt über Datenabhänggkeiten herstellt, irgendetwas falsch macht. Ich selbst habe das, was ich oben zu Synchronisation empfohlen haben, aus Büchern und selbst nie benutzt.
' schrieb:Zwei parallelE While-Schleifen absolut zu synchronisieren ist in dem Sinn nicht moeglich.
Mit der Timed Loop ist es moeglich, zwei Schleifen zur exakt gleichen Zeit zu starten, aber dann hat jede Schleife Ihre Eigendynamik.
Auch das Timen mit dem Metronom bringt nichts, weil bei einem Ueberlauf bereits eine ganze Iteration ausgesetzt wird (ok wenn es gewuenscht ist)...
Wenn beide Schleifen die gleiche Iterationszeit haben sollen und obendrein noch absolut synchron sein muessen...
...waere es dann nicht das einfachste, die Codefragmente von beiden Schleifen in eine zu packen? :-)

Wenn das nicht moeglich, dann wirst nur mit Timed Loops zum Ziel kommen und diese entsprechend so synchronisieren, dass bei einer Latency die fehlende Iteration asap aufgeholt wird, trotzdem der Basistakt nach wie vor eingehalten wird.
Ich versuche zwei timed loop Schleifen parallel laufen zu lassen. Allerdings bekomme ich nach ein par fehlerfreien Druchläufen folgende Fehlermeldung:
LabVIEW: Cannot add timed structure to the active timed structure synchronisation group.

Danach läuft das VI wieder zwei bis dreimal fehlerfrei durch bis die Fehlermeldung erneut erscheint.

Kennt jemand das Problem?
Seiten: 1 2
Referenz-URLs