LabVIEWForum.de - Wait [ms] in Case Structure zu langsam

LabVIEWForum.de

Normale Version: Wait [ms] in Case Structure zu langsam
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ich habe folgendes Problem:
Über eine Case Structure lasse ich einen Countdown ablaufen. Den Anfangswert (in Sekunden) kann ich beliebig vorgeben. Die Wait[ms].vi ist mit 100 beaufschlagt, so dass in einem Durchlauf 0,1 s von dem Ausgangswert (z.B 3 Sekunden) abgezogen wird (alle 100ms).
Wenn ich dies nun aber mit ner Stoppuhr kontrolliere, sind es eher 4 statt der 3 vorgegebenen Sekunden. Meine Systemzeit läuft aber normal.
Was kann ich dagegen tun? Kann ich die Zeit exakt an die Systemzeit koppeln, oder die Priorität hochsetzen, dass unbedingt der Countdownbefehl ordentlich umgesetzt wird?

besten Gruss
Hallo Nils

Zu beachten ist, das die Ausführung nicht 100ms dauert, sondern der Code an dieser Stelle 100ms "wartet". Falls du nun aufwendige Berechnungen oder Ähnliches brauchst kann es schon vorkommen, dass der Code insgesamt länger zum ausführen braucht.

Für dein Problem würde ich dir die anderen Funktionen von der Timing-Palette ans Herzen legen.

[attachment=21737]
' schrieb:Hallo Nils

Zu beachten ist, das die Ausführung nicht 100ms dauert, sondern der Code an dieser Stelle 100ms "wartet". Falls du nun aufwendige Berechnungen oder Ähnliches brauchst kann es schon vorkommen, dass der Code insgesamt länger zum ausführen braucht.

Für dein Problem würde ich dir die anderen Funktionen von der Timing-Palette ans Herzen legen.

[attachment=49879:L_sung_Timer.png]
Allerdings wirst du mit Softwaretiming nie ein genaues Ergebnis erzielen.
Vielen Dank soweit. Ich probiere das mal mit dem "Time Elapsed".vi aus.
@abrissbirne: Müsste ich sonst mit ner externen clocksource realisieren? oder wie fkt. es sonst noch?

besten gruss
Software-Time ist nicht ganz einfach und hängt von verschiedenen Faktoren (z.Bsp. Rechenleistung/Proz.) ab.
Mit modernen Rechner ist es aber, bis auf die Ungenauigkeit von Windows, mit geeignetem Code recht gut beherrschbar. LabVIEW Compiler ist da sehr schlau.

Anbei ein Bsp. (sieheBild1)
Mit der Verbindung im roten Kreis dauert das bei mir ca. 2970ms. Da alles nacheinander abgearbeitet wird.
(Warten 2800ms + Array erstellen) Das wird noch durch die vorhandene Rechenleistung beeinflusst.

Wenn ich die Verbindung im roten Kreis entferne dauert das bei mir genau 2000ms. (mit Wait nicht Wait Until Next ms Multiple) Die gesamte Wait-Zeit wäre ja 2800ms.

Anstelle des Elapsed Time würde ich das „Wait Until Next ms Multiple” vorschlagen, wenn es noch nötig ist. (siehe Bild2)
Das dauert auch ca. 2000ms auch mit der Verbindung welche im obigen Bsp. die Ausführungsdauer verlängerte.
Erstaunlicherweise ist das Bsp.2 genauer mit dieser Verbindung.

Am besten man spielt etwas rum und beobachtet das verhalten mit verschiedenem Code.
Ich bin immer wieder überrascht, was kleine Änderungen für Auswirkungen haben.
Auf alle Fälle sehr interessant.
Ich habe jetzt aber den gewünschten Effekt mit elapsed time erreicht. Mir war eine Verringerung der Verzögerung wichtig und das habe ich erreicht. Vielen Dank dafür @ M Nussbaumer.
Aber mich würde immernoch die Hardware-Variante interessieren. Also wenn jemand weiss wie das geht, wie man Signale als Timecode benutzt etc., dann würde ich mich über eine Darstellung sehr freuen.

besten Gruss
die Stoppuhr ist in dem Fall das falsche Element ... verwende das Metronom (parallel zu deinem Code) und so lange die Berechnungen in dem Case nicht länger als die eingestellte Wartezeit dauern wird die Schleife "genau" mit der eingestellten Wartezeit getaktet - zumindest so lange Windows diesem Thread die nötigen Ressourcen zuteilt ...
' schrieb:Auf alle Fälle sehr interessant.
Ich habe jetzt aber den gewünschten Effekt mit elapsed time erreicht. Mir war eine Verringerung der Verzögerung wichtig und das habe ich erreicht. Vielen Dank dafür @ M Nussbaumer.
Aber mich würde immernoch die Hardware-Variante interessieren. Also wenn jemand weiss wie das geht, wie man Signale als Timecode benutzt etc., dann würde ich mich über eine Darstellung sehr freuen.

Dazu musst Du Dir die Timed Loop genauer anschauen. Eigentlich für Realtime Targets gedacht und bei der Einführung in LabVIEW 7, auf Desktop-Systemen manchmal etwas bockig, aber macht genau was Du meiner Meinung nach fragst. In neueren LabVIEW Versionen kannst Du Timer von einer NI DAQ Karte als Timing Source verwenden. Am Anfang war es glaube ich nur ein Softwaretimer der aber sehr tief im OS Kernel angesiedelt war und deshalb ziemlich exact.

Rolf Kalbermatter
Referenz-URLs