LabVIEWForum.de - Analog output kontinuierlich ändern

LabVIEWForum.de

Normale Version: Analog output kontinuierlich ändern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Moin,

ich möchte an einem analog output einen Gleichspannungswert in unregelmäßigen Abständen ändern. Dazu habe ich ein VI geschrieben, das auch wunderbar funktioniert, allerdings bin ich mir nicht sicher, ob meine Variante sehr geschickt ist:
Ich starte und stoppe den Task ständig.

Den entsprechenden Eintrag bei der "Property node", mit dem ich den Wert on-the-fly ändern könnte habe ich nicht gefunden, liegt das daran, dass ich ihn übersehen habe oder dass er nicht existiert?

Danke schon mal im voraus!

Lv82_img
Moin,

du hast dir die FRage doch schon selbst beantwortet. Den Task einmal starten und nach der While beenden. Für was ist das Schieberegister? Hier langt doch ein Tunnel.
Habe es dir kurz geändert.

Hoffe geholfen zu haben.

Keep on rockin´, RMR
ja, hat auf jeden Fall geholfen, danke! Hätte ich eigentlich auch selber einfach so ausprobieren können... Rolleyes

Aber zum Schieberegister: Hat das denn irgendwelche Nachteile?
' schrieb:Aber zum Schieberegister: Hat das denn irgendwelche Nachteile?

So ist es sicher etwas performanter. Bei dieser Anwendung dürfte das nicht weiter stören.
Nur wenn die ganze Sache etwas umfangreicher wird, dann steigt mit "überflüssgigem" Code
auch die CPU Last und die Speicherauslastung.

Keep on rockin´, RMR
du meinst, dass es OHNE Schieberegister schneller abläuft?

Könnte das zu Problemen führen, wenn man den Task nicht explizit stoppt - du hast ja das "Stop Task" - vi entfernt?
' schrieb:du meinst, dass es OHNE Schieberegister schneller abläuft?

Nein, aber die "Last" geht runter. LV legt Kopien von den Daten an die innerhalb einer While- oder Case-Schleife liegen. In deinem Fall wäre das natürlich so gut wie nichts. Schneller läuft es sicher nicht. Die 100ms die du angegeben hast bleiben als Schleifenwartezeit.

Grüße, RMR
hmm... also nochmal zum shift-register: so wie du es in dem Beispiel programmiert hast, also ohne shift register, wird die error-message doch bei jedem Schleifendurchlauf neu initialisiert. Mit einem shift register wird sie immer schön durchgereicht.

OK, wenn ein Fehler auftritt, hält das Programm eh an, aber es gibt doch auch Warnungen (?), die das Programm nicht anhalten lassen, aber beim nächsten Schleifendurchlauf verloren gehen.

Der Task brauch wohl kein shift register, da er sich ja nicht ändert, daher ist der Tunnel dort meiner Meinung nach sinnvoller. Es sein denn, LabVIEW legt bei jedem Schleifendurchlauf eine Kopie irgendwo im Speicher an, aber das weiß ich nicht.

Was meinst du zu meinem Einwand bei der error message?
' schrieb:Für was ist das Schieberegister? Hier langt doch ein Tunnel.
Nein, der Fehler-Cluster sollte nach Möglichkeit als Schieberegister ausgeführt werden.
aalemann hat die Erklärung bereits genannt:

- So ist es möglich auf Fehler zu reagieren, die in der Schleife auftreten.

Aktuell poppt ein Fehlerdialog auf. Aber nicht immer möchte man einen Fehlerdialog zeigen. Manchmal reicht es, im Fehlerfall die Schleife zu verlassen und den Fehler weiter zu reichen, zu protokollieren oder anderweitig darauf zu reagieren.

Und das macht in der Performance auch nicht viel aus, da ein Fehler-Cluster aus sehr wenig Daten besteht.
Also immer so machen, wie du es hattest! Das war genau richtig und ist guter Programmierstil.
(Auch wenn es in Schulungsbeispielen von NI z.T. nicht so gemacht wurde. Dort wurde mir jedoch recht gegeben, dass dies schlecht programmiert sei.)

Tunnel für den Fehler-Cluster bei Schleifen nur in Ausnahmesituationen verwenden, wenn du wirklich weißt, was du tust. Beispielsweise bei While-Schleifen, die nur einmal durchlaufen werden für FGVs. Doch selbst da nutze ich Schieberegister, damit es einheitlich ist.
Ich setze genrell Schieberegister ein und hatte nie Performance-Probleme, die darauf zurückzuführen waren. Egal ob Real-Time-System oder unter Windows und egal ob ich 10 SubVIs nutze oder 500.
' schrieb:hmm... also nochmal zum shift-register: so wie du es in dem Beispiel programmiert hast, also ohne shift register, wird die error-message doch bei jedem Schleifendurchlauf neu initialisiert. Mit einem shift register wird sie immer schön durchgereicht.

Was meinst du zu meinem Einwand bei der error message?

Wenn du das möchtest, dass die Errormeldungen nach "aussen" weitergereicht werden, dann musst du ein SR anlegen. Ick kenne deine Programmierabsichten nicht und kann nur auf das antworten was ich in deinem VI sehe. Möchtest du die Meldungen auslesen......ja SR.

Schönes WE, RMR
Meine Meinung: Man sollte sich das gleich sauber angewöhnen.

Bei richtig eingesetzten Programmen möchte man meist auch nicht, dass diese sich bei einem Fehler beenden, sondern evtl. noch irgendein Ventil ansteuern, etwas drucklos schalten, einen Fehlerhinweis anzeigen o.ä.

Daher mein Rat: Fehler-Cluster bei Schleifen immer als Schieberegister ausführen.

Aber das muss jeder für sich selbst entscheiden.
Seiten: 1 2
Referenz-URLs