LabVIEWForum.de - While-Schleife_Beschleunigen

LabVIEWForum.de

Normale Version: While-Schleife_Beschleunigen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich versuche mit Hilfe eines PID-Reglers erstmal einen linearen Signal zu regeln. Später soll es ein Sinus werden. Soweit funktioniert alles, bis auf die Abarbeitungszeit der While-Schleife. Über ein nummerisches Element kann ich die Anzahl der Zyklen sehen. Das ist immer ein Zyklus in einer Sekunden und ist eindeutig zu langsam für meine Aufgabe. Ich muss mich an 1000 Zyklen pro Sekunden nähern. Über eine Zeit-Schleife funktioniert es leider auch nicht.

Bitte Bilder im Anhang beachten.

Ich danke für jede Hilfe


MfG
Konstantin
Hallo Konstantin,

herzlich willkommen im Forum!

Zitat:Bitte Bilder im Anhang beachten.
Du weißt schon, wie man heutzutage "Screenshots" anfertigt? Tipp: man nimmt dafür nicht das Handy… Big Grin

Zitat:Soweit funktioniert alles, bis auf die Abarbeitungszeit der While-Schleife.
- Das könnte an den vielen geknickten Drähten liegen, da brauchen die Daten einfach länger zum Durchfließen! Big Grin (Sarkasmus!) Du kennst das Autocleanup-Tool?
- Wenn du deine Schleife so programmierst, dass sie eben eine Sekunde für eine Iteration benötigt, dann wird das LabVIEW auch so abarbeiten. Wenn du das nicht so haben willst, musst du das eben anders programmieren! Leider zeigst du uns aber nicht, was du dort programmiert hast: ExpressVIs haben (u.a.) den Nachteil, dass alle wichtigen Einstellung vor dem Betrachter verborgen sind! Und du hast ja nur ein JPG statt eines VIs angehangen…

Zitat:Über eine Zeit-Schleife funktioniert es leider auch nicht.
Wieso sollte eine Schleife, die ich um ein Stück Code herum lege, diesen Code beschleunigen? Hmm
Hallo GerdW,

danke dir für die Antwort!

Ich habe es soweit hinbekommen mit der Geschwindigkeit.

Mit deiner Hilfe weiß ich nun, was Autocleanup-Tool ist, danke)

Ich bin ein Anfänger in Labview und muss zwecks Diplomarbeit mich schnell einarbeiten.

Wie die Screenshots gehen, ist mir auch bewusst. Das Problem ist jedoch, es läuft alles auf einem WinXP-Rechner, der kein Zugang zum Netzwerk hat und auch nichts außer Labview drauf installiert ist. Daher war es am schnellsten Fotos zu machen.

Bei Gelegenheit würde ich mich freuen, bei der nächsten Frage Hilfe zu bekommen. Ich möchte die Plots im Signalverlaufsgraph darstellen. Im Signalverlaufsdiagramm funktioniert es zwar, das Problem ist die Skalierung der x-Zeit-Achse. Ich möchte während es läuft eine oder zwei Perioden praktisch stehend darstellen lassen. Damit ich schnell die Periodendauer und Frequenz ablesen kann. Das Problem ist jedoch, dass beim Graphen die Signale nach der Konvertierung akzeptiert werden, jedoch nicht angezeigt, nur der Sinusverlauf, den ich selbst simuliere. Ich würde aber gern die ai0 und ao1 sehen.
Hallo DD,

Zitat:Ich habe es soweit hinbekommen mit der Geschwindigkeit.
Aber auf sehr fragwürdige Art und Weise…
1. Du liest 1k Werte ein mit einer Samplerate von 100kHz, das dauert genau 10ms. Dann verwendest du von diesen 1k Werte genau einen einzigen - dank FromDDT. Wozu liest du dann überhaupt 1k Werte ein? Warum 100kHz Samplerate? Warum nicht einfach einen Wert mit 100Hz Samplerate abfragen??? Hmm
2. Du gibst (lt. DAQAssi) 1k Werte aus mit einer Samplerate von 10kHz. An den DAQAssi hast du aber nur genau einen Wert /ein Sample angeschlossen!? Warum stellst du den DAQAssi nicht auf "1 Sample on demand"?
3. Du verwendest eine Wartezeit von 15ms in deiner Schleife: Wenn du wie in Punkt 1 eine Samplerate und die Anzahl der zu lesenden Werte vorgibst, dann bestimmt DAQmx die Schleifenzeit - eine zusätzliche Wartezeit ist unnötig (und meist auch noch störend)!

Zitat:Ich möchte die Plots im Signalverlaufsgraph darstellen. Das Problem ist jedoch, dass beim Graphen die Signale nach der Konvertierung akzeptiert werden, jedoch nicht angezeigt, nur der Sinusverlauf, den ich selbst simuliere. Ich würde aber gern die ai0 und ao1 sehen.
Der Graph zeigt dir genau das an, was du ihm an Daten bereitstellst! Und du plottest eben zwei Einzelwerte und einen Verlauf (der im DDT-Draht versteckt ist)…
Wenn ein Plot mehr als nur einen Punkt enthalten soll, dann musst DU ein Array mit Samples bereitstellen!
(Es gibt bei LabVIEW auch BeispielVIs, da wird auch gezeigt, wie man mit Charts und Graphen umgehen sollte. Big Grin)

Zitat:Ich möchte während es läuft eine oder zwei Perioden praktisch stehend darstellen lassen. Damit ich schnell die Periodendauer und Frequenz ablesen kann.
Das wiederum erfordert etwas mehr Arbeit: du musst deine Messdaten erstmal in einem Array sammeln und dann auch noch selbst einen "Trigger" nachstellen. Mit diesem "Trigger" bestimmst du, wo deine Periode anfängt und wieviele Samples du im Plot anzeigen musst…
(Tipp: Ein solcher "Trigger" könnte z.B. ein positiver Nulldurchgang sein.)

Sonst noch zum VI:
- LabVIEW arbeitet nach dem Prinzip THINK DATAFLOW! Wenn du also nach dem Beenden der Schleife den Chart löschen willst, dann solltest du das auch nach der Schleife machen und nicht innerhalb…
- Als User würde ich es sehr verwirrend finden, wenn es da zwei "STOPP"-Buttons direkt nebeneinander gibt! Ich hoffe, du erstellst eine super Bedienungsanleitung für dein VI, damit auch niemand nachfragen muss… Big Grin (Vor allem, wozu der dritte STOPP-Button links unten dann auch noch gut ist…)
- Warum zeigst du im "Messgerät" zwei identische Werte an?
Hallo GerdW,

ein großes dank nochmal für die Hinweise.

Vielleicht kannst du mir noch einen Zusammenhang erklären, der mir immer noch nicht ersichtlich ist.

Es geht ja letztendlich bei mir darum ein Sinussignal von 30 Hz möglichst idealnah zu regeln.

Nun zu eigentlichen Frage. Im Baustein "Signal simulieren" kann ich ja dem Sinus seine Parameter vorgeben. Unteranderem muss ich die Sample-Anzahl und die Abtastrate von diesen Samples vorgeben. Damit ich bei der Geschwindigkeit was sehen kann. In meinem Beispiel habe ich für Abtastrate 1*10^9 und für Sample-Zahl 100.000 genommen. Damit lässt sich die Regelung wunderbar beobachten. Die While-Schleife wird mit ca. 100 mal pro Sekunde abgearbeitet. Mir ist schon bewußt aus Messtechnik was Abtastrate und Samples sind. Jedoch kann ich das in diesem Zusammenhang leider nicht nachvollziehen.

Wie kann ich den das beurteilen, sind das nun meine 30 Hz und in welcher Einheit ist das die x-Zeitachse? sind das ms, us, ns?

Ich bedanke mich im Voraus und sry wegen dummen Fragen.
Hallo DD,

Zitat:In meinem Beispiel habe ich für Abtastrate 1*10^9 und für Sample-Zahl 100.000 genommen.
Du arbeitest mit einer simulierten Abtastrate von 1GHz? Was soll das bringen und welche Hardware möchtest du damit simulieren? Hmm
(Bei 100kS ergibt das eine Zeitdauer von 1e5/1e9=1e-4=0.1ms für einen Datenblock…)
Und damit simulierst du einen Sinus mit 30Hz!? Bei 1000 Samples pro Periode würde auch eine Abtastrate von 30kHz ausreichen!

Zitat:Damit lässt sich die Regelung wunderbar beobachten.
Mangels deiner Hardware kann ich das nicht beurteilen…

Zitat:Die While-Schleife wird mit ca. 100 mal pro Sekunde abgearbeitet.
Das hat aber nichts mit dem SimluateSignal zu tun, sondern einzig und allein mit den DAQAssis…
Hast du mal den Jitter bestimmt? Wie genau ist "ca. 100mal pro Sekunde"?

Zitat:Jedoch kann ich das in diesem Zusammenhang leider nicht nachvollziehen.
Die Samplerate/Abtastrate hat erstmal nichts mit deinem 30Hz-Sinus zu tun! Damit gibst du nur an, wie schnell/oft der Sinus abgetastet wird - und dabei solltest du der Herren Nyquist & Shannon gedenken…

Zitat:Wie kann ich den das beurteilen, sind das nun meine 30 Hz und in welcher Einheit ist das die x-Zeitachse? sind das ms, us, ns?
Das simulierte Sinussignal wird mit einer Periode von 30Hz simuliert. Das ausgegebene Signal wird mit 1GHz Abtastrate in 100kS großen Blöcken ausgegeben.
Die SI-Einheit der Zeit ist IMHO die Sekunde. (Was genau ist der Unterschied zwischen ns, µs und ms, abgesehen von der Zehnerpotenz?)
Leider hast du nirgends eine "Zeitachse" im VI, du verwendest ja
1. einen Chart, der Daten nur als Einzelwerte in einem Cluster bekommt
2. keine Waveforms, die schon Zeitinformationen enthalten würden…
Referenz-URLs