Schleifendurchlaufszeit - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Schleifendurchlaufszeit (/Thread-Schleifendurchlaufszeit) |
Schleifendurchlaufszeit - knutroggers - 07.03.2008 18:26 Hallo, ich hab wiedermal eine Frage - hatte ich schon mal so ähnlich gestellt, aber ich konnte es noch nicht lösen Wenn man das VI aus dem Anhang laufen lässt, wird in der Mitte unten die Schleifendurchlaufzeit angzeigt. Wenn der Schalter auf False ist, hab ich eine Schleifendurchlaufszeit von ca. 15 ms, wird er auf True geschaltet (werden die Grafiken und alle Anzeigen ständig aktualisiert) erhöht sich die durchlaufzeit erheblich. Gibt es eine Möglichkeit, das ganze besser zu implementieren, damit es schneller abgearbeitet wird? Die beste Lösung die ich gefunden hab, ist an die Stelle der Schalters einen "Elipsed Timer" (mit zB 0,1 sec) hinzusetzen - also wird nur alle 0,1 sec aktualisiert - Nachteil: es ruckelt, und alle 0,1 sec hab ich erst wieder einen langsameren Durchlauf. Und, wenn der Schalter auf False ist - wie kann man die Schleifendurchlaufzeit noch verbessern? Optimal wäre für mich max. 5ms, allerdings, benötige ich mindestens eine FFT, sowie 1-2 Filter - geht das überhaupt? Und was mir noch aufgefallen ist: In der Time-Array-Anzeige sieht man (entweder Schalter auf True, kurz laufen lassen - stoppen, oder Schalter auf False, dann auf True um es anzuzeigen - bleibt sich egal, ist in beiden Fällen so), dass recht oft zwei oder noch viel mehr Arrayeinträge gleich sind - warum? Wie kann es das geben? Hoffentlich konnte ich mein Problem (mit dem ich mich nun schon ewig rumschlage) halbwegs erklären. Lg Reinhard LV 8 [attachment=11509] Schleifendurchlaufszeit - knutroggers - 07.03.2008 20:40 Ich hab hier meine Frage mal ziemlich reduziert: [attachment=11510] (LV 8.0) Wenn man die richtige Stelle sucht, findet man sowas: [attachment=11511] Kann es sein, dass "Elipsed Time" nur eine Auflösung von 15 ms hat? Falls dies der Fall ist, funktioniert es quasi eh richtig, kann nur nicht dargestellt werden. Aber das Eigentliche Problem mit der Schleifendurchlaufszeit bleibt bestehen Grüße Reinhard Schleifendurchlaufszeit - altissimus - 07.03.2008 21:32 nimm statt dem express vi das tick count im ms aus derselben kategorie und dann lass dir mehr stellen anzeigen, dann siehst du dass du viele schleifendurchläufe hast (bei mir waren es 50 pro ms) ich habs in screens dir angezeigt hannes Schleifendurchlaufszeit - IchSelbst - 07.03.2008 21:43 Guck dir mal die DLL von hier an. Da gibt es eine Zeitmessung mittels QueryPerformanceCounter. Der kann (siehe PSDK) im Prozessortakt auflösen. Mit dem Einbau wie im Bild komme ich mit Boolean=true auf ca. 15ms bis 20ms. Bei Boolean=false auf ca. 200µs. Schleifendurchlaufszeit - jg - 07.03.2008 22:34 Ein absoluter Performance-Killer ist auch das über den Graphen gelegte Array... Nebeneinander, und schon geht es deutlich schneller... MfG, Jens Schleifendurchlaufszeit - knutroggers - 07.03.2008 23:42 Danke schon mal für die schnellen Antworten, das mit dem Express VI hab ich schon geändert - das war auf jedenfall ein super Tipp! (ja, ich hab auch schon eingesehn - 2 Monate Gefängnis ;-) ) Das mit dem QueryPerformanceCounter - lässt sich das problemlos als LV 8.0 speichern? Wenn ja - wäre supernett Jens, wie meinst du ich soll das Array, neben die Graphen legen, nicht darüber? Bitte um eine ganz kurze Erklärung. lg Reinhard Schleifendurchlaufszeit - jg - 08.03.2008 18:13 ' schrieb:Danke schon mal für die schnellen Antworten, das mit dem Express VI hab ich schon geändert - das war auf jedenfall ein super Tipp! (ja, ich hab auch schon eingesehn - 2 Monate Gefängnis ;-) )Lad die DLL (s. Link oben) runter und binde die Aufrufe ein... ' schrieb:Jens, wie meinst du ich soll das Array, neben die Graphen legen, nicht darüber? Bitte um eine ganz kurze Erklärung.Du hast doch über den Graphen dein Array (wenn auch nur zu Testzwecken) drüber gelegt. Mach das nicht, wenn es auf Performance ankommt. Controls nicht überlappen lassen! Und zu Performance: Probier doch mal eine eigenen "Anzeigeschleife" parallel zur "Rechenschleife", wobei du die Daten dann z.B. per Notifier oder Queues übertragen kannst. MfG, Jens Schleifendurchlaufszeit - IchSelbst - 08.03.2008 20:13 ' schrieb:Lad die DLL (s. Link oben) runter und binde die Aufrufe ein...Genau das hätte ich auch vorgeschlagen. Im Textfile stehen die Werte des Enumerators. Einbinden genau so, wie es das Bild (siehe oben) zeigt. Hier aber eine LV 8.0 Version mit einen TestVI für QPC (also mit Enumerator-Definition für C&P). |