LabVIEWForum.de - Bearbeitungsreihenfolge

LabVIEWForum.de

Normale Version: Bearbeitungsreihenfolge
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
LabVIEW ist ja flußgetseuert, d.h. wenn an einem VI alle nötigen Eingänge zur Verfügung stehen wird es (irgendwann) ausgeführt.
Wie ist es nun, wenn ich in meiner Haupt While-Schilefe mehrere True/False-Cases habe, die über Schalter an und aus geschaltet werden können. Wird auch zwischen den Cases hin und her gesprungen, oder wird zuerst einer abgearbeitet?
Der Hintergrund ist, dass in den einzelnen Cases verschieden Befehlssequenzen über die serielle Schnittstelle gesendet werden. Dabei ist es egal, in welcher Reihenfolge die Sequenzen gesendet werde. Aber die einzelnen Sequenzen sollen nicht miteinander vermischt werden. Also immer zuerst die Sequenz aus dem einen Case komplett gesendet werden.
Funktioniert das so? Oder Soll ich das ganze mit Semaphore schützen?
MfG Jeffrey
Richtig erkannt: LV ist Datenfluss-gesteuert. D.h. ein Vorgang wird KOMPLETT abgearbeitet, dann wird in den nächsten gesprungen. Wenn die Reihenfolge nicht durch eine Datenleitung spezifiziert ist, kannst du nicht voraussagen, welcher als nächstes kommt. Du kannst aber absolut sicher sein, dass während er Abarbeitung nicht in einen anderen Vorgang gesprungen wird!

A.
' schrieb:Richtig erkannt: LV ist Datenfluss-gesteuert. D.h. ein Vorgang wird KOMPLETT abgearbeitet, dann wird in den nächsten gesprungen. Wenn die Reihenfolge nicht durch eine Datenleitung spezifiziert ist, kannst du nicht voraussagen, welcher als nächstes kommt. Du kannst aber absolut sicher sein, dass während er Abarbeitung nicht in einen anderen Vorgang gesprungen wird!

A.

Hallo,
ja aber die Befehlsfolge in jedem Case besteht aus mehreren einzelnen Befehlen, diese werden nacheinander in einer For-Schleife an die Schnittstelle geschickt. Ich habe mal eine solch Casestruktur angehängt. Wird diese bis zum Schluß abgearbeitet, oder kann es passieren, dass zwischendrin in eine andere, gleich aufgebaute Casestruktur gesprungen wird? Weil dann würden die Befehle miteinander vermischt werden.
MfG Jeffrey
Hi,

ich versteh' nicht so recht, wo du da ein Verständnisproblem hast. Ein Vorgang (egal ob VI, Case, Schleife, Formelknoten, etc.) wird KOMPLETT abgearbeitet, erst danach kommt der nächste übergeordnete/nachgelagerte Vorgang. In deinem konkreten Fall wird der komplette Case TRUE abgearbeitet und zwar in der Reihenfolge deiner Verdrahtung. Dann kommt die nächste Schleifeniteration, die diese Case-Struktur umgibt. Wenn sich bis zu dieser neuen Iteration die Eingangsbedingung nicht geändert hat, wird der Case wieder abgearbeitet, hat sich die Bedingung geändert wird der FALSE-Fall bearbeitet.

Für parallel zu deiner Case-Struktur angeordnete Strukturen/VI's etc. gilt das gleiche! Wenn du sicherstellen willst, dass hier eine gewisse Reihenfolge eingehalten wird, musst du das durch eine Verdrahtung ordnen!

Vielleicht versteh' ich dich falsch...du könntest ja mal einen Screenshot deines kompletten Blockdiagramms posten, oder dein VI...

A.
' schrieb:Für parallel zu deiner Case-Struktur angeordnete Strukturen/VI's etc. gilt das gleiche! Wenn du sicherstellen willst, dass hier eine gewisse Reihenfolge eingehalten wird, musst du das durch eine Verdrahtung ordnen!
Ich glaube er meint das.

Parallele Ablauf-Stränge auf einer logischen Ebene werden parallel abgearbeitet. Hast du also in deinem BD den gezeigten True/False-Case mehrere Male parallel dastehen, dann werden die auch parallel abgearbeitet - d.h. es kommt zu Datensalat. Soll dies nicht geschehen, so müssen die parallelen Ablaufstränge sequenziert werden.
' schrieb:Ich glaube er meint das.

Parallele Ablauf-Stränge auf einer logischen Ebene werden parallel abgearbeitet. Hast du also in deinem BD den gezeigten True/False-Case mehrere Male parallel dastehen, dann werden die auch parallel abgearbeitet - d.h. es kommt zu Datensalat. Soll dies nicht geschehen, so müssen die parallelen Ablaufstränge sequenziert werden.

Hallo,
genau so ist es, ich habe mehrere dieser Casestrukturen innerhalb einer übergeordneten Schleife. Ich werde das ganze dann durch ein Semaphor absichern, damit nicht zwischen den einzelnen Casestrukturen hin und her gesprungen wird.
MfG Jeffrey
' schrieb:Ich werde das ganze dann durch ein Semaphor absichern, damit nicht zwischen den einzelnen Casestrukturen hin und her gesprungen wird.

Das ist völlig übertrieben...es reicht doch aus, wenn du einen Draht (z.B. Errorcluster) durch die Cases durchziehst, ähnlich deiner Vorgehendsweise in den Cases...also einfach die Case-Strukturen als VI betrachten (was anderes sind sie ja letztendlich nicht)...dann siehts "von weitem" genauso aus wie in deinen Cases selbst.

Lass den Semaphore-Quark weg...WENIGER IST MEHR!

Gruß
Achim
Anmerkung:

' schrieb:damit nicht zwischen den einzelnen Casestrukturen hin und her gesprungen wird.
Stell dir das nicht als Hin- und Herspringen vor, sondern als zwei unabhängige, parallel und kontinuierlich laufende Abläufe vor. Es wird da zwar hin- und hergesprungen - aber nur wegen der Thread-Umschaltung quasi auf Prozessor-Ebene. Auf Applikationsebene wird nicht gesprungen, da gibt es nur Datenfluß-Fließen. Aber eben - theoretisch unendlich - viele Flüsse parallel. Als Programmierer muss du nun selbst dafür sorgen, dass parallele Abläufe, die gegenseitig abhängig sind, sich nicht in die Quere kommen. Und das geht mit nichts einfacher als mit SubVIs und Errorcluster-Sequenzierung.
Referenz-URLs