Hallo.
Ich beschäftige mich erst seit kurzem mit Labview
und versuche es mir selber anhand von Lektüren und Internet beizubringen.
Meine Arbeit läuft darauf hinaus, dass ich eine Oberfläche für einen Mikrokontroller anfertigen muss. Da dieser jedoch nicht vorhanden ist, wollte ich mir vorerst einen Mikrokontroller simulieren. Dafür habe ich ein VI erstellt, welches mir einfach nur die Ein- und Ausgaben simuliert. Die eigentlich Werte spielen dabei keine große Rolle. Mir ist auch bewusst, dass manche Verbindungen unsinnig sind, aber ich brauche halt diese Ein-/Ausgänge.
Nun stellt sich mir die Frage, ob meine rangehensweise sinnvoll war. Denn als ich versucht habe das Vi in ein anderes Vi einzubinden, ergab sich für mich das Problem, dass das Subvi nur einmalig Wert zurück gab und ich auch nur einmalig Werte übergeben kann.
Aber ich brauche diesen ständigen Datenfluss. Ich habe auch alle Ein- und Ausgaben mit den Anschlüßen verbunden aber trotzdem ist alles nur einmalig. Auch wenn ich dann das SubVi in eine Schleife packe, werden die Werte wieder nur einmalig zurück gegeben.
Im Anhang befindet sich mein Subvi. die übergeordnete Instanz existiert noch nicht, da ich gerade nur dieses Problem lösen möchte.
Dabei möchte ich von oben auf alle Werte zugreifen und alle Werte abfragen können.
Warum gibt er nur einmalig einen Wert zurück, wenn ich doch im SubVi selbst doch kontinuierlich Werte erhalte?
gruß Atilla
[
attachment=41937]
Hallo Attila,
1) Du hast kein VI angehangen, sondern nur ein Bild eines BD eines VIs. Das ist ein gewaltiger Unterschied!
Zitat:Warum gibt er nur einmalig einen Wert zurück, wenn ich doch im SubVi selbst doch kontinuierlich Werte erhalte?
2) Dein VI besteht aus 3 Schleifen, die alle auf eine Abbruchbedingung warten. Erst wenn alle 3 Schleifen beendet sind, wird auch das VI beendet. Das nennt sich in LabVIEW
DATAFLOW - und das ist das Grundprinzip von LabVIEW!
3) Du verwendest zuviele lokale Variablen. Wenn möglich, immer Drähte verwenden! (Siehe Punkt 2, DATAFLOW!)
4) Wenn du anderen deine VIs präsentierst, schadet es i.A. nicht, vorher mal den Aufräumknopf zu betätigen...
Vielen Danke für deine Antwort.
1) Ok, es tut mir leid, dass ich mich falsch ausgedrück habe, wäre es den hilfreicher, wenn ich das VI anhänge oder lässt sich mein Problem auch so erkennen?
2)Ok, das mit dem Dataflow wusste ich nicht. Nun oute ich mich als totalen Anfänger, dann werde ich mich nun die nächsten Tage mit weiter auseinader setzen.
Aber soll das nun heißen, dass die Werte erst übergeben werde, wenn die Schleifen beendet werden?
3)Ich habe mir gedacht, dass es so übersichtlicher wird. Ist es den Ok wenn ich alles verdrahte, anstatt Variablen zu benutzen. Das sind doch Lokale Variablen, die sind doch von außen nicht sicherbar.
4)Meinst du mit den Aufräumknöpfen, die in der oberen Leiste, welche für mich alles neu strukturieren? Ich habe es mal probbiert, fand aber das Ergebnis nicht sehr übersichtlicher.
Ich stand vor dem gleichen Problem, ein Mikrokontroller zu simulieren. Die Verbindung zwischen Mikrocontroller und PC ist original eine serielle Schnittstelle. Das habe ich beibehalten. Das Simulationprogramm kann sich auf anderen PC befinden, man kann aber auch alles auf einem PC machen, der muss dann nur 2 serielle Schnittstellen haben, die durch ein gekreuztes Kabel miteinader verbunden werden. Die beiden Programme - Simulation und Auswertung - laufen parallel.
Der Datenaustausch zwischen PC und µp-Simulator innerhalb eines einzigen VI, dazu noch Datenautausch statt über Queues über lokale Variablen, die überhaupt keine gegenseitige Synchronisation erlauben, ist ein schlechter oder sogar unbrauchbarer Ansatz - würde ich sagen.
Hallo Attila,
Zitat:1) Ok, es tut mir leid, dass ich mich falsch ausgedrück habe, wäre es den hilfreicher, wenn ich das VI anhänge oder lässt sich mein Problem auch so erkennen?
Ich glaube, das Problem auch so erkannt zu haben, siehe Meldung #2. Es liegt an dir, dies auszutesten...
Zitat:2)Ok, das mit dem Dataflow wusste ich nicht. Nun oute ich mich als totalen Anfänger, dann werde ich mich nun die nächsten Tage mit weiter auseinader setzen. Aber soll das nun heißen, dass die Werte erst übergeben werde, wenn die Schleifen beendet werden?
Ja. DATAFLOW: Ein Knoten (Funktion, Struktur, etc) wird erst ausgeführt, wenn alle benötigten Daten bereitstehen! Auf dein VI bezogen: Erst wenn alle Schleifen beendet sind, wird das VI beendet. Erst wenn dein VI beendet ist, wird ein übergeordnetes MainVI weiterlaufen...
Zitat:3)Ich habe mir gedacht, dass es so übersichtlicher wird. Ist es den Ok wenn ich alles verdrahte, anstatt Variablen zu benutzen. Das sind doch Lokale Variablen, die sind doch von außen nicht sicherbar.
Mach dir nichts draus: typischer Anfängerfehler!
Grundprinzip: LabVIEW speichert Daten nicht in "Variablen", sondern in Drähten!
"Lokale Variablen" sind nur
Kopien eines Bedienelements (und das im wahren Wortsinn: auch bei einem Arrayindicator wird eine volle Kopie des Arrays im Speicher gehalten!). Darüber hinaus führen Kopien zu RaceConditions!
Zitat:4)Meinst du mit den Aufräumknöpfen, die in der oberen Leiste, welche für mich alles neu strukturieren? Ich habe es mal probbiert, fand aber das Ergebnis nicht sehr übersichtlicher.
Das Aufräumtool ist nie perfekt, aber meist besser als der typische Anfänger
Z.B. verhindert es zuverlässig verdeckte und geknickte Drähte (hinderlich für den Dataflow
) oder von rechts-nach-links verlaufende...
@Lucki:
Bist du dir sicher, dass deine Antwort hierher gehört?
@Lucki:
was wäre dann deiner Meinung nach ein besser Ansatz. Also ich brauche es ja nur zum testen, ob er überhaupt bei mir funktioniert. Gibt es den eine andere Möglichkeit, die Strings, welche ich über die Serielle Schnittstelle erhalte zu simulieren, die dann abzufangen, auf zu splitten und dann zu verarbeiten?
@GerdW
Danke für deine Tipps, ich werde sie versuchen zu beherzigen.
Aber im Grund kann ich sagen, mit meinem Ansatz, werde ich nicht weit kommen. Es ist gut für mich da ich nun etwas gelernt habe, aber für meine eigentliche Steuerung irrelevant.
Wäre es nicht möglich vll. das Problem mit einer Globalen Variable zu lösen? ICh weiß, das dies keine schöne Lösung ist, aber ich brauche einfach nur diese Werte in den höheren Instanzen.