INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

While-Schleife im SubVi von außen beenden und Werte übergeben



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.08.2006, 13:38 (Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2006 13:41 von bernd1.)
Beitrag #1

bernd1 Offline
LVF-Grünschnabel
*


Beiträge: 41
Registriert seit: Apr 2006

8.0 deutsch
2006
kA


Deutschland
While-Schleife im SubVi von außen beenden und Werte übergeben
<div align="left">Hallo,

ich habe mir ein SubVi gebastelt, daß mir Messdaten in eine Datei schreibt.
In diesem SubVi befindet sich dazu eine Whileschleife, die mir äbhängig von Benutzereingaben alle X-Sekunden einen Wert in die Datei schreibt.

Soweit so gut.

Nun habe ich aber das Problem, daß dieses SubVi nicht mit meinem Hauptprogramm zusammenarbeiten will.

Ich schaffe es einfach nicht, daß von außen der Wert des Stopp-Knopfes an das SubVi übergeben wird, damit dort ebenfalls die While-Schleife beendet wird.
Natürlich werden die aktuellen Messwerte auch nicht übergeben.

Hier mal meine Beispieldatei:


Sonstige .vi  SubVi__Datenschreiben.vi (Größe: 33,56 KB / Downloads: 336)


Sonstige .vi  Test_SubVi__Dateisschreiben_mit_Hauptschleife.vi (Größe: 16,35 KB / Downloads: 314)


Sonstige .vi  Me_dauer_Uhr_vertrichene_Zeit.vi (Größe: 9,44 KB / Downloads: 281)


Wer kann mir weiterhelfen?

Gruß
Bernd</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.08.2006, 17:35
Beitrag #2

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
While-Schleife im SubVi von außen beenden und Werte übergeben
' schrieb:<div align="left">Hallo,

ich habe mir ein SubVi gebastelt, daß mir Messdaten in eine Datei schreibt.
In diesem SubVi befindet sich dazu eine Whileschleife, die mir äbhängig von Benutzereingaben alle X-Sekunden einen Wert in die Datei schreibt.

Soweit so gut.

Nun habe ich aber das Problem, daß dieses SubVi nicht mit meinem Hauptprogramm zusammenarbeiten will.

Ich schaffe es einfach nicht, daß von außen der Wert des Stopp-Knopfes an das SubVi übergeben wird, damit dort ebenfalls die While-Schleife beendet wird.
Natürlich werden die aktuellen Messwerte auch nicht übergeben.

Hier mal meine Beispieldatei:

[attachment=28932:attachment]
[attachment=28933:attachment]
[attachment=28934:attachment]

Wer kann mir weiterhelfen?

Gruß
Bernd</div>


<div align="left">Hallo Bernd,

während ein SubVI abgearbeitet wird regiert es nicht mehr auf Signale von außen. Die Signale werden an den Eingängen des SubVIs gesammelt. Erst dann beginnt das SubVI diese zu verarbeiten und gibt am Ende an den Ausgängen seine Werte zurück.
Du könntest es vielleicht mit einer globalen Variable versuchen. Der Stopknopf gibt seine Werte innerhalb einer Schleife im aufrufenden VI an eine globale Variable, die in diesem Fall boolscher Natur ist. Diese wird im SubVi ebenfalls innerhalb der Schleife ausgelesen und als Abbruchbedingung übergeben.
Die Messwerte musst Du in einem Array sammeln, der dann bei Abrruch des SubVIs an sein Aufrufer übergen wird. Das geht ganz einfach indem Du die Indizierung am Ausgangstunnel der Schleife mittels Rechtsklick per Kontextmenü aktivierst.
Eine andere Möglichkeit wäre die Schleife aus dem SubVI zu entfernen, sodass deren Inhalt je SubVi Aufruf nur einmal durchlaufen wird, und im Übergeordneten VI die Schleife um das SubVI drumherum zu bauen.

Übrigends glaube ich auch das Schieberegister für Werte die während des gesammten Schleifenablaufs nicht verändert werden überflüssig sind. Ich denke, die machen nur dann in einer Schleife Sinn, wenn die in der Schleife erzeugten Werte im nächsten Schleifendurchlauf wieder verwendet werden, bevor für diese Variable noch im selben Schleifendurchlauf ein neuer Wert erzeugt wird. Durch die Verbindung am Äußeren Eingang wird dann lediglich der Datentyp dieser Variable festgelegt und der allererste Wert an die Schleife übergeben. Für ersteres ist eine Konstante mit beliebigem Wert ausreichend.

viel Erfolg und
schönes Wochenende
SchwindelInside</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.08.2006, 18:44
Beitrag #3

bernd1 Offline
LVF-Grünschnabel
*


Beiträge: 41
Registriert seit: Apr 2006

8.0 deutsch
2006
kA


Deutschland
While-Schleife im SubVi von außen beenden und Werte übergeben
' schrieb:<div align="left">Hallo Bernd,

...
Schleife übergeben. Für ersteres ist eine Konstante mit beliebigem Wert ausreichend.

viel Erfolg und
schönes Wochenende
SchwindelInside</div>
<div align="left">
Hallo,

vielen Dank für die ausführliche Erklärung.
Ich habe schon fast befürchtet , daß es so nicht geht.
Aber dann verstehe ich den Sinn von SubVi´s nicht ganz. Denn dann kann ich auch ohne SubVi´s
auskommen, und alles wäre unübersichtlich auf dem Blockbild zu sehen. Dann fehlt mir aber eine Zoom-Funktion.
Zudem verstehe ich es nicht, da ich ja die Werte innherhalb der Schleife übergebe und nicht außerhalb
(siehe SubVi).
Dann muß ich Wohl oder Übel mein mühsam orginales Subvi, daß ein bißchen größer ist als das Beispiel, eben wieder anders schreiben. Aber vielelicht klappt es ja mit globale Variablen.

Ich wünsche ebenfalls ein schönes Wochenende.

Gruß
Bernd
</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.08.2006, 21:47
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
While-Schleife im SubVi von außen beenden und Werte übergeben
<div align="left">Hallo, Bernd,

mit etwas Rumtricksen muss eigentlich das gehen, was du machen willst.

Was du an dein SubVI übergeben musst, ist ein sogenanntes "Reference"-Objekt (Sorry, habe nur englisches LabVIEW) deines Stop/Abbruch-Buttons des übergeordneten VI's, und nicht die Variable selbst. Erstellbar ist die Reference über die rechte Maustaste, wenn du auf dem Button bist.

Mit Hilfe dieser Reference hast du dann im SubVI direkt Zugriff auf den Zustand deines Abbruch-Buttons, auch im SubVI, und auch wenn er sich ändert!

Jetzt musst du dies nur noch regelmäßig im SubVI abfragen, dann sollte es klappen.

MfG, Jens</div>

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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.08.2006, 22:42
Beitrag #5

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
While-Schleife im SubVi von außen beenden und Werte übergeben
' schrieb:<div align="left">
Hallo,

vielen Dank für die ausführliche Erklärung.
Ich habe schon fast befürchtet , daß es so nicht geht.
Aber dann verstehe ich den Sinn von SubVi´s nicht ganz. Denn dann kann ich auch ohne SubVi´s
auskommen, und alles wäre unübersichtlich auf dem Blockbild zu sehen. Dann fehlt mir aber eine Zoom-Funktion.
Zudem verstehe ich es nicht, da ich ja die Werte innherhalb der Schleife übergebe und nicht außerhalb
(siehe SubVi).
Dann muß ich Wohl oder Übel mein mühsam orginales Subvi, daß ein bißchen größer ist als das Beispiel, eben wieder anders schreiben. Aber vielelicht klappt es ja mit globale Variablen.

Ich wünsche ebenfalls ein schönes Wochenende.

Gruß
Bernd
</div>

<div align="left">Hallo Bernd,

entschuldige Bitte meine übereilten Antworten. Ich hab mir das VI noch mal genauer angeschaut. Dabei hab ich gesehen, dass Deine Schieberegeister tatsächlich Sinn machen, da die Werte in je einem der Cases ja auch verarbeitet werden. Wenn Du die Daten innerhalb der Schleife in die Datei schreibst, brauchst Du sie natürlich nicht erst in einem Array sammeln.
Das mit dem Referenz-Objekt ist natürlich noch eine viel elegantere Lösung als mit einer globalen Variable, da dafür kein zusätzlicher Speicher reserviert werden muss, sondern nur die Speicheradresse des Stop-Buttons übergeben wird, von wo dann immer der aktuelle Wert gelesen werden kann.
Danke @Jens für den Tip.

schönen Abend noch
SchwindelInsisde</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  SubVI beenden nach einstellbarer Zeit angry_Nameless 5 3.437 06.05.2022 19:37
Letzter Beitrag: Martin.Henz
  Schleife stoppen in subVI illy777 31 13.595 14.09.2020 18:00
Letzter Beitrag: illy777
  While-Schleife sofort beenden ? RobertRoth 17 10.795 21.10.2019 11:00
Letzter Beitrag: RobertRoth
  Schleife Werte Ausgeben MarcelXX 4 3.941 30.08.2019 09:19
Letzter Beitrag: jg
  Schleife sofort beenden mprocket 9 7.421 19.01.2018 23:26
Letzter Beitrag: mprocket
  Werte aus SubVI werden nicht aktualisiert McButch 24 13.642 13.10.2016 14:20
Letzter Beitrag: jg

Gehe zu: