LabVIEWForum.de - Analogausgabe: Signalfrequenz stimmt nicht

LabVIEWForum.de

Normale Version: Analogausgabe: Signalfrequenz stimmt nicht
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich habe mal wieder eine Frage an die LabVIEW-Experten. Mit dem abbgebildeten Blockdiagramm werden zwei kontinuierliche Impulse an eine Messwertkarte ausgegeben, über die dann ein Magnetventil gesteuert wird.

Das Problem besteht nun darin, dass die Signalfrequenz während der ersten ca. 60 Sekunden wesentlich höher als die eingestellte Frequenz ist. Danach reduziert sich die Frequenz auf den eingestellten Wert.

Das gleiche Problem tritt jedoch auch auf, wenn bei laufender Ausgabe ein anderes Programm (z.B. Excel) geöffnet wird. Dann reduziert sich die erhöhte Frequenz der Signalausgabe erst, wenn das Fenster von Excel wieder minimiert wird.

Kann mir da jemand weiterhelfen? Schon mal danke im vorraus,

mfg Jan
' schrieb:Hallo,

ich habe mal wieder eine Frage an die LabVIEW-Experten. Mit dem abbgebildeten Blockdiagramm werden zwei kontinuierliche Impulse an eine Messwertkarte ausgegeben, über die dann ein Magnetventil gesteuert wird.

Das Problem besteht nun darin, dass die Signalfrequenz während der ersten ca. 60 Sekunden wesentlich höher als die eingestellte Frequenz ist. Danach reduziert sich die Frequenz auf den eingestellten Wert.

Das gleiche Problem tritt jedoch auch auf, wenn bei laufender Ausgabe ein anderes Programm (z.B. Excel) geöffnet wird. Dann reduziert sich die erhöhte Frequenz der Signalausgabe erst, wenn das Fenster von Excel wieder minimiert wird.

Kann mir da jemand weiterhelfen? Schon mal danke im vorraus,

mfg Jan

Der Ansatz ist schon mal gar nicht so schlecht, aber da sind noch kleine bis mittelschwere Bugs drin, so kann das noch nicht funktionieren. 3 Bugs müssten sofort auffallen: du erstellst in der Schleife dauernd einen neuen Task und machst in wieder zu. Den Task solltest du nur einmal (vor der Schleife) erstellen und dann in der Schleife nur noch das "Write" VI verwenden. Zweitens: du hast kein Timing eingestellt. Woher soll die Messkarte wissen, wie schnell die Daten ausgegeben werden sollen? Drittens: du verwendest 2 Tasks für eine parallele Ausgabe, wo nur ein Task mit 2 Kanälen notwendig wäre.

Ich hab dir mal eine Musterlösung erstellt. Schlacker nicht gleich mit den Ohren;)schau es dir in Ruhe an. Ich hoffe, ich hab das ausreichend kommentiert. Dieses Beispiel soll auch den Unterschied zwischen einer continuierlichen, gepufferten Ausgabe und einer "Hardware-timed Single Point" ausgabe verdeutlichen. Zu beiden Themen gibt es übrigens auch Beispiele im Example Finder und in der Hilfe steht auch einigesWink

[attachment=6449]
' schrieb:Der Ansatz ist schon mal gar nicht so schlecht, aber da sind noch kleine bis mittelschwere Bugs drin, so kann das noch nicht funktionieren. 3 Bugs müssten sofort auffallen: du erstellst in der Schleife dauernd einen neuen Task und machst in wieder zu. Den Task solltest du nur einmal (vor der Schleife) erstellen und dann in der Schleife nur noch das "Write" VI verwenden. Zweitens: du hast kein Timing eingestellt. Woher soll die Messkarte wissen, wie schnell die Daten ausgegeben werden sollen? Drittens: du verwendest 2 Tasks für eine parallele Ausgabe, wo nur ein Task mit 2 Kanälen notwendig wäre.

Ich hab dir mal eine Musterlösung erstellt. Schlacker nicht gleich mit den Ohren;)schau es dir in Ruhe an. Ich hoffe, ich hab das ausreichend kommentiert. Dieses Beispiel soll auch den Unterschied zwischen einer continuierlichen, gepufferten Ausgabe und einer "Hardware-timed Single Point" ausgabe verdeutlichen. Zu beiden Themen gibt es übrigens auch Beispiele im Example Finder und in der Hilfe steht auch einigesWink

[attachment=33041:cont_AO.zip]

Hallo,

danke für deine schnelle Antwort. Das Blockdiagramm habe ich aus zwei Anleitungen "zusammen gebastelt" und war schon froh das es funktioniert. Dabei ist wahrscheinlich dann was auf der Strecke geblieben....

Aber weiß die Karte denn nicht über die Signalfrequenz, wann sie einen Wert ausgeben soll?

Dann schaue ich mal in deine Musterlösung,

erstmal danke, Jan
Hi nochmal,

kannst du mal einen Screenschot online stellen? Ich kann die Datei mit meiner Version nicht öffnen,

danke, Jan
' schrieb:Aber weiß die Karte denn nicht über die Signalfrequenz, wann sie einen Wert ausgeben soll?

nein, das weiss Sie nicht. Du stellst die Karte so ein, dass sie mit einer bestimmten, festen Abtastrate arbeitet. Die Signalfrequenz ergibt sich aus dem *Zusammenhang* aus Samples und Ausgaberate.
Beispiel: deine analoge Ausgabe arbeitet mit 1000 Hz - schreibt also 1000 Samples pro Sekunde
Wenn du nun ein Sinus-Signal erzeugst (einfach ein Daten-Array), dass 1000 Samples hat und eine Frequenz von 1, wirst du einen Sinus mit einem Herz ausgeben.
Wenn du einen Sinus berechnen läßt, der aus 100 Samples besteht und du den 10 mal hintereinander in dein Ausgabearray steckst wirst du einen Sinus mit 10 Hz ausgeben.

Das ganze ist mehr oder weniger eine Gleichung mit 3 Unbekannten, du musst eine Unbekannte festlegen, damit du mit den beiden verbleibenden Parametern "spielen kannst". Du musst dir mehr oder weniger überlegen:
1: "wie genau will ich mein Signal auflösen"
2: was ist die max. Frequenz meines Signals
=> Abtrastrate des AO


' schrieb:kannst du mal einen Screenschot online stellen? Ich kann die Datei mit meiner Version nicht öffnen,

theoretisch schon, praktisch wird das nicht viel nützen, damit du das VI verstehen kannst wirst du es schon ein paar mal im Highlightning Modus laufen lassen müssen. Ich hab's zum Glück in LV 7.1 programmiert und konnte es "runterspeichern":)
[attachment=6474]
Moin,

die Lösung sieht ja wirklich anspruchsvoll aus, die muss ich mir erstmal in Ruhe zu Gemüte führen.

Mfg Jan
Hallo i2dx,
hab dein .vi mal durchgeschaut und hätte ein paar Fragen.
Wird bei der Schleife kein Verzoegerungsglied oder ähnliches benötigt? Jedenfalls steigt meine Auslastung auf 100%.
Source Onboardclock. D.h die Frequenz ist dann von der jeweiligen Karte abhänig ?

Gruß Thomas
' schrieb:Hallo i2dx,
hab dein .vi mal durchgeschaut und hätte ein paar Fragen.
Wird bei der Schleife kein Verzoegerungsglied oder ähnliches benötigt? Jedenfalls steigt meine Auslastung auf 100%.
Source Onboardclock. D.h die Frequenz ist dann von der jeweiligen Karte abhänig ?

Gruß Thomas

die Frequenz ist von der Onboard-Clock der Karte abhängig - *jein*: die Onboard clock wird "runtergeteilt" und ist so schnell, dass du auf jeden Fall dein Signal mit der von dir gewünschten Sample-Rate ausgeben kannst.

zumindest bei hardware-timed singlepoint sollte kein software-Timing benötigt werden, weil der Takt aus der Karte kommt.

Wenn bei continouos die Systemlast auf 100% steigt ist was faul. Ich muss mir das nochmal anschaun, bei mir passiert das so nicht ... weche DAQmx Version verwendest du?
' schrieb:die Frequenz ist von der Onboard-Clock der Karte abhängig - *jein*: die Onboard clock wird "runtergeteilt" und ist so schnell, dass du auf jeden Fall dein Signal mit der von dir gewünschten Sample-Rate ausgeben kannst.

zumindest bei hardware-timed singlepoint sollte kein software-Timing benötigt werden, weil der Takt aus der Karte kommt.

Wenn bei continouos die Systemlast auf 100% steigt ist was faul. Ich muss mir das nochmal anschaun, bei mir passiert das so nicht ... weche DAQmx Version verwendest du?
DAQmx Version 8.3.0f0 ?
Irgendwie hab ich auch noch nen Denkfehler drin.
Angenommen ich will 10 Werte pro Sekunde ausgeben. Ich versteh nich ganz wie das funktioniert mit nem "unbekannten runtergeteilten Onboardclock".
Wird da nicht mit jedem Takt dieses "unbekannten" Clocks dann ein Wert ausgegeben ?

Die Auslastung tritt nur bei hardware-timed singlepoint ein und beim Looptiming bekomme ich dabei keine Zahl bzw 0.
Hallo,
nur mal so eine Zwischenfrage: Was ist eigentlich deine verwendete Messhardware? Nicht, das die Hardeware mglw. gar nicht das kann, was du machen willst.
MfG, Jens
Seiten: 1 2
Referenz-URLs