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: