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!
ich habe da ein Verständnisproblem zum Thema parallele Whileschleifen. Ich möchte 2 Whileschleifen mit unterschiedlicher Ausführungsdauer laufen lassen und zwischen beiden Schleifen Signale austauschen. Allerdings funktioniert dies nicht so wie ich es mir vorstellen. Sobald ich Daten von der einen in die zweite Schleife verdrahte tut die 2. Schleifen nicht mehr.
Ein einfaches Beispiel zur Prinziperläuterung habe ich angehängt.
Danke!
01.02.2008, 10:24 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2008 10:24 von Commander Laserstrahl.)
Deine zweite Whileschleife fängt erst dann an zu "arbeiten" wenn alle Signale an den eingehenden Kabeln zur Verfügung stehen (linkes Bild). Das ist nen grundlegendes Prinzip von LabVIEW.
D.h. deine 2. Schleife kann erst anfangen, wenn die erste beendet ist.
Wenn du Werte in die Zweite Schleife schaufeln willst kannst du das z.B. mit localen Variablen machen.
01.02.2008, 11:07 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2008 11:15 von Lucki.)
' schrieb:Wenn du Werte in die Zweite Schleife schaufeln willst kannst du das z.B. mit localen Variablen machen.
Richtig, aber ein zusätzliches Problem ist manchmal die Synchronisation, so wie hier. Läuft die untere Schleife langsamer, gehen Daten verloren, läuft sie schneller, wird jeder Datenpunkt vervielfacht.
Ein elegante Lösung ist die Verwendung von Meldern oder Queues. Da wird so lange gewartet, bis neue Daten da sind, so daß man in der zweiten Schleife gar keine Uhr braucht. Oder wie im Beispiel unten: Die Daten gehen in die Schlange, und wenn die langsamere untere Schleife wieder ihre Runde dreht, wird die Schlange vollständig geleert.
' schrieb:Richtig, aber ein zusätzliches Problem ist manchmal die Synchronisation, so wie hier. Läuft die untere Schleife langsamer, gehen Daten verloren, läuft sie schneller, wird jeder Datenpunkt vervielfacht.
Ein elegante Lösung ist die Verwendung von Meldern oder Queues. Da wird so lange gewartet, bis neue Daten da sind, so daß man in der zweiten Schleife gar keine Uhr braucht. Oder wie im Beispiel unten: Die Daten gehen in die Schlange, und wenn die langsamere untere Schleife wieder ihre Runde dreht, wird die Schlange vollständig geleert.
[attachment=38014:2schleifen.png]
Vielen Dank schonmal für eure Antworten
Hab gerade dein Programm getestet sowie den Vorschlag mit den lokalen Variablen. Dabei kann ich allerdings keinen Unterschied feststellen. Es scheinen auch bei den lokalen Variablen keine Werte verloren zu gehen, oder liegt das daran, dass ich die lokale Variable eines Grafen verwendet habe??
01.02.2008, 13:37 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2008 13:46 von Lucki.)
' schrieb:Hab gerade dein Programm getestet sowie den Vorschlag mit den lokalen Variablen. Dabei kann ich allerdings keinen Unterschied feststellen. Es scheinen auch bei den lokalen Variablen keine Werte verloren zu gehen, oder liegt das daran, dass ich die lokale Variable eines Grafen verwendet habe??
Du siehst da keinen Unterschied, weil die Datenpunkte bei deinen dynamischen Daten mit Zeitstempeln versehen sind und das in der X-Achse berücksichtigt ist. Ändere mal die Plotdarstellung in der Plotlegende von Linie in Linie mit Punkten, dann siehst Du, daß immer 3 Zwischenpunkte fehlen. Oder vergrößere die Wartezeit unten. Je mehr Wartezeit, um so eckiger wird der Sinus mangels Punkten.
Edit: Wenn Du die lokale Variable des oberen Gaphen verwendet hast, weiß ich jetzt nicht ob das nur der zuletzt eingegebene Wert ist oder die gesamte Graphen-History. Letzteres glaube ich aber nicht, Probier das mal selbst aus.
' schrieb:oder liegt das daran, dass ich die lokale Variable eines Grafen verwendet habe??
Im allgemeinen gilt folgendes:
Das von Lucki beschriebeneallgemeingültige Problem kann eintreten, muss aber nicht. Das kommt auf die Applikation an und auf die Daten, die übertragen werden sollen. Dann kann es auch sein, dass das Problem auch nur sporatisch auftritt. Wenn es aber nachvollziehbar auftritt, ist es auf jeden Fall mittels Queue/Melder behebbar - was bedeuten würde, hätte man es gleich so gemacht, wäre das Problem nie aufgetreten.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Anzeige
01.02.2008, 13:47 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2008 13:41 von Lucki.)
' schrieb:Hab gerade dein Programm getestet sowie den Vorschlag mit den lokalen Variablen. Dabei kann ich allerdings keinen Unterschied feststellen. Es scheinen auch bei den lokalen Variablen keine Werte verloren zu gehen, oder liegt das daran, dass ich die lokale Variable eines Grafen verwendet habe??
Du siehst da keinen Unterschied, weil die Datenpunkte bei deinen dynamischen Daten mit Zeitstempeln versehen sind und das in der X-Achse berücksichtigt ist. Ändere mal die Plotdarstellung in der Plotlegende von Linie in Linie mit Punkten, dann siehst Du, daß immer 3 Zwischenpunkte fehlen. Oder vergrößere die Wartezeit unten. Je mehr Wartezeit, um so eckiger wird der Sinus mangels Punkten.
Andere Formulierung: Da hast unten 4 mal weniger Datenpunkte, aber 4 mal größeres dt --> Aussehen bleibt fast gleich
01.02.2008, 14:09 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2008 14:10 von Lucki.)
' schrieb:Das von Lucki beschriebeneallgemeingültige Problem kann eintreten, muss aber nicht. Das kommt auf die Applikation an und auf die Daten, die übertragen werden sollen. Dann kann es auch sein, dass das Problem auch nur sporatisch auftritt. Wenn es aber nachvollziehbar auftritt, ist es auf jeden Fall mittels Queue/Melder behebbar - was bedeuten würde, hätte man es gleich so gemacht, wäre das Problem nie aufgetreten.
Das ist sicherlich richtig, aber um Mißverständnisse auszuschließen, sollte doch eines klar gesagt sein: Beim Lesen einer lokalen Variablen wird nie gewartet, es wird gelesen was gerade drin ist, egal ob neu, ob alt zum xten Mal, oder ob shit (weil noch nicht initialisiert). Man kann damit niemals eine Wartezeit in einer Schleife erzeugen, also auch nicht das Problem der Synchronisation von verschiedenen Schleifen untereinander lösen.
Vielen Dank für eure zahlreichen Antworten. Hab verstanden. Die Wahl der lokalen Vraiablen war nicht die beste. Hab jetzt mal nen Integer hochgezählt und in einen Grafen geschrieben. Dabei sieht man deutlich die Fehlenden Bildpunkte.