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!
18.09.2015, 13:30 (Dieser Beitrag wurde zuletzt bearbeitet: 18.09.2015 13:32 von Frank M-F.)
ich bin grade in meinem Code auf einen blöden Fehler gestoßen, der mich einiges an Zeit gekostet hat.
Anbei ein runtergebrochenes Beispiel VI.
Ich erwarte eine Zeitdauer von 2002 ms. Aber der Datenfluss umgeht das wait, sodass eine Zeitdauer von 2ms gemessen wird.
Ich habe zwar verschiedenste Lösungswege für das Problem gefunden aber ich finde, dass hier eine Verletzung des Datenflusses vorliegt. Und als LabVIEW-Prorgammierer verlasse ich mich ja auf den Datenfluss.
Auch ich kann das nachstellen - aber man muss genau sein: die Gesamtausführungsdauer liegt schon bei 2 Sekunden, das VI spukt dir in der Anzeige aber nur 2 ms aus.
Hier noch eine Möglichkeit, das Problem zu umgehen: Ein Schieberegister für den Error-Cluster in der While Loop.
Wieso passt das? Da kann ich nur spekulieren. Vermutlich optimiert der Compiler im Hintergrund zu viel heraus. Er erkennt wahrscheinlich, dass prinzipiell deine Parallel-Loop auch schon während der While-Loop gestartet werden kann, denn der Error-Cluster stellt so kein "Hindernis" dar, da er in der While-Loop nicht manipuliert wird. Zwecks Parallelität der For-Loop wird dann offensichtlich die Ausführung nach vorne gezogen.
Trotzdem hast du Recht, so sollte das nicht sein, wenn man sich auf DATAFLOW verlassen will.
Ab mit dem Bsp zu NI!
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Es besteht da wahrscheinlich kein Grund zur Aufregung. Ich habe mit dem VI etwas herumgespielt, dann aber den Originalzustand wieder hergestellt. Überraschenderweise funktioniert es jetzt richtig.
Und ohne die parallele Ausführung der For-Schleife funktionert es sowieso.
Es gibt im LabVIEW Champions Forum eine Diskussion zu diesem Thema.
Dort geht es um eine anderes Detail, könnte aber mit diesem zu tun haben.
Es handelt sich um Einen Compiler-Bug, für den es bereits ein Fix gefunden wurde.
Vielleicht hilft dieses Beispiel, das Problem genauer zu erfassen.
Ich habe diesen Thread dort zitiert. Ich berichte, wenn ich etwas Neues weis.