LabVIEWForum.de - Prüfstand mit LabVIEW ansteuern - Schleife mit vielen Zyklen

LabVIEWForum.de

Normale Version: Prüfstand mit LabVIEW ansteuern - Schleife mit vielen Zyklen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Moin allerseits!

Da das mein erstes Posting hier ist, ein paar kurze Infos vorweg: ich bin wissenschaftlicher Mitarbeiter an einer Hochschule und das auch schon eine ganze Weile. Mit LabVIEW habe ich schon vor Jahren gearbeitet, aber immer nur sporadisch mal.

Wir haben einen Prüfstand bekommen, den ich in Sachen Steuerung unf Datenerfassung komplett neu aufgesetzt habe. Es funktioniert soweit auch alles mittlerweile, nur eines nicht richtig: der Prüfstand hat einen Linearaktor, den ich aus LabVIEW heraus über digitale Ausgänge ansteuere. Da der Antrieb eine Reihe von Zyklen lang vor- und zurückfahren soll, habe ich das Ganze als For-Loop ausgeführt.

Bis zu einer gewissen Zahlvon Zyklen klappt das auch, aber bei ca. 600 Zyklen wird es sehr langsam und dann ist Schluss. Ich dachte erst, es läge an der Datenspeicherung, die permanent mitläuft, aber das Problem tritt auch auf, wenn ich den Eingang ins "Write to Measurement File" kappe.

Mein Frage also: ist eine For-Loop die richtige Wahl, oder geht es auch anders? Oder klappt es doch irgendwie mit sehr vielen Loops?

Ich habe das VI in der 18er Version angehängt.

Viele Grüße
Thomas
Hallo Thomas,

herzlichen willkommen im LabVIEW-Forum!

Zitat:Es funktioniert soweit auch alles mittlerweile, nur eines nicht richtig: der Prüfstand hat einen Linearaktor, den ich aus LabVIEW heraus über digitale Ausgänge ansteuere. Da der Antrieb eine Reihe von Zyklen lang vor- und zurückfahren soll, habe ich das Ganze als For-Loop ausgeführt.

Bis zu einer gewissen Zahlvon Zyklen klappt das auch, aber bei ca. 600 Zyklen wird es sehr langsam und dann ist Schluss. Ich dachte erst, es läge an der Datenspeicherung, die permanent mitläuft, aber das Problem tritt auch auf, wenn ich den Eingang ins "Write to Measurement File" kappe.

Mein Frage also: ist eine For-Loop die richtige Wahl, oder geht es auch anders? Oder klappt es doch irgendwie mit sehr vielen Loops?
Die Schleife an sich ist nicht dein Problem - die erzeugt so gut wie keinen Overhead…

Dein Problem ist diese elendig lange Sequenzstruktur.
Dein Problem ist das andauernde Öffnen/Schließen des DO-Tasks!

Also lautet die Antwort:
Erstelle eine Statemachine, um deinen Ablauf zu automatisieren! (Oder wenigstens eine innere FOR-Loop, die die Ausgabewerte in den Port schreibt…)
Wichtig: den DAQmxTask nur EINMAL vor der Schleife anlegen und nur EINMAL nach der Schleife beenden!

Ansonsten:
- Einfach mal AutoCleanup benutzen!
- Rube-Goldbergs vermeiden, wie z.B. ein Array mit ArrayToCluster in einen Cluster umzuwandeln, nur um dann mit Unbundle auf die Elemente zuzugreifen! Dafür gibt es IndexArray…
- In die Messschleife gehört ein Timing…
- Versuche auf ExpressVIs und DDT-Drähte zu verzichten, die helfen dir nicht wirklich weiter…
- Vermeide unnötige CoercionDots…

Vorschlag:
[attachment=62467]
Moin Gerd,

vielen Dank für de Antwort! Ich werde es gleich mal umsetzen. Das sieht in der Tat weitaus aufgeräumter aus als bei mir. Ich war sehr froh, dass ich es grundsätzlich ans Laufen bekommen habe, hatte aber schon die Vermutung, dass das auch einfacher gehen sollte.

Viele Grüße
Thomas
Moin!

Hat leider reichlich gedauert, aber jetzt endlich: Vielen Dank für Deinen Tipp! So hat es einwandfrei geklappt. Cool

Viele Grüße
Thomas
Referenz-URLs