' schrieb:Danke. Den Unterschied zwischen Notifier und Queue hab ich so ziemlich verstanden: Notifier unterbricht das Hauptprogramm wenn Daten kommen, Queue schreibt die Daten kontinuierlich in einen Puffer, dieser wird dann vom Hauptprogramm ausgelesen. Das mit Notofier funktioniert mit polling eh recht ähnlich wie eine Queue.
Aber was versteht man unter implizitem Timing? Durch Anzahl Samples sagst du dem Read doch nur wieviele Samples es sich abholen soll. Oder meinst du damit, dass es warten muss, bis soundsoviele Daten zur Verfügung stehen?
Was meinst du mit dynamischer Speicherallokierung?
lg, PHILIPP
Freedive hat selbstverständlich recht: Den "Testmode" in dem VI hatte ich vorgesehen, damit man die Datenerfassung autark ohne das Hauptprogramm testen kann.
"Implizites Timing" ist kein offizieller Begriff, Freedive meint damit, daß die While-Schlife, in der sich das QAQmx Read befindet, entsprechend dem Datenaufkommen getimed und mit den Daten synchronisiert wird, ohne das sich dazu in der Schleife ein Timer befindet.
Die Datenerfassung wird hardwaremäsig vom internen Timer auf der Messkarte getaktet und die Samples kommen in der Regel erst einmal in einen Buffer. Das DAQmx Read hat mit dem Timing der Datenerfassung überhaupt nichts zu tun, da es nur die Daten aus dem Puffer liest. Es hat aber sehr wohl zu tun mit dem Timing bei der Datenverarbeitung und deren Synchronisation mit der Datenerassung, und zwar funktioniert es so:
In der Regel wird eine Anzahl von Daten festgelegt, die gelesen werden sollen, z.B. N=10. Das VI Read wartet dann geduldig mit der dem Lesen, bis 10 Samples im Buffer sind (D.h es blockiert so lange, so wie es die Wait-Funktion auch tut) ). Damit ergibt sich das richtige Timing mit der Datenerfassung und die Synchronisation. Pech ist es natürlich, wenn die Datenverarbeitung in der Schleife zu lange dauert. Bei 100 Daten im Buffer werden auch nur 10 Werte herausgelesen, und wenn die Datenerzeugung schneller ist als die Verarbeitung, dann füllt sich der Buffer immer mehr, bis es zum Überlauf kommt.
Man kann DAQmx read auch anweisen, alle Daten im Buffer auszulesen. Aber selbst dann ist hier kein Polling (= laufendes Nachfragen, ob schon etwas im Buffer ist) erforderlich. Denn wenn der Buffer ganz leer ist, dann wartet das VI, bis wenigstens 1 Sample im Buffer ist, so daß auch hier die Datenverarbeitung in der Schleife nie mit leeren Daten dasteht.
PS: Wer in die Schleife mit DAQmx Read noch eine Wait-Funktion einbaut, outet sich als jemand, der dieses Prinzip noch nicht verstanden hat. Man sieht das hier bei Anfängern leider immer wieder.