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!
11.10.2007, 08:34 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2007 12:48 von jg.)
hab 4 analoge Ausgänge an denen ich eine Spannung vorgeben möchte.
Hab mal 3 davon in ein VI gehängt. Jetzt bringen mir aber immer 2 davon einen Fehler.
Was fehlt mir hierbei?
Oder muss ich die ganz anders verschalten?
' schrieb:Kannst du mir auch sagen bzw. zeigen wie ich die in einen Task bekomme?
Hab es nicht hinbekommen.
In Deinem Fall würde das so aussehen (Anm: Es gibt noch etliche Varianten, wie man es auch machen kann):
Es ist aber auch so noch viel Nonsens in dem VI.
Du gibst 100mal (Standard) mit Rate 1000 ein und denselben Wert aus. Für den Ausgang ist das aber dasselbe, als wenn ich nur einen einzigen Wert ausgegeben hätte und den eine Sekunde lang stehen lasse. (Daß er dann auf Null rückgesetzt wird, ist auch jetzt nicht sicher)
Monoveros hat übrigens nur teilweise Recht: Wenn es sich nicht um Waveforms handelt (Damit meine ich alle mit eine Rate getakteten Datenfolgen), sondern nicht getaktete echte Einzelwertausgaben, dann sind durchaus mehrere Tasks möglich.
Auch mehrere Tasks mit Waveforms sind unter gewissen Umständen möglich, sie dürfen dann nur nicht gleichzeitig laufen.
Ich würde das VI auf echte Einzelwertausgabe ändern, so wie jetzt funktioniert es vielleicht, aber es steckt letztlich zu viel Nonsens drin.
Find ich auch gut von dir Lucki, dass du mich auf Fehler hinweist.
So ne Art Einzelauswertung hatte ich eigentlich vorgesehen. Durch die wiederholung (While-Schleife) bekomme ich dann aber solange
diese läuft die aktuellen Werte ausgegeben, oder?
Die "Rate" muss ich dann auf 1 setzen, richtig?
Die Spannungen können, so ist es bis jetzt vorgesehen, ständig an den Ausgängen anstehen. Sie werden über zusätzliche Relais abgeschaltet, falls
die Spannung freigeschaltet werden sollte.
Hoffe ich habe dann ein VI mit weniger nonsens wenn ich die Änderungen mache.
' schrieb:Monoveros hat übrigens nur teilweise Recht: Wenn es sich nicht um Waveforms handelt (Damit meine ich alle mit eine Rate getakteten Datenfolgen), sondern nicht getaktete echte Einzelwertausgaben, dann sind durchaus mehrere Tasks möglich.
Auch mehrere Tasks mit Waveforms sind unter gewissen Umständen möglich, sie dürfen dann nur nicht gleichzeitig laufen.
Ich würde das VI auf echte Einzelwertausgabe ändern, so wie jetzt funktioniert es vielleicht, aber es steckt letztlich zu viel Nonsens drin.
Was meinst du mit mehreren Tasks? Hintereinander? Ich mein, logisch ist es möglich, einen Wert zu schreiben, dann Task schließen, neuen Task öffnen, Wert schreiben, Task schließen usw. Aber das ist ja langsam ohne Ende...
Oder funktioniert das auch irgendwie, wenn beide Tasks gleichzeitig geöffnet sind, aber zu unterschiedlichen Zeiten schreiben? Wäre ja spitze, nur glaub ich das noch nicht so richtig. LV meckert ja schon rum, wenn man den zweiten Task erstellen will...
' schrieb:So ne Art Einzelauswertung hatte ich eigentlich vorgesehen. Durch die wiederholung (While-Schleife) bekomme ich dann aber solange
diese läuft die aktuellen Werte ausgegeben, oder?
Die "Rate" muss ich dann auf 1 setzen, richtig?
Ein AO-Ausgang behält nach meiner Erfahrung immer den letzten geschriebenen Wert bei. Selbst, wenn du den Task wieder beendest. Das bedeutet, du brauchst keine Schleife, sondern nur den DAQmx Write dann ausführen, wenn ein neuer Wert anliegen soll.
Ob das ebenfalls für DO gilt, kann ich nciht sagen. Ich denke aber schon. Hätte ja sonst wenig Sinn, wenn der nach einer Weile automatisch zurückgesetzt wird.
Aus dem Verhalten ergibt sich aber ein ganz anderes Problem (besonders dann, wenn man wie in deinem Fall mit Hochspannung arbeitet): Dadurch, dass der Wert am Ausgang so lange anstehen bleibt, bis du wieder einen neuen Wert setzt, muss ein Programmabbruch oder -beenden NICHT bedeuten, dass dein Ausgang wieder auf Null ist. Mann muss also den AO spätestens beim Beenden des Programms wieder auf Nul setzen!
In einem Hochspannungslabor ist zwar alels 100x gesichert, aber wohl wäre mir trotzdem nicht dabei, wenn trotz offener sichtbaren Trennstrecke mein PC versucht, mich klein, schwarz und hässlich zu machen
' schrieb:Was meinst du mit mehreren Tasks? Hintereinander? Ich mein, logisch ist es möglich, einen Wert zu schreiben, dann Task schließen, neuen Task öffnen, Wert schreiben, Task schließen usw. Aber das ist ja langsam ohne Ende...
Also ich zeige das an einem funktionierendem Beispiel.
Das Beispiel ist aus einem Programm herausgerissen und so wie es ist macht es keinen Sinn, es soll nur zeigen, daß es möglich ist, mehrere Tasks hintereinander abzuarbeiten.
Die Sinn das Programms, aus dem es herausgelöst ist, ist folgender:
Es geht darum, mehreres Kanäle abzutasten, und zwar beinhalten die Analogsignale die Reaktion eines externen Gerätes auf ein an dessen Signaleingang angelegtes Stimulus-Signal.
Dieses Signal wird mit Analog-Output erzeugt, und ist z.B eine Sprungfunktionen. AI ist mit AO synchronisiert. (Was hier im Beispiele alles unter den Tisch gefallen ist)
Die herkömmliche Methode ist, einen 8 kanaligen AI-Task zu verwenden, was aber zwei Nachteile hat: (i) sind die Kanäle wegen Multiplexing untereinander phasenverschoben, und (ii) verringert sich die maximal mögliche Sampling-Rate um den Faktor 8.
Deshalb habe ich es anders gemacht: Ich erzeuge 8 gleiche AI-Tasks mit ja enem AI-Kanal, und arbeite die hintereinander ab.(Die Stimulus-Funktion ist bei jedem Task dieselbe). Dadurch verringert sich natürlich die Refreshrate pro Kanal, aber die oben genannten Nachteil fallen weg.
Abgeschaut ist die Methode von den alten analogen Mehrkanal-Oszilloskopen (Mit Einstrahl-Bildröhre). Dort gab es auch immer die beiden Betriebsarten "gechoppert" und "alternierend".
Die einzelnen Task müssen jeweils gestartet und gestoppt werden. Das das zu merklichen Zeitverlusten führt, kann ich nicht bestätigen, es ist vielmehr so, daß sich die Abtastung bei Taskwechseln nahezu kontinuierlich fortsetzt.
Ganz großer Wermutstropfen an diese Sache: Man sollte meinen, das gleiche Prinzip funktioniert auch mit AO. Also: 2 Tasks erzeugen, Task 1 starten, warten bis beendet, dann stoppen. Dann Task 2 starten, warten bis beendet, dann stoppen. Funktioniert aber aus unerklärlichen Grünen nicht, es geht nur mit AI.
Ok, hatte ich bisher noch nicht gewusst. Aber klar, wieso sollte es auch nicht funktionieren. Dass es nicht mehr Zeit benötigt, wundert mich etwas, aber umso besser
Wieso geht das nicht mit AO...? Ich vermute, dass bei AO der DA-Wandler nicht mit dem Stoppen des Tasks freigegeben wird. Denn wie ich bereits erwähnt hatte, liegt der zuletzt eingestellte Wert auch danach noch am Ausgang an. Kann das damit zusammenhängen?