LabVIEWForum.de - Lab VIEW Bearbeitungszeit

LabVIEWForum.de

Normale Version: Lab VIEW Bearbeitungszeit
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo erstmal!!! Big Grin

Ich habe nun seit einiger Zeit ein Problem, bei dem ich einfach nicht weiter komme!
Ich hoffe ihr könnt mir dabei helfen!

Vorgeschichte:
Grundsätzlich arbeite ich an einer Software die Schrittmotoren ansteuert!!
Ich bekomme von einem externen Taktgen. (selbstgebaut ca. 150-200Hz) Takte über den Counter Eingang eines USB 6501 Boards eingelesen.
Der Schrittmotor wird über eine Treiberstufe angesteuert an der auch der Taktgen. hängt.
Ich brauche im Prinzip nur ein boolsches Enable an die Treiberstufe zu senden um den Motor zu starten der Rest erledigt sich von selbst.
D.h um jetzt eine bestimmte Schrittanzahl zu fahren lese ich den Counter kurzzeitig aus, starte dabei den Motor, addiere nun meine gewünschte
Schrittanzahl und stoppe den Motor sobald der Counter diese gewünschte Zahl erreicht hat.
Zusätzlich ist dazu eine Visualisierung programmiert, die ständig laufen soll.
Also ich gebe im Prinzip die Schritte ein, drücke einen Knopf und der Motor soll diese Schritte fahren.

So das ganze funktioniert ja am Anfang alles jedoch....

So nun zur eigentlichen Frage:
...ist mir aufgefallen, wenn ich die Visualisierung laufen lasse, dass der Motor von mal zu mal ungenauer wird.
Ich habe beobachtet das die Bearbeitung dieses SubVIs immer langsamer wird. Hab Testweise auch die Zeit gemessen und erkannt
das er bei der 20. Bearbeitung des SubVIs schon um 300ms langsamer ist als wie beim ersten mal.
Man kann dies auch sehr gut bei dem eingelesen Counter erkennen, das er schon ganz schöne Sprünge macht.
Wenn ich nun aber das ganze VI einfach beende und alles wieder neu starte, funktionierts wieder einwandfrei. Zumindest am Anfang!!

Das ganze habe ich auch nur mit einer while Schleife getestet, die ich nur 50 mal abarbeiten lasse.
Ergebnis: Ist im Prinzip dasselbe, wird von mal zu mal langsamer.

Mir ist auch durchaus bewusst das Globale sowie Lokale Variablen die Performance verlangsamen, darum
habe ich auch beachtet, diese so gut es geht nicht zu benutzen. Außerdem erstelle ich auch einen virtuellen Kanal, den
ich aber gleich danach wieder stoppe bzw. lösche. Außerdem ist die CPU Auslastung während der Bearbeitung noch im
akzeptablen Bereich.

Darum vestehe ich auch das ganze nicht????
Mir kommt es so vor als ob in Lab VIEW ein Speicherplatz beschrieben wird, der mit der Zeit voll wird und das das Überschreiben
diese Speicherplatzes einfach länger dauert als das erstmalige speichern beim Anfang!!


Sorry für diesen Roman, aber ich habe versucht so gut es geht, aller Unklarheiten von Anfang an auszuschließen
Ich Bitte um Eure Hilfe!!!


mfg Cerbi


Ps.: Wer Rechtschreibfehler findet......... .........kann sie behalten.Lol

Lv85_img
Mit Hilfe der Leistung und Speicher Funktion, habe ich mir die ganzen Laufzeiten aller verwendeten VI´s mal angekuckt.
Der einzige Grund für die ständige "Verlangsamung" des VI´s ist, das VI "DAQmx task starten".
Die Laufzeit genau bei diesem VI wird immer größer und größer!!

Ich beende zwar in meinem VI den virtuellen Kanal, aber ich glaube, dass erst beim Beenden des ganzen VI´s der Speicher auch gelöscht wird.
Wenn man im laufenden VI immer einen Task neu startet, auch wenn es derselbe ist, glaube ich, kommt es zu einer höheren Belastung.

Dieser pendelt sich zwar mit der Zeit auf einen Spitzenwert ein, jedoch liegt dieser aufgrund, meines Aufbaus von +300ms vom Anfangswert.
Diese +300ms sind bei meinem Motor ein Unterschied von ca. 3mm, und das ist Leider überhaupt nicht akzeptabel.

Ich glaube meine einizige Chance zurzeit ist es, mein VI einfach derart schneller zu gestalten, dass sich dies nicht mehr so viel auswirkt.
In Bezug auf Variablen und Berechnungen in den Schleifen.


Falls einer eine Idee bzw. Vorschläge hat, wie ich dies anstellen könnte, soll er sich Bitte Melden. Danke!!

mfg Cerbi
Wenn du dir die Examples oder die ExpressVIs anschaust muss dir aufallen, dass ein Kanal oder Task während der Ausführeng einmal erstellt und geschlossen wird. Du müsstest eben als erstes die Tasks/Kanäle erstellen und dem SubVi nur darauf lesen bzw. schreibe. Und erst wenn das Programm beendet wird alles stoppen und zurücksetzen.
Vielleicht hilft dies weiter?

http://digital.ni.com/public.nsf/allkb/C71...6256D260069B63B

Würde auch empfehlen: Task nur einmal kreieren. Wenn du den Task während des Programm Ablaufs nicht brauchst, dann stoppst du ihn nur, und dann wird er wieder gestartet.
ClearTask erst ganz am Programm-Ende.

Gruß, Jens

P.S.: In deinem RAR-Upload fehlen 2 SubVIs...Sad
Problem gelöst!!
Es war wie ihr euch schon denken könnt, das mehrmalige kreieren eines Tasks.
Nun bleibt die Bearbeitungszeit immer schön gleich!!! O
Die Ironie darin liegt, dass es eigentlich zwei Arten des beendens eines Tasks geben soll, wie im Link
von Jens G beschrieben ist. Jedoch stimmt das Leider nicht so ganz.

Laut Beschreibung von NI:(So hab ich es zumindest verstanden)
DAQmx Start: Startet den Kanal und setzt ihn von "idle" auf "running" (Nochmaliges aufrufen erzeugt Fehler)
DAQmx Stop: Stoppt den Kanal und setzt ihn von "running" auf "reserved" (Nochmaliges aufrufen soll wieder Fehler erzeugen)
DAQmx Clear: Stoppt den Kanal und setzt ihn von "running" auf "idle" (Somit kann Kanal wiederholt aufgerufen werden)

Die Wirklichkeit ist, dass die "Stop" Funktion den Task stoppt sodass er auch wiederholt aufgerufen werden kann, dasselbe gilt
auch für die Clear Funktion. Dennoch führt beide Methoden mit der Zeit zu Performance verlusten. Aufgrund des ausgelasteten Speicher,
glaub ich zumindest!!

So nun die funktionierende Version (Ist nicht hübsch geordnet, funktioniert aber!!)
[Bild: lv85_img.jpg]
[attachment=18514]


' schrieb:P.S.: In deinem RAR-Upload fehlen 2 SubVIs...Sad
Sorry habs bemerkt, darum hier nochmal die falsche Version
[Bild: lv85_img.jpg]
[attachment=18515]
Offtopic2
Du kannst auf fast alle Sequenzstrukturen verzichten:
[attachment=18516]
[attachment=18517]
Gruß, Jens
Danke für den TIPP!!!
Hab halt noch einiges zu lernen!!!Lol
Referenz-URLs