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 

Dieses Thema hat akzeptierte Lösungen:

Maximale Arraygröße an Messkarte



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!

12.07.2013, 12:41
Beitrag #1

LarsO Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Jun 2013

11
2012
DE



Maximale Arraygröße an Messkarte
Hi,
ich habe mir eine NI karte (6221 37 Pin) besorgt um Spannungen auszugeben und synchron Daten zu lesen. Das klappt auch alles sehr gut.

Meine Frage bezieht sich auf die Kombination aus Hard- und Software. Die Karte hat vermutlich einen internen Speicher, an den ich ein Array schicken, was die Karte dann mit der entsprechenden Rate abarbeitet. Meine Frage ist nun, was passiert, wenn das Array so groß ist, dass es den Speicher übertrifft.
Werden die Daten dann Stück für Stück gelesen, oder wie kann ich mir das vorstellen? Ich finde auch keine Angabe wie groß der Speicher für die Analoge-Spannungsausgabe bzw. die Analoge-Spannungsmessung ist. Wäre nett, wenn mich da jemand aufklären könnte.

Gruß Lars
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.07.2013, 13:42
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Maximale Arraygröße an Messkarte
Hallo Lars,

Zitat:Ich finde auch keine Angabe wie groß der Speicher für die Analoge-Spannungsausgabe bzw. die Analoge-Spannungsmessung ist.

Einfach mal in die Specs reinschauen: "Output FIFO size 8,191 samples shared among channels used"

Zitat:Wäre nett, wenn mich da jemand aufklären könnte.
Ich habe das Manual gerne für dich gelesen! Big Grin Rtmfx

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.07.2013, 04:28 (Dieser Beitrag wurde zuletzt bearbeitet: 13.07.2013 04:29 von Holy.)
Beitrag #3

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: Maximale Arraygröße an Messkarte
(12.07.2013 12:41 )LarsO schrieb:  Meine Frage bezieht sich auf die Kombination aus Hard- und Software. Die Karte hat vermutlich einen internen Speicher, an den ich ein Array schicken, was die Karte dann mit der entsprechenden Rate abarbeitet. Meine Frage ist nun, was passiert, wenn das Array so groß ist, dass es den Speicher übertrifft.
Werden die Daten dann Stück für Stück gelesen, oder wie kann ich mir das vorstellen?

Die Daten werden dann, je nach Einstellung, zu einem bestimmten Zeitpunkt in den Speicher der Karte geladen. Darum musst du dich aber nicht kümmern, da ein DAQmx Write die Daten erstmal in den Arbeitsspeicher bringt und um die korrekte Befüllung des internen FIFO-Speichers der Treiber sich selbst kümmert. Deine Aufgabe ist es primär dafür zu sorgen das neue Daten rechtzeitig angelegt wurden. Weiterhin wäre auch noch die Buffer Regeneration abzuschalten. Die sorgt normalerweise dafür, dass der Inhalt des Puffers immer wieder erneut ausgegeben wird.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2013, 10:31 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2013 11:01 von LarsO.)
Beitrag #4

LarsO Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Jun 2013

11
2012
DE



RE: Maximale Arraygröße an Messkarte
Danke schon mal für die Antworten. (Das Manuel habe ich gelesen und ich bin auch auf den FIFO gestoßen, aber wenn ich nicht weiß was das ist (auch wiki hält sich da "bedeckt") kann ich damit wenig anfangen.)

Mal ein Beispiel (nur für mein Verständnis):
Ich habe gebe dem "Write" ein Array von 1000*1000 Punkten (10^6 samples to Write).
Dann werden diese erst in den Arbeitsspeicher geladen und der Treiber sorgt für die Abarbeitung des Arrays und schickt die Daten (Blockweise oder einzeln?) an die Karte.
Die gibt dann die Spannungen entsprechend der Rate aus.

1) Da ich das Array nur einmal schreibe, interessiert mich das Regeneration doch gar nicht oder?
1.1) Welcher Buffer ist bei der Regeneration gemeint? Der der Karte oder des Arbeitsspeichers?

2) Wenn die Write-Rate sehr hoch ist (100kHz), kann es dann zu Problemen mit dem Übertragen der Daten vom Arbeitsspeicher auf die Karte kommen und die Synchronisation zwischen Read und Write behindern?
Dass das Übertragen der Daten vom Arbeitsspeicher in die Karte so lange dauert, dass der Takt "verloren" geht.
3) Findet die Datenübertragung per DMA statt?


Gruß Lars
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2013, 12:07
Beitrag #5

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: Maximale Arraygröße an Messkarte
(14.07.2013 10:31 )LarsO schrieb:  1) Da ich das Array nur einmal schreibe, interessiert mich das Regeneration doch gar nicht oder?
Nach Ausgabe der letzten Daten könnte es schon relevant werden weil er dann einfach den letzten Inhalt des FIFOs immer wieder ausgibt.

(14.07.2013 10:31 )LarsO schrieb:  1.1) Welcher Buffer ist bei der Regeneration gemeint? Der der Karte oder des Arbeitsspeichers?
Der Karten-FIFO

(14.07.2013 10:31 )LarsO schrieb:  2) Wenn die Write-Rate sehr hoch ist (100kHz), kann es dann zu Problemen mit dem Übertragen der Daten vom Arbeitsspeicher auf die Karte kommen und die Synchronisation zwischen Read und Write behindern?
Dass das Übertragen der Daten vom Arbeitsspeicher in die Karte so lange dauert, dass der Takt "verloren" geht.
Was verstehst du unter Write-Rate? Wenn du meinst 10^6 Datenpunkte 100.000 mal je Sekunde zu übertragen dürfte das deine CPU, RAM und den jeweils involvierten Bus überfordern. Was meinst du hier mit Synchronisation zwischen Read und Write? Solltest du für AO und AI den selben Sampletakt verwenden, würde das auf der Karte direkt laufen und dadurch nicht beeinflusst werden. Wenn die Synchronisation in Software läuft bekommst durch Ressourcenauslastung natürlich Probleme. Im Allgemeinen ist mir bei 2.) unklar auf was du wirklich abzielst.

(14.07.2013 10:31 )LarsO schrieb:  3) Findet die Datenübertragung per DMA statt?
Ja
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2013, 15:08 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2013 18:40 von Lucki.)
Beitrag #6

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Maximale Arraygröße an Messkarte
Zu ergänzen wäre noch, dass Dich die karteninternen FIFOs normalerweise gar nicht zu interessieren brauchen - von Spezialfällen mal abgesehen. Im PC legt Labview einen zweiten Puffer an, und das ist in der Regel der eigentliche Puffer in Richtung Benutzer.
Dessen Größe (bis hin zu gigantisch) kann man mit DAQmx selbst festlegen; oder man läßt den Anschluss offen, dann verwaltet er sich von selbst und das ist meistens optimal.

Zwischen Karten- und PC-Puffer findet im Hintergrund ein intelligentes Zusammenspiel statt, und das ist der Grund, warum der Benutzer von der Existenz des kleinen internen Kartenpuffers in der Regel gar nichts wissen muss.

Man muss alllerdings sagen, dass es jetzt immer mehr Messkarten mit USB gibt. Der Datenaustausch zwischen Karten- und PC-Puffer läuft dann über den FLaschenhals USB (2.0?) und nicht direkt über DMA. Hier sollte man schon etwas tun. Z.B sollte bei kontinuierlischer schneller periodischer Datenausgabe die Samplegröße in den Kartenpuffer passen - dann ist der USB-Kanal dafür schon mal völlig entlasstet.

Deine Vorstellung, dass bei Pufferüberlauf einfach unbemnerkt Daten verloren gehen könnten, ist falsch. Selbstverständlich kommt es dann zu einer handfesten Fehlermeldung und Abbruch des Programms.

Ganz wichtig ist die Synchronisation der Daten - Ein- und Ausgaberaten mit dem Puffer bei kontinuierlichem Betrieb. Dafür solltest Du Beispiele studieren. Das Prinzip ist, dass DAQmx Write bzw. DAQmx Read wartet, bis wieder Daten in den Puffer hineingehen bzw die angeforderte Anzahl von Samples im Puffer ist. (Dass Anfänger das nicht richtig kapiert haben, erkennt man u.a. daran, das sie ein "Wait" in der Erfassuns/Ausgabeschleife haben).

Um zu Deiner Frage nach der maximalen Arraygröße zu kommen: Sie ist so groß, wie Du in DAQmx dafür Puffergröße eingerichtet hast. Das Maximum ist gegeben durch das Memory Deines PCs. Der kleine Puffer auf der Messkarte dient nur als Zwischenpuffer, er wird gewöhnlich automatisch auf untere Ebene verwaltet und hat zu Deiner Frage keinen direkten Bezug.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
14.07.2013, 21:37
Beitrag #7

LarsO Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Jun 2013

11
2012
DE



RE: Maximale Arraygröße an Messkarte
Zu Holy:
Zitat:Nach Ausgabe der letzten Daten könnte es schon relevant werden weil er dann einfach den letzten Inhalt des FIFOs immer wieder ausgibt.
Ist der "letzte Inhalt" das Array im FIFO Speicher oder der letzte Wert im FIFO Speicher?

Zitat:Im Allgemeinen ist mir bei 2.) unklar auf was du wirklich abzielst.
Ich möchte Spannungen ausgeben (2 Kanäle, einen für die x-Richtung, eine für die y-Richtung). Damit verfahre ich zwei Piezos in der Ebene und möchte an jedem "angefahrenen" Punkt zwei verschiedene Spannungen synchron zur Ausgabe messen. Dabei ist es sehr wichtig, dass Anfahren und Lesen synchron sind, sodass ich jedem Messwert (z, w) auch einem Messpunkt zuordnen kann [ z(x,y); w(x,y) ].
Jetzt ist das Array was ich verfahre jedoch sehr viel größer als der FIFO Speicher und ich hatte die Befürchtung, dass das Lesen dem Takt folgt, das Schreiben jedoch nicht, weil das Array noch auf die Karte transferiert werden muss und es somit zu einer Verschiebung von Lese und Schreiberate kommt.
Bildlich dargestellt:
----------------------------------------- Lesen
++++++++ ++++++ +++++ Schreiben (Lücken auf Grund der Übertragung des Arrays an die Karte)


Aber durch das DMA wird dies dann vermutlich nicht so sein, da die Daten nicht "transferiert" werden müssen.

Zu Lucki direkt habe ich keine Fragen Wink

Wenn die Daten nicht zwingend direkt auf der Karte gepeichert werden (wegen DMA), kann ich dann die Daten, die ich während des Synchronen Lesens bzw Schreibens erfasse auch an den PC streamen, sodass ich die Daten gleich auswerten kann, ohne auf das ganze Array warten zu müssen bzw. ohne den Takt und die Synchronität zu beeinflussen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2013, 21:50
Beitrag #8

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: Maximale Arraygröße an Messkarte
Inhalt bezieht sich hierbei auf den Inhalt des FIFOs, d.h. das "Array" im FIFO. Das könnte dann natürlich aber auch die Länge 1 haben.

Die Herausforderung an deiner Ausgabe ist hierbei Erfassung und Ausgabe zu synchronisieren. Die Standardeinstellungen führen zu einem eigenen Sample Clock für die Ausgabe und für die Erfassung. Das müsstest du explizit anders konfigurieren. Du könntest deinem Erfassungstask explizit den AI/SampleClock als Taktquelle geben. Dann noch vor dem Start des Erfassungstask den Ausgabetask mit den ersten Daten beschicken und danach starten und dann geht alles mit Start des Erfassungstasks richtig los. Relevant ist hierbei sicher noch der Punkt, dass zwischen deiner Ausgabe und der echten Reaktion deiner Hardware noch Zeit vergeht. Ob das für deine Betrachtungen aber relevant ist, kannst denke ich du am besten bewerten.
Die Übertragung der neuen Ausgabedaten in den FIFO erfolgt abhängig von der Konfiguration. Konfigurierbar sind hierbei Zeitpunkte wie "mehr als die Hälfte im FIFO frei" oder z.B. "FIFO nicht voll". Somit ist es problemlos möglich eine lückenlose Ausgabe zu realisieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.07.2013, 09:04 (Dieser Beitrag wurde zuletzt bearbeitet: 15.07.2013 09:15 von Lucki.)
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
RE: Maximale Arraygröße an Messkarte
Die Synchronisation von Ein- und Ausgabe gehört in die Kategorie "Labview-Meisterkurs". Du schreibst: "das klappt sehr gut", und stellst gleichzeitig zu diesem Thema Fragen eines ahnungloser Anfängers. Hier passt irgendetwas nicht zusammen. Gern würde ich das VI mal sehen.

So habe ich mich in das Thema eingearbeitet:
1. Das Beispiel in
Signalerfassung mittels Hardware / DAQmx / Synchronisation
suchen, welches meiner Anwendung am Nächsten kommt.
2. Das Beispiel studieren, mit Hardware laufen lassen und damit herumspielen, bis ich es restlos verstanden habe.
3. Das Beipiel in mehreren Iterationen ändern, immer nur in minimalen Schritten, bis es genau meiner Aufgabenstellung entspricht.

NB: In keinem Labview - Lehrbuch wird dieses wichtige Theam behandelt, nicht mal andeutungsweise. Das kann daran liegen, dass die Autoren Theoretiker sind und vor Lötkoben, realer Hardware und realer Außenwelt eher Abneigung empfinden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.07.2013, 17:09
Beitrag #10

LarsO Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Jun 2013

11
2012
DE



RE: Maximale Arraygröße an Messkarte
Ich habe nochmal Messungen angestellt und musste feststellen, dass die Erfassung und die Ausgabe genau einen Tak auseinander liegen. Er misst einen Takt, bevor er anfängt zu schreiben. (Dieses Programm habe ich aus einem Beispiel "zusammengebastelt".) Oder es liegt daran, dass er es "gleichzeitig" ausgibt und er dadurch noch den alten, statt den neuen Wert misst. Einen Takt vorher Schreiben, dann Lesen wäre aber besser...dann stimmt die zuordnung der Punkte wenigstens...

Jetzt tritt aber noch ein neues Problem auf:
Ich will/muss die Daten live sehen bzw. auswerten, die ich messe. Bekomme ich das dort noch eingebaut ohne dass ich die Zuordnung (z(x,y)) verliere?

Im Anhang ist auch das Programm (die For-Schleife ist nur zur erzeugung einer Geraden, die ich ausgebe und synchron messe).

PS: Ich hoffe, dass ich euch mit den Fragen nicht zu sehr nerve, aber wie ihr selbst schon sagt ist die Literatur zu dem Thema rel. mager...


Angehängte Datei(en)
9.0 .vi  Synchr.vi (Größe: 20,77 KB / Downloads: 201)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Hinzufügen einer Messkarte 78Ingo 3 4.613 06.05.2014 10:08
Letzter Beitrag: Lucki
  Probleme mit neuer Messkarte NI6210 Alice_im_Labviewland 2 3.892 29.03.2013 16:31
Letzter Beitrag: tobiasf5
  richtige Messkarte + Motorensteuerung wählen derjan 1 3.873 06.04.2010 20:02
Letzter Beitrag: jg

Gehe zu: