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 

Schleife stoppen in subVI



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!

04.09.2020, 23:33
Beitrag #1

illy777 Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Sep 2020

2020
-
DE_EN



Schleife stoppen in subVI
Hallo Leute,

ich versuche gerade es hinzukriegen mittels occurences eine Schleife der subVI von der HauptVI zu stoppen. ich habe mir entsprechende Beiträge gelesen, aber ich wollte herausfinden, was ich hier nu falsch mache.. Wenn ich den timer für "warten" auf 0 setzen geht das, die Schleife arbeitet aber nicht so wie ich es möchte...

Zum Programm selbst: Es sollen weitere subVIs entstehen, die dann mittels des stopbuttons bzw. andere mechanismen von der HauptVI gestoppt werden sollen. Jeder Tipp ist gern willkommen, auch wenn es nicht zur Frage passt... Es ist mein erstes mal, dass ich ein Programm mit labview erstelle.


Vielen Dank!

MfG Isaac





20.0 .vi  Spannungsplot.vi (Größe: 65,45 KB / Downloads: 165)

20.0 .vi  Main.vi (Größe: 24,69 KB / Downloads: 182)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.09.2020, 21:33
Beitrag #2

Martin.Henz Offline
LVF-Team
LVF-Team

Beiträge: 426
Registriert seit: Jan 2005

2.5.1 bis 20
1992
kA

74363
Deutschland
RE: Schleife stoppen in subVI
(04.09.2020 23:33 )illy777 schrieb:  Jeder Tipp ist gern willkommen, auch wenn es nicht zur Frage passt...

Hmm, ich habe den Verdacht, dass ich jetzt nicht mal 10% von dem schaffe, was mir so alles aufgefallen ist.

In Main unter Messeinstellungen steht die Sample Rate zur Zeit auf 50kS/s. Du nimmst im Moment drei Kanäle auf und willst noch mehr Kanäle aufnehmen? Du sammelst aber alle Daten. Das Programm würde irgendwann so viel Speicher brauchen, dass es platzt :-)

Davon abgesehen, dass deine Occurrence ins leere läuft und der Abbruch Button irgendwie sinnfrei ist, würde ich keine Occurrence nehmen, hier nicht und sogar ganz generell davon abraten (die Dinger haben ein paar Eigenschaften, die einem den Spass verderben können). Du verwendest schon Queues (wenn auch etwas seltsam). Mittels einer Queue kannst du relativ problemlos zwischen verschiedenen VIs kommunizieren.

Du splittest die Daten der drei gemessenen Kanäle auf, stopfst die gerade gemessenen Daten in jeweils eine eigene Queue, welche dann in der darunter liegenden schleife aus den drei Queues wieder ausgelesen werden. Ähm - drei Queues machen da gar keinen Sinn.

Die Messdaten hänst du dann an die bereits zuvor gemessenen Daten an (macht so keinen Sinn, siehe oben).

Ich habe so ein bisschen den Eindruck, dass du gar nicht weist, warum du das dt eigentlich so komisch umskalierst ...

DAQmx findet alleine den passenden Messbereich (sollte es zumindest tun). Wenn du also einfach bei Create Channel das gewünschten Maximum rein stopfst (bei dir 1.5 mal Spannung-Motor), dann reicht das. Wozu also die while Schleife links oben.

So - ich höre jetzt erst mal auf.

Martin Henz
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2020, 00:34 (Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2020 00:45 von illy777.)
Beitrag #3

illy777 Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Sep 2020

2020
-
DE_EN



RE: Schleife stoppen in subVI
(05.09.2020 21:33 )Martin.Henz schrieb:  
(04.09.2020 23:33 )illy777 schrieb:  Jeder Tipp ist gern willkommen, auch wenn es nicht zur Frage passt...

Hmm, ich habe den Verdacht, dass ich jetzt nicht mal 10% von dem schaffe, was mir so alles aufgefallen ist.

In Main unter Messeinstellungen steht die Sample Rate zur Zeit auf 50kS/s. Du nimmst im Moment drei Kanäle auf und willst noch mehr Kanäle aufnehmen? Du sammelst aber alle Daten. Das Programm würde irgendwann so viel Speicher brauchen, dass es platzt :-)

Davon abgesehen, dass deine Occurrence ins leere läuft und der Abbruch Button irgendwie sinnfrei ist, würde ich keine Occurrence nehmen, hier nicht und sogar ganz generell davon abraten (die Dinger haben ein paar Eigenschaften, die einem den Spass verderben können). Du verwendest schon Queues (wenn auch etwas seltsam). Mittels einer Queue kannst du relativ problemlos zwischen verschiedenen VIs kommunizieren.

Du splittest die Daten der drei gemessenen Kanäle auf, stopfst die gerade gemessenen Daten in jeweils eine eigene Queue, welche dann in der darunter liegenden schleife aus den drei Queues wieder ausgelesen werden. Ähm - drei Queues machen da gar keinen Sinn.

Die Messdaten hänst du dann an die bereits zuvor gemessenen Daten an (macht so keinen Sinn, siehe oben).

Ich habe so ein bisschen den Eindruck, dass du gar nicht weist, warum du das dt eigentlich so komisch umskalierst ...

DAQmx findet alleine den passenden Messbereich (sollte es zumindest tun). Wenn du also einfach bei Create Channel das gewünschten Maximum rein stopfst (bei dir 1.5 mal Spannung-Motor), dann reicht das. Wozu also die while Schleife links oben.

So - ich höre jetzt erst mal auf.

Hallo Martin,

danke für die Antwort! vllt zur Erklärung: das Programm ist für eine Leerlaufprüfung gedacht, und da sollen noch stromwerte abgenommen werden und eine Zeit dt eingestellt werden, in der die Daten gesammelt werden. (Es kommen noch drehzahlwerte und Temperatur dazu, und noch muss ich die DC-Mittelwerte und RMS bilden und tabellarisch darstellen)

Das mit den 3 queues ist ein guter Einwand den ich auch umsetzen werde, aber das mit dem dt der Diagramme, da weiß ich ehrlich gesagt wirklich nicht wie ich das umstellen soll, aber ich wollte die Zeit eben so skalieren, dass die x achse in sekunden ausgegeben werden. Ich weiß nicht wie ich das besser mache.. ich bin auch ehrlich gesagt neu zu LabView und muss das für meine Praxisarbeit im 2. Semester erstellen.. Ich bin ein wenig am verzweifeln, weil das relativ anspruchsvoll ist und ich gar keine Erfahrungen habe mit Labview..

Auch die 3 Diagramme möchte ich in der Subvi haben, da ich später die SubVI öffnen möchte um die Möglichkeit zu haben alle Spannungen einzeln zu betrachten

Der Abbruch button soll aber trotzdem funktionieren, da ich die Möglichkeit haben möchte, die Schleife im Main zu stoppen falls erforderlich. Ich habs ebenfalls mit queues probiert und habe auch das umgesetzt was in einigen Threads zu lesen ist, dennoch finde ich keine Möglichkeit, dies auf die richtige Weise umzusetzen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2020, 17:23
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Schleife stoppen in subVI
Hallo Isaac,

nochmehr Ungereimtheiten:
Main.vi
- In der Schleife wird in jeder Iteration und in jedem Case eine neue Occurance angefordert, diese aber nie gelöscht. Sowas kann (auf Dauer) nie funktionieren! (Zumal diese Schleife im FALSE-Case auch ungebremst so schnell wie möglich läuft…)
- Du hast vollkommen an THINK DATAFLOW vorbei programmiert: die Event-Struktur kann NIE aufgerufen werden, da es eine DATAFLOW-Abhängigkeit gibt und die Schleife davor NIE beendet wird!
- Bei "Aufplottrate" gibt es einen CoercionDot: wieso?

sub.vi
- Was nützt dir eine Stopp-Bedingung (per Occurance oder sonst wie), wenn du da Schleifen verwendest, die NIE beendet werden?
- In der Schleife, die NIE beendet wird, setzt du Plot-Properties. Dummerweise verwendest du die ActivePlot-Property falsch: immer erst den ActivePlot setzen, dann dessen Properties…
- Die Schleife zum Berechnen der "Spannung Motor" ist reiner Rube-Goldberg: wenn die Spannung durch 5 teilbar sein soll, dann durch 5 teilen, aufrunden, mit 5 multiplizieren…
- Das Aufteilen des Waveform-Arrays für 3 Queues ist extrem sinnfrei…

Auch ich würde dir von Occurances abraten. Nimm eine FGV (aka AE) oder einen Notifier für eine globale Stopp-Bedingung…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2020, 08:03 (Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2020 08:04 von illy777.)
Beitrag #5

illy777 Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Sep 2020

2020
-
DE_EN



RE: Schleife stoppen in subVI
Hallo Leute,

ich danke für eure Tipps! Ich habe mittlerweile einiges umgesetzt und ich wüsste nicht wie ich das anders machen sollte.. das mit dem Abbruchknopf wird noch implementiert, aber mit queus hab ichs aber nicht hingekriegt...

Desweiteren habe ich jetzt noch ein Problem.. Ich habe eine Sequenz erstellt, da ich einen Grenzstrom angeben möchte, als Signal für den Messstart.. Wenn ich im Debugg-Modus bin klappt das ja ganz gut und er führt die Sequenz so wie ichs mir vorstelle aus: 1. Warten bis Grenze überschritten wird 2. Rahmen ausführen.

Allerdings ausserhalb des Debuggmodus miss er immer, auch wenn die Stromzange aus ist?!

Weiß jemand um Rat?


Angehängte Datei(en)
20.0 .vi  Main.vi (Größe: 185,76 KB / Downloads: 162)

20.0 .vi  Spannungsplot.vi (Größe: 70,78 KB / Downloads: 151)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2020, 08:12
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Schleife stoppen in subVI
Hallo illy,

Zitat:Ich habe eine Sequenz erstellt, da ich einen Grenzstrom angeben möchte, als Signal für den Messstart.. Wenn ich im Debugg-Modus bin klappt das ja ganz gut und er führt die Sequenz so wie ichs mir vorstelle aus: 1. Warten bis Grenze überschritten wird 2. Rahmen ausführen.
Allerdings ausserhalb des Debuggmodus miss er immer, auch wenn die Stromzange aus ist?!
Falscher Ansatz…

Wenn du eine Statemachine implementieren willst, dann solltest du eben auch eine Statemachine implementieren!
Wozu genau brauchst du eine Sequenzstruktur?

Außerdem: da dein VI überhaupt nicht weiß, ob die Strommesszange aktiv ist oder nicht, wird immer gemessen, egal ob Debug-Modus oder nicht…

Zum subVI:
Verwende keine TimedWhileLoop, die ist unter Windows (fast immer) vollkommen unnötig! Wenn das Timing durch DAQmx gegeben ist, reicht eine normale WhileLoop aus!
Anstatt den Graph per Referenz/PropertyNode zu beschreiben, solltest du viel eher die Queue im MainVI auslesen und direkt im MainVI den Graph beschreiben…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.09.2020, 08:48
Beitrag #7

illy777 Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Sep 2020

2020
-
DE_EN



RE: Schleife stoppen in subVI
(07.09.2020 08:12 )GerdW schrieb:  Hallo illy,

Zitat:Ich habe eine Sequenz erstellt, da ich einen Grenzstrom angeben möchte, als Signal für den Messstart.. Wenn ich im Debugg-Modus bin klappt das ja ganz gut und er führt die Sequenz so wie ichs mir vorstelle aus: 1. Warten bis Grenze überschritten wird 2. Rahmen ausführen.
Allerdings ausserhalb des Debuggmodus miss er immer, auch wenn die Stromzange aus ist?!
Falscher Ansatz…

Wenn du eine Statemachine implementieren willst, dann solltest du eben auch eine Statemachine implementieren!
Wozu genau brauchst du eine Sequenzstruktur?

Außerdem: da dein VI überhaupt nicht weiß, ob die Strommesszange aktiv ist oder nicht, wird immer gemessen, egal ob Debug-Modus oder nicht…

Zum subVI:
Verwende keine TimedWhileLoop, die ist unter Windows (fast immer) vollkommen unnötig! Wenn das Timing durch DAQmx gegeben ist, reicht eine normale WhileLoop aus!
Anstatt den Graph per Referenz/PropertyNode zu beschreiben, solltest du viel eher die Queue im MainVI auslesen und direkt im MainVI den Graph beschreiben…

Hallo GerdW,

ehrlich gesagt, habe ichs bis jetzt nicht verstanden wie das mit queus über mehrere VIs funktioniert(also wie ich queus aus der hauptvi mit der subvi verknüpf und andersherum)..

die Sequenz habe ich mir eben so vorgestellt, dass er eben die Schleife links durchlaufen lässt bis der Grenzwert überschritten wird, dann fängt er mit dem 2. rahmen an.. und ich wusste nicht mal was eine Statemachine ist Tongue

und wie kann ich mein VI wissen lassen, dass die Zange an ist? ich meine, ich dachte, das geht eben über den Grenzwert..

dankeschön für deine Mühe!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2020, 09:17 (Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2020 09:26 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Schleife stoppen in subVI
Hallo illy,

Zitat:abe ichs bis jetzt nicht verstanden wie das mit queus über mehrere VIs funktioniert(also wie ich queus aus der hauptvi mit der subvi verknüpf und andersherum)..
Dann führe mal diese Schritte durch:
1. öffne das Blockdiagramm deines subVIs
2. markiere die Consumer-Loop
3. Edit-Menü->SubVI erstellen
Jetzt weißt du, wie man mittels Queue Daten zwischen 2 VIs austauschen kann…

Zitat:ich wusste nicht mal was eine Statemachine ist
Das hat aber nichts mit LabVIEW zu tun. Eine Statemachine ist ein Programmierschema, das man in (wahrscheinlich/nahezu) jeder Programmiersprache umsetzen kann…

Wobei du den Sequenzrahmen nicht benötigen würdest, wenn du DATAFLOW mit Error-Wire anwenden würdest!

Zitat:wie kann ich mein VI wissen lassen, dass die Zange an ist? ich meine, ich dachte, das geht eben über den Grenzwert..
Aha, nötige Zusatzinfo zum Programm!
Wenn bei aktiver Messzange ein Mindestsignalwert anliegt, dann kannst du das natürlich so feststellen.
Wobei du das auch maximal umständlich umgesetzt hast: es gibt da auch ganz normale Vergleichsfunktionen:
   
Der von dir gewählte Grenzwert erscheint mir sehr gering: wie groß ist das erwartete Rauschen? Wo liegt die "Einschaltschwelle" deiner Strommmesszange?

Tipp:
Als Anfänger (und auch als Fortgeschrittener) solltest du die Option aktivieren, in Strukturen immer das Kommentarfeld per default sichtbar zu machen - und dort dann auch Kommentare reinschreiben. So zwingt man sich von Anfang an zu besser dokumentiertem Code… Big Grin

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2020, 11:08 (Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2020 11:18 von illy777.)
Beitrag #9

illy777 Offline
LVF-Grünschnabel
*


Beiträge: 21
Registriert seit: Sep 2020

2020
-
DE_EN



RE: Schleife stoppen in subVI
(07.09.2020 09:17 )GerdW schrieb:  Hallo illy,

Zitat:Dann führe mal diese Schritte durch:
1. öffne das Blockdiagramm deines subVIs
2. markiere die Consumer-Loop
3. Edit-Menü->SubVI erstellen
Jetzt weißt du, wie man mittels Queue Daten zwischen 2 VIs austauschen kann…

Zitat:Das hat aber nichts mit LabVIEW zu tun. Eine Statemachine ist ein Programmierschema, das man in (wahrscheinlich/nahezu) jeder Programmiersprache umsetzen kann…

Wobei du den Sequenzrahmen nicht benötigen würdest, wenn du DATAFLOW mit Error-Wire anwenden würdest!

ich probiers

Zitat:[quote]wie kann ich mein VI wissen lassen, dass die Zange an ist? ich meine, ich dachte, das geht eben über den Grenzwert..
Aha, nötige Zusatzinfo zum Programm!
Wenn bei aktiver Messzange ein Mindestsignalwert anliegt, dann kannst du das natürlich so feststellen.
Wobei du das auch maximal umständlich umgesetzt hast: es gibt da auch ganz normale Vergleichsfunktionen:
Der von dir gewählte Grenzwert erscheint mir sehr gering: wie groß ist das erwartete Rauschen? Wo liegt die "Einschaltschwelle" deiner Strommmesszange?
das erwartete Rauschen liegt nicht über 5 mA, und da die Messung erst ab 220 mA(min. 100 ma) anfangen soll, ist das kein großer bedeutender Wert... die Messzange hat 2 Skalierungen einmal 100 mV/A und 10 mV/A... Und man kann das Rauschen mit Stromzange an und aus nicht vergleichen, da sie sich sehr stark ähneln...

Zitat:Tipp:
Als Anfänger (und auch als Fortgeschrittener) solltest du die Option aktivieren, in Strukturen immer das Kommentarfeld per default sichtbar zu machen - und dort dann auch Kommentare reinschreiben. So zwingt man sich von Anfang an zu besser dokumentiertem Code… Big Grin

ok Smile werd ich machen



Zitat:Wobei du den Sequenzrahmen nicht benötigen würdest, wenn du DATAFLOW mit Error-Wire anwenden würdest!

ich probiers.. also so wie es aufm Bild ist, hats bei mir nicht geklappt..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2020, 11:25
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Schleife stoppen in subVI
Hallo illy,

Zitat:das erwartete Rauschen liegt nicht über 5 mA, und da die Messung erst ab 220 mA(min. 100 ma) anfangen soll, ist das kein großer bedeutender Wert... die Messzange hat 2 Skalierungen einmal 100 mV/A und 10 mV/A...
Und wie kommst du auf das Limit von "0.00025"?

Zitat:also so wie es aufm Bild ist, hats bei mir nicht geklappt..
Kein VI von dir, keine Fehleranalyse…
Außerdem: Ich habe von LabVIEW noch nie die Fehlermeldung "hat nicht geklappt" erhalten - da kommt üblicherweise eine konkrete Angabe!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  While Schleife stoppen itz_me 4 5.894 13.04.2017 14:47
Letzter Beitrag: itz_me
  X Bildlaufleiste bei Signalverlaufsdiagram stoppen Carp 18 10.614 10.06.2016 09:57
Letzter Beitrag: Carp
  Frage zu Lauflicht stoppen(vorübergehend) fuego50 4 4.356 23.05.2016 17:05
Letzter Beitrag: fuego50
  Referenziertes VI stoppen marhi 7 5.857 08.03.2016 12:07
Letzter Beitrag: rolfk
  Parallele Schleifen beliebig stoppen/neustarten buettnerstefan 3 4.950 03.06.2015 15:23
Letzter Beitrag: buettnerstefan
  while-Schleife mit Referenz stoppen Pral 5 5.657 11.12.2014 22:17
Letzter Beitrag: Lucki

Gehe zu: