LabVIEWForum.de
Schleife stoppen in subVI - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Schleife stoppen in subVI (/Thread-Schleife-stoppen-in-subVI)

Seiten: 1 2 3 4


RE: Schleife stoppen in subVI - GerdW - 08.09.2020 12:12

Hallo illy,

leider hast du noch nicht meine Empfehlungen umgesetzt…
Als erstes: du hast nirgends AutoCleanup benutzt!?

Zitat:Dass in den VI die Graphen dran gehängt werden, ist ein MUSS
Fang doch erstmal mit den "leichten" Sachen an und mach das "Schwierige" dann hinterher!
Warum jetzt wieder in beiden subVIs diese riesige Schleife, in der ewig lange Waveform angesammelt werden? Lass das doch für den Anfang mal weg!

Außerdem hatte ich dir doch gezeigt, dass die Anzeige ins Main.VI rüber soll - mit Datenübergabe per Queue!

Wenn ich dein Main öffne, sehe ich ganz viele fehlerhafte Drähte: wo kommen die her?

Außerdem:
Wenn du Plots in den Graphen (un)sichtbar machen willst, dann verwende doch einfach die Visibility-Buttons in der Plotlegende. Kein Grund, zwei Schleifen nur für die Auswahl der sichtbaren Plots auf ewig laufen zu lassen!

Zitat: ich muss alle Daten über die gesamte Messzeit herausnehmen und auswerten können.
Bei 50kHz Samplerate macht man so etwas aber nur bedingt "live"!
Man kann die Messdaten gern in Dateien speichern und hinterher nach Belieben auswerten…


RE: Schleife stoppen in subVI - jg - 08.09.2020 12:21

Also was dir ganz fürchterlich die Performance deines Main-VI zerhaut ist das ständige Setzen von Eigenschaften bei deinen Graphen.

JEDES Schreiben dieser Ploteigenschaften (selbst wenn sie sich nicht ändern) erzwingt einen Wechsel in den UI-Thread inkl. einem Frontpanel-Update. Deine beiden Schleifen links alleine sorgen also für schon 8 FP-Updates pro 100 ms.

Offtopic2 Diese Plot-sichtbar machen wäre übrigens wesentlich besser verständlich, wenn du erst die PropertyNode "Active Plot" und dann die Eigenschaft "Visible" setzt, dann gehört das immer zusammen.

Gruß, Jens


RE: Schleife stoppen in subVI - illy777 - 08.09.2020 13:43

Hallo GerdW,

ja, ich hattes so gemacht wie du, das war aber das Backup was noch funktioniert hat(Hab übrigens die 2017 v. aufgemacht vom backup, und da waren tatsächlich einige Sachen die gefehlt haben, ich nutze auch die NXG-Darstellung, und dann kam tdm die Fehlermeldung ungültiger Eingangsparameter.

ich werdes nochmals machen und dann hochladen, aber erst morgen..

MfG

(08.09.2020 12:21 )jg schrieb:  Also was dir ganz fürchterlich die Performance deines Main-VI zerhaut ist das ständige Setzen von Eigenschaften bei deinen Graphen.

JEDES Schreiben dieser Ploteigenschaften (selbst wenn sie sich nicht ändern) erzwingt einen Wechsel in den UI-Thread inkl. einem Frontpanel-Update. Deine beiden Schleifen links alleine sorgen also für schon 8 FP-Updates pro 100 ms.

Offtopic2 Diese Plot-sichtbar machen wäre übrigens wesentlich besser verständlich, wenn du erst die PropertyNode "Active Plot" und dann die Eigenschaft "Visible" setzt, dann gehört das immer zusammen.

Gruß, Jens

Hi Jens, danke für den Hinweis,

hab jetzt ein Ereigniscase genutzt, aber iwie funktioniert das nur 1 mal und dann gehts nicht mehr.


RE: Schleife stoppen in subVI - GerdW - 08.09.2020 14:19

Hallo illy,

Zitat:hab jetzt ein Ereigniscase genutzt, aber iwie funktioniert das nur 1 mal und dann gehts nicht mehr.
Hast du doch so programmiert!
Du hast eine Event-Struktur, die auf ein Event wartet. Wenn das Event dann kommt, wird die Struktur abgearbeitet und dann beendet.
Wenn jetzt noch ein Event kommt, ist aber keine Eventstruktur mehr da, die darauf wartet.
Das gehört immer noch zu den Grundlagen: THINK DATAFLOW!

Tipp: Wie wäre es, wenn diese Eventstruktur innerhalb einer Schleife liegen würde? Könnte sie dann mehrmals auf ein Event reagieren!?
Nachfrage: wie war das mit AutoCleanup?

Immerhin hast du nun wenigstens einem der beiden Enums ein Label gegeben. Ist das bei dir üblich, dass du FP-Elementen kein Label gibst (bzw. ein vorhandenes weglöscht)?
(Beispiel: in einer textbasierten Programmiersprache würdest du doch wohl auch nicht ""=""+"" schreiben, wenn du eigentlich c=a+b meinst, oder?)


RE: Schleife stoppen in subVI - illy777 - 08.09.2020 16:53

Hey GerdW,

ja ich denke ich muss THINKDATAFLOW zu meinem Motto machen, in der Schleife geht das ja wunderbar.. hatte natürlich nicht daran gedacht Big Grin

Was die riesen-Schleifen angehen, hast du vllt einen Tipp wie ich das sonst machen kann? ich meine ich würde gern die "Lifewerte" anzeigen lassen, aber wenns nun mal die Performance zerstört, dann werde ich wohl oder übel meine Anfangsidee aufgeben müssen.

ich habs jetzt so überarbeitet, dass es dir vllt besser gefällt Wink

also ich habs nicht ausprobiert, aber das letzte mal wo ich das genauso gemacht habe, hat er mir den schon besagten Fehler ausgegeben...

danke für die Tipps!

MfG


RE: Schleife stoppen in subVI - GerdW - 08.09.2020 17:52

Hallo illy,

Zitat:Was die riesen-Schleifen angehen, hast du vllt einen Tipp wie ich das sonst machen kann? ich meine ich würde gern die "Lifewerte" anzeigen lassen,
Die Live-Werte zeigst du doch an - dir fehlt momentan nur die Historie der Live-Werte…

Ich habe dein MainVI noch etwas vereinfacht, siehe Anhang.
Warum muss man ein Array aus 3 Waveforms in seine Einzel-Waveforms aufteilen und jede davon mit exakt demselben Faktor skalieren? Skaliere doch gleich das Array!
Und warum muss man danach wieder ein ExpressVI verwenden, um aus den 3 Waveforms ein Array of Waveforms zu bauen?

Lass das mal laufen und berichte, ob es so erstmal stabil arbeitet…

Danach kümmern wir uns um Erweiterungen dieses VIs - wie z.B. ein globales Stopp, damit du nicht mehr unendlich laufende Schleifen auf die harte Tour abbrechen musst…


RE: Schleife stoppen in subVI - illy777 - 09.09.2020 08:58

Hallo GerdW,

ja es hat geklappt! Danke!

ich hab jetzt beschlossen die liveanzeige zu lassen und das Bild im Nachhinein zu speichern, zumal ich auch die Messdaten eh iwo speichern muss...


RE: Schleife stoppen in subVI - illy777 - 11.09.2020 12:05

Heey Leute,


ich habe ein weiteres Problem, @GerdW: ich habe die Schleifen in meiner Main VI so umgesetzt wie du es empfohlen hast, nun kann ich aber nicht die Drehzahl VI so machen... Jedes Mal stoppt er nicht, wenn die Messung zu Ende ist und die angeforderten Bedingungen erfüllt sind.

Ich schick das Programm und die VI rein:

Weißt du da eine Lösung? Oder jemanden?


Mit freundlichen Grüßen!


RE: Schleife stoppen in subVI - GerdW - 11.09.2020 15:51

Hallo illy,

ein paar grundsätzliche Hinweise:
Statt 3+ Attachments kannst du alles in eine (1) ZIP-Datei packen. Ist viel einfacher beim Download!
Wenn du dann schon zippst, dann bitte auch das komplette Programm (bzw. den kompletten Ordner) - es fehlen einige subVIs und globale Variablen!
Außerdem solltest du zusätzlich noch ein LV-Projekt zur Verwaltung deiner ganzen VIs nutzen - auch das gehört in diesen Ordner und damit auch in das ZIP-File…

Denke daran, Rube-Goldbergs möglichst von Anfang an zu vermeiden.
String-Formatierung kann man sehr einfach mit FormatIntoString erledigen:
[attachment=61271]
(Warum hast du in deinem Original die Float-Werte als Integer formatieren lassen?)
Warum finden sich da etliche unbenutzte Terminals im Main.VI, wenn woanders andauernd auf lokale Variablen (oder Value-Properties) zurückgegriffen wird?
Bitte nicht InsertIntoArray nutzen, wenn BuildArray das gleiche (viel einfacher) erledigen kann!

Zitat:ch habe die Schleifen in meiner Main VI so umgesetzt wie du es empfohlen hast, nun kann ich aber nicht die Drehzahl VI so machen... Jedes Mal stoppt er nicht, wenn die Messung zu Ende ist und die angeforderten Bedingungen erfüllt sind.
Leider fehlt das zugehörige VI "RPM"…
Es dürfte sich aber um ein THINK DATAFLOW-Problem handeln: hast du mal per Debugging nachgeschaut, was da passiert (oder auch nicht passiert)?


RE: Schleife stoppen in subVI - illy777 - 14.09.2020 13:57

Hallo Leute!

hier poste ich soweit alles was ich bisher gemacht habe...@GerdW

1. Folgende Probleme haben sich noch herauskristallisiert, der Abbruch Button wird nach Beenden der Schleife nicht false, aber das denke ich kriege ich hin, aber falls du eine schnelle Lösung findest, wär ich euch sehr dankbar!

2. Die Drehzahlerfassung über die Messkarte.. Wie bewirke ich, dass DAQmx-Lesen trotz lange Zeit keine Impulssignale trotzdem eine 0 rausschickt,in unterschiedlichen Zeitabständen?


3. Hab ich schon in nem anderen Thread gefragt, aber hier nochmal: Das VI "Grenzstromsignal" ist zu langsam, ich brauche eine Triggerung die fast keine Verzögerung hat... weiß jemand einen Weg?

4. Ich entschuldige mich wirklich für meine Sauprogrammierung, aber ihr wisst ich bin neu und muss dieses Projekt in 2 Wochen fertig haben!


Ich danke euch für die wirklich gute Unterstützung die ihr mir bisher gegeben habt, vor allem GerdW!


Mit freundlichen Grüßen,


PS: DIE VI DIe gerade bei Main verwendet wird(die Grenzstromsignal VI) war nur ein Test den ich blöderweise so gespeichert habe. Eine Kopie ist bei "vergessene".