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!
Wie kann ich einfach von der oberen zur unteren Struktur gelangen?
Der umständliche Weg wäre so:
füge an die obere linke Struktur 2 leere Frames an und kopiere den Inhalt der beiden rechten Frames hinein
dabei werden aber Drähte unterbrochen und man muß umständlich neu verdrahten
LV8.6
Wobei: bei entsprechender Programmierung und entsprechender Erstellung von SubVIs kann man quasi immer auf eine Sequenzstruktur verzichten, dafür ist der Datenfluss da. Und wenn du was von Neuziehen von Verbindungen sagst, dann ist dies doch schon deine Abfolge...
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!
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Wie füge ich 2 flat sequence Strukturen zusammen?
Anders wirst Du es aber nicht hinkriegen.....
Was hast Du denn mit der Sequenz vor? Wäre da nicht eine State Machine die bessere Lösung?
Und wenn Du eh schon am rumverschieben, kopieren,... bist, dann könntest Du das doch gleich umstellen.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
05.04.2009, 18:21 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2009 18:22 von Lucki.)
' schrieb:Wie kann ich einfach von der oberen zur unteren Struktur gelangen?
So berechtigt die Einwände sind - und ich schließe mich hier der allgemenen Kritik voll an -, so kann man sich auch auf den Standpunkt stellen: Des Menschen Wille ist sein Himmelreich, also soll es so geschehen.
Und dann wäre die einfache Antwort auf die einfach Frage:
Entweder:
In Sequenzstruktur 1/2 boolsche Konstatne erstellen, diese herausführen und an Sequenzstruktur 3/4 anschließen - ohne dort die Durchführung innen zu benutzen. (Oder statt eine boolsche Konstante zu erstellen einen beliebigen Draht anzapfen, der gerade da ist.)
Oder:
Neuen Rahmen mit 2 Sequenzen a und b erstellen. In Sequenzrahmen a die Sequenzstruktur 1/2 hineinkopieren und in Sequenzrahmen b die Sequenzstruktur 3/4 (Man hat also dann 2 Sequenzstrukturen innerhalb einer Sequenzstruktur)
In beiden Fällen hätte man die Reihenfolge 1/2/3/4 erzwungen, ohne ganz neu zu verdrahten.
Wie ihr im Bild erkennen könnt, berechne ich einige Variablen, auf die ich später über Referenzen zugreife. Die Variablen sind teilweise voneinander abhängig, d.h. bestimmte Variablen ergeben sich aus früheren Variablen. Nun will ich lange Verdrahtungen, die zu einer Seqenzierung führem wegen der Unübersichtlichkeit vermeiden. Die Reihenfolge wird stattdessen durch Flat sequenzen erzwungen. Das eigentliche Problem ist, das ich festgestellt habe, dass Variablen berechnet werden, selbst wenn die dafür benötigten Eingangsvariablen (hier: Rerenzen von anderen Variablen) noch nicht berechnet wurden. LV nimmt dann einfach den Variablenwert, der im vorherigen Programmstart ermittelt wurde. Das sollte ja eigentlich nicht sein.
So auf eine schnellen Blick kannst du auf alle lokalen Variablen in deinem Screenshot verzichten! Einfach Verdrahtung weiterführen, und du brauchst:
1. keine Sequenzstuktur.
2. keine lokalen Variablen (Performance!)
3. Hast keine Probleme mit den von dir angesprochenen Race Conditions.
Weitere Hinweise zu deinem Screenshot:
1. BD ist eindeutig zu groß, 5600 Pixel Breite, was soll das...
2. Ein Tip zur besseren Übersichtlichkeit: Mach doch mal aus deinen vielen Rechenschritten in den einzelnen Sequenzrahmen ein paar SubVIs. Auch dann brauchst du die Sequenzstruktur nicht und kannst durch entsprechende Datenflussverdrahtung die von dir festgestellten (und auch so programmierten) Race-Condition abstellen.
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!
' schrieb:Nun will ich lange Verdrahtungen, die zu einer Seqenzierung führem wegen der Unübersichtlichkeit vermeiden. Die Reihenfolge wird stattdessen durch Flat sequenzen erzwungen.
Ich würde trotz ersterem letzteres trotzdem nicht machen. In deinem Falle würde ich alle Variablen zu einem Cluster zusammenfassen und den als Sequenzierung nehmen.
Zitat:Das eigentliche Problem ist, das ich festgestellt habe, dass Variablen berechnet werden, selbst wenn die dafür benötigten Eingangsvariablen (hier: Rerenzen von anderen Variablen) noch nicht berechnet wurden.
Sollte ich dieses Verhalten aus dem geposteten Bild herauslesen können?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
06.04.2009, 11:41 (Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2009 11:55 von horatius.)
Hier der Kern meines Problems. Wenn ich bei a einen Wert eingebe und das Prg starte, dann wird bei Indikator b der Wert a ausgegeben und erst beim zweiten Programmstart auch bei Indikator c, d.h. c gibt den Wert von a aus dem vorletzten Programmstart aus. Ich hätte erwartet, dass erst die Abhängigkeiten abgearbeitet werden, bis c definiert ist. Stattdessen wird für Indikator c der Wert aus dem Speicher benutzt. Kann man denn nicht erzwingen, dass der Speicher abgeschaltet wird und erst dann eine Referenz benutzt wird, wenn sie klar definiert wurde?
06.04.2009, 12:03 (Dieser Beitrag wurde zuletzt bearbeitet: 06.04.2009 12:04 von IchSelbst.)
' schrieb:Wenn ich bei a einen Wert eingebe und das Prg starte, dann wird bei Indikator b der Wert a ausgegeben und erst beim zweiten Programmstart auch bei Indikator c, d.h. c gibt den Wert von a aus dem vorletzten Programmstart aus.
Das ist genau das, was du als Bild gepostet hast.
Zitat:Ich hätte erwartet, dass erst die Abhängigkeiten abgearbeitet werden, bis c definiert ist. Stattdessen wird für Indikator c der Wert aus dem Speicher benutzt.
Deine Erwartungen mögen zwar deiner Applikation entsprechen - aber du hast hier mit LV ein datenflußgesteuertes Datenmodell. Alles was nicht per Datenfluß (also per Draht) verbunden (also sequenziert ist) ist, wird parallel abgearbeitet. Was da parallel abgearbeitet wird, ist dem Programm egal. Ob da deine Logik mit den Variablen durcheinander kommt, steht auf einem anderen Blatt.
Zitat:Kann man denn nicht erzwingen, dass der Speicher abgeschaltet wird und erst dann eine Referenz benutzt wird, wenn sie klar definiert wurde.
Nein. So wie du das sagt, geht das nicht. Die lokale Variable an sich ist keine Referenz. Die hat einen eigenen (Zwischen-)Speicher. Auch wäre sowas nicht im Sinne von LV resepktive dem Datenfluß.
Machs doch einfach so, wie es sich gehört: Nimm statt der lokalen Variablen einen Datenfluß (ob per Draht oder Sequenzstruktur sei vorerst nochmals zurückgestellt).
Warum willst du keinen Datenfluß machen?
Nachtrag:
Die Sache mit dem Datenfluß muss dir in Fleisch und Blut übergehen. Ohne geht zwar, mit wird aber besser.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Na und, das ist das ganz normale Verhalten in LV, wenn du nicht durch Datenfluss eine Abarbeitungsfolge erzwingst. Nur das Platzieren von links nach rechts sagt dir noch lange nicht, wie intern wirklich die Abfolge sein wird. Merke: LV ist keine textbasierte Programmiersprache, bei die Reihenfolge der Abarbeitung durch die Zeilennummer gegeben ist. Im Gegenteil, LV ist multithreading-fähig und versucht, Sourcecode der parallel laufen kann, auch parallel abzuarbeiten.
Die Lösung für dein Problem sieht übrigens extrem einfach aus: keine lokale Variablen und Datenfluss ausnutzen:
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!