Forum: Mikrocontroller und Digitale Elektronik Labview zeitliche Schwankung der Schleife


von Johannes M. (jojo17)


Lesenswert?

Hallo liebe Community,

Ich habe eine Schleife in der in festen Zeitabständen Messwerte 
ausgelesen werden. Ich habe das mit einer "Timed Structure" umgesetzt. 
Allerdings habe ich das Problem, dass wenn beispielsweise eine Looptime 
(Durchlaufzeit der Schleife) von 1000ms eingestellt wird, die reale 
Looptime relativ stark schwankt. Ich bin dann in einem Bereich von 975ms 
bis 1025ms. Gibt es von Labview Möglichkeiten die Looptime präziser 
festzulegen bzw. einen Weg dass sie nicht so stark schwankt? Oder ist 
die starke Schwankung nicht zu verhindern? Bzw. könnte mir jemand 
erklären warum das überhaupt so ist? Die Messwerterfassung erfolgt über 
ein PXI-Matrix-Schaltmodul NI-PXI 2533 und ein PXI-Digitalmultimeter 
NI-PXI-4071.
Solltet ihr mehr Infos brauchen gebt bescheid. Vielen Dank für eure 
Hilfe.

Mit freundlichen Grüßen
Johannes

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Johannes M. schrieb:
> ein PXI-Digitalmultimeter
> NI-PXI-4071.

7 ½ Stellen ist natürlich der Hammer. Brauchst Du es wirklich so super 
genau oder reichen nicht 3..4 Digits völlig aus?
Vermutlich kommt der Jitter durch die interne Meßzeit des Boliden.

von Purzel H. (hacky)


Lesenswert?

Labview laeuft auf einem Betriebssystem. Dieses Betriebsystem hat eine 
Zykluszeit von glaub 20ms fuer Windows Client (normales Windows), und 
glaub 50ms fuer Windows Server. Das ist das Zeitraster, bedeutet aber 
nicht, dass der Thread dann auch dran kommt. Wenn die Garbage Collection 
anspringt dauerts laenger.
Fuer praezisere Timings sollte man sich eher etwas mit einem Controller 
ueberlegen. Ohne Linux und dergleichen natuerlich.

: Bearbeitet durch User
von Jan (Gast)


Lesenswert?

Johannes M. schrieb:
> Die Messwerterfassung erfolgt über
> ein PXI-Matrix-Schaltmodul NI-PXI 2533 und ein PXI-Digitalmultimeter
> NI-PXI-4071

Welches PXI Chasis verwendest du?

von Not-Aus (Gast)


Lesenswert?


von Falk B. (falk)


Lesenswert?

Johannes M. schrieb:
> von 1000ms eingestellt wird, die reale
> Looptime relativ stark schwankt. Ich bin dann in einem Bereich von 975ms
> bis 1025ms.

Für eine reine Softwarelösung auf einem normalen Windows ist das schon 
SEHR genau.

von Falk B. (falk)


Lesenswert?

Not-Aus schrieb:
> Du kannst dir zum Einstieg mal das hier ansehen
> 
https://www.ni.com/de-de/innovations/white-papers/10/timing-and-synchronization-in-ni-labview.html

Und was lernen wir daraus? Außer, daß es da eine 1ms Taktquelle gibt? 
Über die REALEN Probleme und Jitter findet man in dem Artikel kein Wort.

von chris_ (Gast)


Lesenswert?

> von 1000ms eingestellt wird, die reale
> Looptime relativ stark schwankt. Ich bin dann in einem Bereich von 975ms
> bis 1025ms.

Ich schätze die Schwankungen kommen vom Windows selbst, weil die Tasks 
im Windows in etwa mit 20ms gewechselt werden.

von Kris (Gast)


Lesenswert?

Ohne deine VI zu kennen, kann man nichts dazu sagen.

Vorab:
LabView Loops kann man auf einige ms genau per Software takten. Meistens 
scheitert es an ganz anderen Sachen. Der häufigste Fehler ist das 
Ausführen der Wait (ms) VI. Schau mal noch ob du irgendwo ein wait for 
25ms in deiner VI hast. Das würde das Verhalten erklären. Auch beliebt 
sind Open Com Port und Close Com Port im selben Loop.

von Johannes M. (jojo17)


Angehängte Dateien:

Lesenswert?

Vielen Dank für eure ganzen Hinweise. Ich hab den relevanten Teil des 
Programms mal hochgeladen. Vielleicht sieht ja jemand einen 
Grundlegenden Fehler, den ich gemacht habe.
Einer der VIs ist dafür verantwortlich, dass die Loop schwankt. Denn 
nimmt man die VIs zur Messwertauslese heraus, so läuft es mit der 
exakten Looptime durch. Es existiert auch keine Waitfunktion.

Als Chassis verwende ich das NI PXI 1033.

LG Johannes

von Johannes M. (jojo17)


Lesenswert?

Ich arbeite lediglich mit 5 1/2 stellen.
LG Johannes

von chris_ (Gast)


Lesenswert?

Bei LabView ist es wichtig, in die Hauptschleife eine Wartefunktion 
einzubauen.
Dazu nimmt man nicht "delay" sondern diese:
https://zone.ni.com/reference/en-XX/help/371361R-01/glang/wait_till_next_ms_multiple/

Damit erhält man das best mögliche Timing.

von Forist (Gast)


Lesenswert?

Johannes M. schrieb:
> Ich hab den relevanten Teil des Programms mal hochgeladen.

Programme als JPG?
Das ist so ziemlich das blödeste Format dafür.
Das "P" steht für "Picture" und damit sind Fotos gemeint, wie sie aus 
eine Kamera herauskommen. Genau darauf ist dieses Format optimiert, 
einschließlich der verlustbehafteten Kompression.

Was meinst du, warum unter "Wichtige Regeln - erst lesen, dann posten!" 
der Hinweis auf Bildformate gegeben wird und dort explizit steht: 
"Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen"?

von Likeme (Gast)


Lesenswert?

Labview war und ist immer schon einen Klickel oder Kastl Programmer 
Software für Dinge wo es nicht so genau sein soll. Präzise Timing 
Aufgaben lagert man besser in die Hardware aus.

von Kris (Gast)


Lesenswert?

Du verwendest einen Softwaretakt (Timed Loop) und einen Hardwaretakt. 
Das kann so nicht funktionieren. Wie zwei Schlagzeuger die unsynchron 
spielen. Da kommt der Rest der Band ganz schön ins schwitzen.

Der Timed Loop möchte die Schleife (nach 1000ms?) beenden, kann sie aber 
noch nicht beenden weil die Hardware noch am messen ist. Die zusätzliche 
Zeit wird dann beim nächsten Durchgang abgezogen und die Schleife früher 
beendet. Daher kommen deine Schwankungen.

Schmeiß den Timed Loop raus und lass die Hardware den Takt vorgeben. Ob 
du dann den Mittelwert bildest(?), kann mir meine Glaskugel nicht sagen.

von Didi S. (kokisan2000)


Lesenswert?

Likeme schrieb:
> Labview war und ist immer schon einen Klickel oder Kastl
> Programmer
> Software für Dinge wo es nicht so genau sein soll. Präzise Timing
> Aufgaben lagert man besser in die Hardware aus.

Likeme, nicht LabVIEW ist das Problem, sondern das drunter liegende 
Betriebssystem, welches keine Realtime Programmierung zulässt! LabVIEW 
bringt sogar seine eigenen Timer mit, die mit 1KHz recht präzise 
verwendet werden können - das ist schon besser als so manche andere 
Programmiersprache mit onboard Timer kann.

Was meinst Du wohl, warum man teure aufwendige PXI Multimeter in einem 
aufwendigen PXI Mainframe nutzt.
Was meinst Du warum auf der Backplane des Mainframe ein 10MHz 
Referenzsignal geführt wird, auf der sich die Einschubkarten mit einem 
Jitter von 250ps genau triggern lassen?
Was meinst Du warum LabVIEW die Hardwaretrigger konfiguriert, selber 
aber den Takt nicht vorgeben muß.

Deine Aussage zu LabVIEW ist unfug. In meinem letzten Projekt habe ich 
synchron 18 Spannungskanäle auf 9 PXI Einschubkarten mit pro Kanal 4 
Msample/s über Zeiträume von 30 Sekunden ausgelesen. Die Einscubkarten 
wurden in einem PXI Mainframe von NI unter LabVIEW mit einer 
Synchronabweichung von +-10ns von Kanal zu Kanal über die 30 Sekunden 
ausgelesen. PXI ist die Hardware, die präzises Timing zulässt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.