INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Zeitschleife läuft zu schnell oder zu langsam



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.12.2009, 18:31
Beitrag #1

MC_Garnickl Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Nov 2009

8.5
-
de

85354
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
Guten Abend zusammen,

ich hätte eine kurze Frage zu der Zeitschleife. Bei dem von mir erstellten Programm befindet sich das Einlese VI der Messgeräte sowie der Schreibvorgang in ein Textfile in einer Zeitschleife. Mit meinem Programm möchte ich in 10 Sekunden 20.000 Messwerte erfassen an 5 Spannungseingängen. Nun habe ich die Schrittweite der Schleife auf 0,5 Millisekunden gestellt und eine 1kHz Taktung ausgewählt.
Zusätzlich lasse ich noch über den Wert Verstrichene Zeit über das gleichnamige VI in die Datenerfassungsdatei schreiben. Klappt auch soweit alles super, außer das das Programm meist schon nach 8 Sekunden durchgelaufen ist. Die Werte schwanken aber auch mal weniger, mal stärker. Wenn man das ganze mit 1 ms macht und 10.000 Durchläufen in der Zeitschleife, dauert der Spaß etwa 10 Sekunden, aber auch hier sind Schwankungen enthalten im 100 ms Bereich.

Die Zeitschleife enthält ja auch Ausgangsdaten, unter anderem auch:
- Erwartetes Ende
- Tatsächliches Ende

Diese Werte stimmen auch fast exakt mit der aufgezeichneten Zeit des VI´s "Verstrichene Zeit" überein.
Also eigentlich weiß die Zeitschleife, das sie zu schnell oder zu langsam läuft, und ist trotz alledem falsch Wall

Ist LabVIEW mit so einer hohen Abtastrate einfach überfordert oder hab ich da was grundsätzliches falsch gemacht. In Fachliteratur hab ich gelesen, das die Zeitschleife eigentlich extra dafür entwickelt wurde, dieses Problem das eigentlich bei einer simplen While-Schleife mit Verzögerung auftreten kann zu beheben.
Über Antworten würde ich mich sehr freuen :-)

Mein Programm kann ich leider nur sehr schlecht hier posten. Hoffe man versteht trotz alledem mein Problem :-)

Beste Grüße

Lv86_img
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
02.12.2009, 19:07 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2009 19:08 von jg.)
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
Rückfrage:
Wo lässt du diese Timed-Loop laufen. So wie ich es verstehe, auf Windows (nicht einem Real-Time-Target). Dort ist die theoretische Auflösungsgrenze 1 ms. Schrittweite 0,5 ms ist somit nicht zulässig!
Wo kommen eigentlich deine Daten her?

Und das Schreiben in eine Datei würde ich auch nicht in einer Timed-Loop machen. Daten lieber per Queue an eine andere Schreibe-Schleife übergeben.

Genaueres lässt sich ohne Screenshot oder noch besser VI-Upload nicht sagen...

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.12.2009, 19:18
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
' schrieb:Wo kommen eigentlich deine Daten her?
Na, die werden in genau dieser Schleife eingelesen: 0,5ms bei 10s macht 20.000 Werte.

Ich würde das ja ganz anders machen. DAQmx-Task erstellen, die mit 2kHz die Daten sampelt. In einer parallelen While-Schleife mit Raster 50ms wird mittels DAQmx-Read der DAQmx-Puffer ausgelesen (= leer gelesen!). Die ausgelesenen Daten kann man aufsummieren, per Queue oder Melder versenden - oder vieles mehr.

LV ist gerade zu prädestiniert genau diese Aufgabe zu lösen. Du musst nur das richtige Verfahren anwenden.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.12.2009, 19:27
Beitrag #4

MC_Garnickl Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Nov 2009

8.5
-
de

85354
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
' schrieb:Rückfrage:
Wo lässt du diese Timed-Loop laufen. So wie ich es verstehe, auf Windows (nicht einem Real-Time-Target). Dort ist die theoretische Auflösungsgrenze 1 ms. Schrittweite 0,5 ms ist somit nicht zulässig!
Wo kommen eigentlich deine Daten her?

Und das Schreiben in eine Datei würde ich auch nicht in einer Timed-Loop machen. Daten lieber per Queue an eine andere Schreibe-Schleife übergeben.

Genaueres lässt sich ohne Screenshot oder noch besser VI-Upload nicht sagen...

Gruß, Jens
Hallo Jens,

Das mit der Auflösungsgrenze hörst sich schon mal ziemlich Interessant an :-)
Hmm, vielleicht würde es ja funktionieren, wenn man einen Frequenzgenerator als Triggerquelle verwendet ...

Die Daten kommen von einem NI USB 6211

Also ich bin dir ziemlich dankbar, weil das mit der Auflösungsgrenze ein ausgezeichnetes Argument für mich ist, da hätte ich wahrscheinlich stundenlang irgendwelche Fachliteratur wälzen müssen um da mal zufällig drauf zu stoßen :-)
Damit hab ich mal etwas wo ich weiter ansetzen kann. Ich werde das mal ausprobieren und dann hier posten was rausgekommen ist ;-)

Noch einen schönen Abend

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.12.2009, 19:28 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2009 19:31 von jg.)
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
' schrieb:Wo kommen eigentlich deine Daten her?
' schrieb:Na, die werden in genau dieser Schleife eingelesen: 0,5ms bei 10s macht 20.000 Werte.
Ich wollte wissen, von welcher Hardware diese Daten kommen. Bisher hat MC_Garnickl nur was von "Einlese VI der Messgeräte" geschrieben, das kann alles Mögliche bedeuten. Vielleicht hat er gar keine NI-DAQ-Karte im Einsatz.

Moment, wo ist die GlaskugelGlas1, Mist, schon wieder defektGlas2Tongue

Gruß, Jens

EDIT: Ah, neue Info, USB-6211, dann trifft natürlich der Tip von IchSelbst ins Schwarze. Daten mit dem internen Hardware-Takt der DAQ-Karte einlesen, und immer schön in Paketen von z.B. 50ms oder ähnlich abholen.

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.12.2009, 19:42
Beitrag #6

MC_Garnickl Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Nov 2009

8.5
-
de

85354
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
' schrieb:Na, die werden in genau dieser Schleife eingelesen: 0,5ms bei 10s macht 20.000 Werte.

Ich würde das ja ganz anders machen. DAQmx-Task erstellen, die mit 2kHz die Daten sampelt. In einer parallelen While-Schleife mit Raster 50ms wird mittels DAQmx-Read der DAQmx-Puffer ausgelesen (= leer gelesen!). Die ausgelesenen Daten kann man aufsummieren, per Queue oder Melder versenden - oder vieles mehr.

LV ist gerade zu prädestiniert genau diese Aufgabe zu lösen. Du musst nur das richtige Verfahren anwenden.

Hey,

das klingt ja gleich noch viel besser. Also doch nicht ganz so auswegslos :-)
Also das werde ich auf jeden Fall auch noch ausprobieren. Dann war wohl die unterschiedliche Taktung das Problem

Auch dir vielen Dank für die schnelle Antwort

Am Montag komme ich ins Labor, dann werde ich gleich mal alles ausprobieren und hier schreiben ;-)

Beste Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.12.2009, 09:04 (Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2009 09:19 von dimitri84.)
Beitrag #7

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
Ich versteh' da was nicht ...

' schrieb:In einer parallelen While-Schleife mit Raster 50ms wird mittels DAQmx-Read der DAQmx-Puffer ausgelesen (= leer gelesen!). Die ausgelesenen Daten kann man aufsummieren, per Queue oder Melder versenden - oder vieles mehr.
Parallele While-Schleife zu was denn? Wenn er 20k Samples in 10 Sekunden haben will, warum stellt er nicht einfach den Modus auf endliche Anzahl, die Anzahl der Samples beim 'DAQTiming VI' auf 20k und beim 'DAQRead VI' auf z.B. 50 Samples und die Sampling-Rate auf 2kHz und fertig. Wozu braucht man jetzt 'ne Queue oder Melder?

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.12.2009, 09:57
Beitrag #8

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
' schrieb:Parallele While-Schleife zu was denn?
Zum Rest des Universiums, also seines Programmes. Big Grin
Man kann jede Applikation aus Modulen zusammenbauen. Ein modularer Aufbau hat diverse Vorteile. Einer davon ist, dass man ein Modul als Standalone-Paket betrachten kann, das dann selbstsicher programmiert werden kann. Module können auch als eigenständige Task innerhalb des Gesamtsystems laufen. Sie werden dann im Timesharing-System ausgeführt, sodass alle Module PARALLEL ausgeführt werden. Ein Nachteil des modularen Aufbaus: Man muss eine Schnittstelle zwischen den Modulen explizit definieren => Queues, Melder, FGVs (keine globalen Variablen). Ein weiteren Nachteil: Der Programmieraufwand ist größer als die Modul-Funktion in den Datenfluß zu integrieren.

Zitat:Wenn er 20k Samples in 10 Sekunden haben will, warum stellt er nicht einfach den Modus auf endliche Anzahl, Anzahl der Samples auf 20k beim 'DAQTiming VI' und z.B. auf 50 Samples beim 'DAQRead VI' und die Sampling-Rate auf 2kHz und fertig.
Kann er natürlich machen. Aber:
Streng genommen ist er dann von vorne herein wegen der festen Parameter in der Konfiguration und im Ablauf festgelegt. Ein Modul würde parametriert sein und somit frei in der Konfiguration. Außerdem ist das Modul allgemeiner einsetzbar. Man könnte z.B. Online-Werte unabhängig vom Ablauf und kontinuierlich ansehen.

Zur Entscheidung "Modul oder Datenfluß" muss man eigentlich den Zweck und die Größe der Applikation betrachten. (Nur weis das ein Anfänger am Anfang noch nicht.) Mach ich einen komplexen Dauerlaufprüfstand (also eine EXE) und die auch noch im Kundenauftrag, wird das mit "im Datenfluß" nie funktionieren respektive größte Probleme geben. Wenn ich aber eine Laboranwendung für eigene Zwecke brauche, dann ist es mir egal, ob da ab und zu mal der Graph ruckelt, weil ich mein Timeing wegen zuviel Last im Datenfluß überlastet habe. Dann ist es mir auch egal ob das BD etwas größer und/oder unübersichtlicher wird oder nicht.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.12.2009, 09:57
Beitrag #9

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Zeitschleife läuft zu schnell oder zu langsam
' schrieb:Ich versteh' da was nicht ...
Parallele While-Schleife zu was denn? Wenn er 20k Samples in 10 Sekunden haben will, warum stellt er nicht einfach den Modus auf endliche Anzahl, die Anzahl der Samples beim 'DAQTiming VI' auf 20k und beim 'DAQRead VI' auf z.B. 50 Samples und die Sampling-Rate auf 2kHz und fertig. Wozu braucht man jetzt 'ne Queue oder Melder?

Viele hier programmieren nicht nur schnell mal eine Laboranwendung wo das VI gestartet wird, etwas tut und danach sich selber beendet, sondern komplette Applikationen. Die startet man, wonach sie auf Benützereingaben warten, allenfalls nach Bestätigung des Benützers eine Messung tun, diese dem Benützer in unterschiedlicher Weise darstellen, verschiedene Baerbeitungen auf die gemessenen Daten zulassen, all die daraus entstehenden Resultate als Datenbestand auf Disk schreiben lassen, um gleich danach die folgende Messung zu starten. Und während all dem sollte man auch noch jederzeit jegliche Operation unterbrechen oder ganz abbrechen können.

Für sowas sollte man die Datenerfassung, Verarbeitung und Presentation, sowie die Abhandlung der Benützereingaben in seperate Tasks aufteilen, um das Ganze noch handhabbar zu machen. Und um zwischen diesen Tasks zu kommunizieren verwendet man Melder, Queues oder dergleichen.

Aber ich gebe Dir Recht, für eine reine Laboranwendung die nur mal Daten erfassen soll und sonst nichts, ist der direkte lineare Programmieransatz viel einfacher. Das Problem hierbei ist das viele solcher Applikationen nach einer gewissen Zeit evolvieren und wenn man dann nicht schon eine gute Grundarchitektur hat wirds entweder ein riesiges Gebastel, wo bei jeder kleinsten Erweiterung oder Anpassung gleich 5 andere Dinge plötzlich nicht mehr gut funktionieren, oder aber man ist gezwungen alles fortzuschmeissen und doch noch mal von Grund auf neu mit einer guten Architektur zu beginnen.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.12.2009, 10:01
Beitrag #10

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Zeitschleife läuft zu schnell oder zu langsam
:yahoo:Mein Beitrag war war schneller. Yahoo

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  große Stromstärken schnell messen gottfried 6 6.994 23.05.2014 13:31
Letzter Beitrag: cb
  DAQ triggern // Wie schnell ist "Commit"? Gibt es Alternativen? Kasi 1 4.011 29.07.2013 09:18
Letzter Beitrag: BNT
  Bei gleichförmiger Bewegung zählt Counter unterschiedlich schnell SiroCool 15 11.949 16.07.2012 09:11
Letzter Beitrag: GerdW
  Messwerte schnell in Datei schreiben Yopp Qax 7 8.445 03.03.2008 20:38
Letzter Beitrag: Y-P

Gehe zu: