INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Für jeden Analog-Output eigene Task einrichten



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!

03.07.2006, 20:01 (Dieser Beitrag wurde zuletzt bearbeitet: 03.07.2006 20:02 von Lucki.)
Beitrag #1

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Für jeden Analog-Output eigene Task einrichten
Ich möchte mit einer Multifunktionskarte mit 2 Kanälen Output die gleiche Waverform mit gleicher Abtastrate sequentiell mal auf dem einen, mal auf dem anderen Kanal ausgeben (niemals zugleich). Wenn ich von einem auf den anderen Kanal wechsle, möchte ich vermeiden, alles neu zu initialisieren.
Die gleiche Aufgabenstellung funktioniert bei Analog Input tatellos, nur mit Analog Output will es nicht gehen.

Schritte:
1) Initialisieren der beiden Tasks (funktioniert)
2) Starten einer der beiden Task (funktioniert)
3a) Wiederholtes Starten der gleichen Task funktioniert
3b) Starten einer Task, nachdem die andere Task schon mal gestartet war, funktioniert nicht. Es kommt die Fehlermeldung, daß die Resource schon verwendet wird.

Ich habe es mit drei gängigen Karten (E und M-Serie) versucht, und wenn ich ehrlich bin, dann stochere ich schon seit Wochen an dem Problem herum, so daß ich letztlich den Verdacht haben, daß die Karten das hardwaremäßig einfach nicht können. Weiß jemand mehr darüber oder kann mir einen Tip geben?

Das vi ist einen Abstrkation, um das Problem zu verdeutlichen und hat mit der tatsächlichen praktischen Anwendung wenig zu tun


Angehängte Datei(en)
Sonstige .vi  TestSchreiben.vi (Größe: 37,54 KB / Downloads: 255)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.07.2006, 07:20
Beitrag #2

Svente Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 69
Registriert seit: Nov 2005

8.2.1, 8.6, 2010, 2012
2000
DE_EN

14974
Deutschland
Für jeden Analog-Output eigene Task einrichten
Hallo Lucki,

ich habe Dein Programm gar nicht so recht laufen lassen können
und habe einige Sachen, die meines Erachtens nach da mit rein müßten.

Probier mal ob das so läuft bei Dir und meld' Dich nochmal.

Svente


Angehängte Datei(en)
Sonstige .vi  TestSchreiben_2_.vi (Größe: 42,12 KB / Downloads: 247)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.07.2006, 08:30 (Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2006 08:35 von Lucki.)
Beitrag #3

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Für jeden Analog-Output eigene Task einrichten
' schrieb:ich habe Dein Programm gar nicht so recht laufen lassen können
und habe einige Sachen, die meines Erachtens nach da mit rein müßten.
Svente
Was Du reingemacht hast, Fehlerbehandlung und Rücksetzen der Tasks, sollte ein ordentlicher Programmierer natürlich machen. Es lief aber bei mir aber auch so bzw. der Fehler, auf den es ankam, trat auch so auf.
Trotzdem: Beim Vergleich der beiden VIs mußte ich erkennen, daß ich mich in einem wesentlichem Punkt geeirrt hatte. Der Fehler tritt nämlich nicht erst beim Starten des zweiten Tasks auf, sonderen bereits bei dessen Initialisierung. Es kommt die Fehlermeldung, daß die Ressource bereits belegt ist, obwohl das gar nicht der Fall sein dürfte. Ich habe also das Beispiel vereinfacht: Es wird nur noch initialisiert und gar nicht mehr gestartet. Das Prog. verbleibt dann in einer leeren Warteschleife, und bei Stop werden die Tasks rückgesetzt. Frage also: Kommt es zur Fehlermeldung oder nicht?
Vielleicht liegt es auch an den von mir verwendeten Karten, die das vielleicht alle nicht können. Versucht habe ich es mit den Karten PCI-6052E, PCI-6221, PCI-MIO-16E4.
   


Angehängte Datei(en)
Sonstige .vi  TestSchreiben2.vi (Größe: 34,58 KB / Downloads: 212)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.07.2006, 11:58
Beitrag #4

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Für jeden Analog-Output eigene Task einrichten
' schrieb:Was Du reingemacht hast, Fehlerbehandlung und Rücksetzen der Tasks, sollte ein ordentlicher Programmierer natürlich machen. Es lief aber bei mir aber auch so bzw. der Fehler, auf den es ankam, trat auch so auf.
Trotzdem: Beim Vergleich der beiden VIs mußte ich erkennen, daß ich mich in einem wesentlichem Punkt geeirrt hatte. Der Fehler tritt nämlich nicht erst beim Starten des zweiten Tasks auf, sonderen bereits bei dessen Initialisierung. Es kommt die Fehlermeldung, daß die Ressource bereits belegt ist, obwohl das gar nicht der Fall sein dürfte. Ich habe also das Beispiel vereinfacht: Es wird nur noch initialisiert und gar nicht mehr gestartet. Das Prog. verbleibt dann in einer leeren Warteschleife, und bei Stop werden die Tasks rückgesetzt. Frage also: Kommt es zur Fehlermeldung oder nicht?
Vielleicht liegt es auch an den von mir verwendeten Karten, die das vielleicht alle nicht können. Versucht habe ich es mit den Karten PCI-6052E, PCI-6221, PCI-MIO-16E4.
[attachment=28436:attachment]

ich hab's eben mal mit einer PCI-6251 getestet und es tritt der Fehler -50103, DAQmx Write (Analog 1D DBL 1Chan NSamp).vi auf. Meines Erachtens (ich bin mir aber nur zu 90% sicher) kann man bei den einfachen Karten (M-Serie, E-Serie) jeweils nur einen AO-Task starten für alle Ausgabe-Kanäle.

Ich hab mal geschaut, auf die schnelle finde ich bei NI gar keine Karte, die explizit mit simultanous AO spezifiziert ist. Vielleicht kann da NI Sales weiterhelfen?

Grüße
CB

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.07.2006, 12:24 (Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2006 12:27 von Lucki.)
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Für jeden Analog-Output eigene Task einrichten
' schrieb:ich hab's eben mal mit einer PCI-6251 getestet und es tritt der Fehler -50103, DAQmx Write (Analog 1D DBL 1Chan NSamp).vi auf. Meines Erachtens (ich bin mir aber nur zu 90% sicher) kann man bei den einfachen Karten (M-Serie, E-Serie) jeweils nur einen AO-Task starten für alle Ausgabe-Kanäle.
Es hilft mir schon mal weiter, wenn als Du als erfahrener Fuchs keinen elementaren Fehler feststellen kannst. Ich werde anfragen, so wie Du es vorschlägst, und hier das Ergebnis melden. Vorher werde ich aber den gleichen Test noch mit den edlelsten und teuersten NI-Messkarten machen - natürlich nur per Simulation, was ja eine der wertvollen Neuerungen von LV8 ist. Ich muß nur noch recherchieren, welche Karten das sind
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.07.2006, 18:50
Beitrag #6

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Für jeden Analog-Output eigene Task einrichten
' schrieb:Es hilft mir schon mal weiter, wenn als Du als erfahrener Fuchs keinen elementaren Fehler feststellen kannst. Ich werde anfragen, so wie Du es vorschlägst, und hier das Ergebnis melden. Vorher werde ich aber den gleichen Test noch mit den edlelsten und teuersten NI-Messkarten machen - natürlich nur per Simulation, was ja eine der wertvollen Neuerungen von LV8 ist. Ich muß nur noch recherchieren, welche Karten das sind

ne, der elementare Fehler wird sein, dass die Karte nur einen Task verarbeiten kann. Mann kann ja z.B. bei M-Serie und E-Serie auch nicht 2 AI Tasks auf der gleichen Ressource laufen lassen. Das liegt daran, dass nur ein ADC drauf ist, der von einem Multiplexer angesteuert wird (daher kommt z.B. auch die Summenabtastrate, die im wesentlichen von der Geschwindigkeit des Multiplexers abhängt ...). Ich denke mal, dass das bei AO dann das gleiche ist. Ich hab auch mal in den NI.COM Foren gesucht. Ich bin zwar nicht wirklich tief reingegangen, aber im Prinzip wurde meine Meinung da so bestätigt ... (Suche nach "simultanous analog output")

Mit nur einem Task, mit mehreren Kanälen funktioniert das ganze natürlich. Hab ich selbst schon so programmiert und läuft einwandfrei. Wenn ich das in deinem Beispiel richtig gesehen habe, dann verwendest du für beide Kanäle sowieso die gleiche Abtastrate? dann wär es ja kein Problem, die beiden AOs in einem Task zusammenzufassen?

Die simulierten Geräte haben übrigens nix mit LabVIEW 8 zu tun, das ist ein Feature seit DAQmx 7.5 oder 8.0 ...

Grüße
CB

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.07.2006, 08:38 (Dieser Beitrag wurde zuletzt bearbeitet: 12.07.2006 08:41 von Lucki.)
Beitrag #7

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Für jeden Analog-Output eigene Task einrichten
Zitat:.. der elementare Fehler wird sein, dass die Karte nur einen Task verarbeiten kann. Mann kann ja z.B. bei M-Serie und E-Serie auch nicht 2 AI Tasks auf der gleichen Ressource laufen lassen. Das liegt daran, dass nur ein ADC drauf ist, der von einem Multiplexer angesteuert wird

Diesen elementeren Fehler begehe ich aber genau nicht, denn ich erstelle zwar meherer Tasks, ich lasse aber die Tasks immer nur sequentiell und nie gleichzeitig ablaufen. Also von den hardwaremäßigen Resourcen her könnte und müßte es funktionieren - und es funktioniert tatsächlich auch bestens, aber eben nur mit AI und nicht mit AO.

Hier mal ein paar Einzelheiten zu dem Projekt: Es geht um eine Software für das Tunig von Spiegelgalvanometer- Scannern. Es ist einen Art Mehrkanal-Oszilloskop, aber außerdem werden in Echtzeit mittels Fourieranalyse noch Frequenzgänge dargestellt. Die Kanalzuordnung ist die: ao0/ao1 Stimulation X-Scanner/Y-Scanner, ai0:7/ai8:15 Messdaten X-Scanner/Y-Scanner
Da die Phasenverhältnisse wichtig sind und um die maximal mögliche Abtastrate einer Messkarte nicht zu verringern, wird das Oszilloskop grundsätzlich im "Alternate-Modus" betrieben, d.h es wird immer nur ein ai-Kanal abgetastet. Die dadurch verringerte Update-Rate stört nicht. Das funktioniert so: jeder der 16 ai-Kanale erhält einen eigenen Task, und die Tasks werden sequentiell gestartet und gestoppt. (Nicht immer alle 16 Kanäle, die Kanäle lassen sich ein/ausschalten, außer hat man die Möglichkeit, nur X oder nur Y darzustellen.)

Das funktioniert alles bestens, und jetzt bin ich dabei, das Ganze auf DAQmx umzustellen, um auch die preisgünstigen Karten der M-Serie verwenden zu können. Und da hat mich der Ergeiz gepackt, bei dieser Gelegenheit auch noch einen kleinen Mangel abzustellen. Es geht um die "gleichzeitige" Darstellung von X und Y, wobei die Reihenfolge immer so ist: eine Ein Kanal X, Ein Kanal Y, Ein Kanal X... bis alle Kanäle durch sind, dann wieder von vorn.
Der kleiner Schönheitsfehler, der bislang besteht, ist der: Da es mir nicht gelang, ao so in zwei Tasks aufzuspalten, so wie das bei ai möglich ist, werden immer beide Achsen gleichzeitig stimuliert. D.H der X-Spiegel bewegt sich unötigerweise auch dann, wenn gerade der Y-Kanal dran ist mit messen. Stört nicht weiter, führt aber bei längerem Betrieb und stressigen Sprungfunktionnen zu unnötiger zusätzlicher Erwärmung des Scanners.

Natürlich kann man a0 immer neu initialissieren, aber das wäre unschön, denn wenn schon sequentielle Abtastung, dann wenigsten so zügig hintereinander wie möglich.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.07.2006, 16:51
Beitrag #8

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Für jeden Analog-Output eigene Task einrichten
' schrieb:[...]
Natürlich kann man a0 immer neu initialissieren, aber das wäre unschön, denn wenn schon sequentielle Abtastung, dann wenigsten so zügig hintereinander wie möglich.

mal ne ganz blöde Frage: warum machst du nicht alles komplett paralell?
kontinuierlicher Task für alle AIs, kontinuierlicher Task für alle AOs und du pickst dir "nur" die Häppchen raus, die du brauchst?

Grüße
CB

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.07.2006, 13:06
Beitrag #9

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Für jeden Analog-Output eigene Task einrichten
' schrieb:mal ne ganz blöde Frage: warum machst du nicht alles komplett paralell?
kontinuierlicher Task für alle AIs, kontinuierlicher Task für alle AOs und du pickst dir "nur" die Häppchen raus, die du brauchst?
Warum nicht komplett parallel?
1.) Ich brauche max. 200kHz Abtastrate pro Kanal, und ich möchte keine teuren Messkarten verwenden, die ein Vielfaches dieser Abtastrate haben müßten, wenn die Kanäle gemultiplext würden. Was ich mache, ist zwar auch ein Mutiplexing, aber eines von anderer Art:
A) Normales Multiplexing:
alle 1. Datenpunkt aller Kanäle, alle 2. Datenpunkte aller Kanäle....
B) Luckisches Multiplexing:
alle Datenpunkte Kanal1, alle Datenpunkte Kanal 2...

Vorteil von B: (i) Die max. Abtastrate wird durch das Multiplexing nicht herabgesetzt; (ii) es gibt keine Probleme mit Übersprechen zwischen den Kanälen; (iii) es gibt keine Zeitverzögerungeen (Phasenfehler) zwischen den einzelnen Kanälen.
Nachteil von B: Die Gesamt-Erfassungszeit für einen Vorständigen Scan über alle Kanäle ist Einzelscanzeit * Kanalzahl. Also wenn der Scan normal 50 mal dauert, brauche ich über alle 10 Kanälen 500ms.
Um diesen Nachteil nicht unnötig zu vergrößern, ist es sinnvoll, den Scan nur über die Kanäle zu machen, die man wirklich braucht. Nicht sinnvoll wäre es, immer alle Kanäle zu scannen und dann in den Diagrammen und Auswertungen nur die aktivierten Kanäle zu benutzen.

Warum keine kontinuierliche Abtastung?
Im Prinzip wäre es möglich, den Generator mit den Sprungfunktionen, der auch den Master-Takt für den ADC liefert, kontinuierlich durchlaufen zu lassen. Praktisch läuft es auch so, man sieht es am Test-Oszilliskop nicht, daß der Generator zwischen 2 Scans einen Pause einlegt. Es könnte aber bei kontinuierlicher Betriebsweise zu Komplikationen kommen, und zwar dann, wenn der PC langsam ist und die Fourier-Operationen und andere Auswertungen etwas länger daueren. Dann könnte es zu einem Datenstau kommen, so wie ich es jetzt mache ist das ausgeschlossen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.07.2006, 17:04
Beitrag #10

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Für jeden Analog-Output eigene Task einrichten
' schrieb:1.) Ich brauche max. 200kHz Abtastrate pro Kanal, und ich möchte keine teuren Messkarten verwenden,
jut, das is ein Argument, das ich nachvollziehen kann <Schwabe=ON>

' schrieb:B) Luckisches Multiplexing:
LOL, jau, okeh ... got itWink

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Analog Output: hardware getaktet Output gleichzeitig mit on demand output kwakz 5 5.060 05.03.2021 10:04
Letzter Beitrag: jg
  Analog Output eines 1D-DBL-Arrays Kyuuu 2 4.946 29.03.2017 11:26
Letzter Beitrag: Lucki
  Analog Output mit my DAQ von NI luckluke 3 4.666 04.06.2014 20:47
Letzter Beitrag: Trinitatis
  DAQmx - Analog Output - Dynamische Anpassung des Signals Philbo 17 19.563 28.04.2014 22:18
Letzter Beitrag: Lucki
  DAQ-Assistent einrichten Sonde 3 5.067 12.09.2013 08:32
Letzter Beitrag: Y-P
  Mehrere physikalische Kanäle - für jeden Kanal ein Graph dejay 6 9.971 01.02.2013 14:17
Letzter Beitrag: jg

Gehe zu: