(nur für Geräte mit 32-bit CPU, siehe Feature-Matrix / "DAQ")
Leider wurde dieses Dokument noch nicht komplett ins Deutsche übersetzt.
Wenn möglich, verwenden Sie bitte die englischsprachige Version: DAQ_01.htm,
oder notfalls diese automatische Übersetzung.
Inhalt
- Einleitung, Funktionsprinzip
- DAQ-Konfiguration
- Konfiguration von DAQ-Kanälen als Quelle für Y(t)-Diagramme
- Verbinden von DAQ-Kanälen mit Analogeingängen (und ähnlichen On-Board-Signalen)
- Konfiguration der DAQ-Abtastrate
- Überprüfen der DAQ-Konfiguration zur Laufzeit ("Diagnostics")
- DAQ-Trigger
- Auslesen von DAQ-Speichern per Script
- Auslesen der neuesten Abtastwerte für einen bestimmten Kanal
- Auslesen von Abtastwerten für einen bestimmten Zeitpunkt
- Auslesen von Abtastwerten mit einer bestimmten Blocklänge
- Beispiele zur Verwendung der DAQ-Einheit
Die DAQ-Einheit dient zur schnellen Abtastung von Signalen, die z.B. per
CAN-Bus als "Signal" übertragen werden, oder Spannungen an den Analogeingängen (onboard).
Mit der DAQ-Einheit ließen sich bei älteren Geräten (MKT-View I, II) Signale
mit Abtastraten bis zu 1000 Samples/Sekunde erfassen.
Bei neueren Geräten (MKT-View IV) sind bis zu 20000 Samples/Sekunde möglich (pro Kanal, von den analogen Eingängen).
Die von der DAQ-Einheit kontinuierlich aufgenommenen Abtastwerte werden in einem
FIFO zwischengespeichert. Dieser FIFO dient z.B. als Datenquelle, wenn der zeitliche Verlauf
mit hoher Auflösung in einem Y(t)-Diagramm geplottet werden soll. Darüberhinaus können bei
einigen Geräten die Daten aus dem FIFO per Script weiterverarbeitet
werden, z.B. zur Spektrumanalyse (Schwingungs- oder Vibrationsanalyse) per Fourier-Transformation.

Blockschaltbild und Signalfluss in der DAQ
Für 'normale' Anzeigen (numerisch, oder als Diagramm mit Abtastraten unter 10 Hz) wird die DAQ-Einheit nicht benötigt.
In den meisten Fällen wird die DAQ im Zusammenhang mit Y(t)-Diagrammen verwendet.
In vielen Fällen werden DAQ-Kanäle im Programmiertool mit Anzeige-Variablen verbunden.
Dadurch kann das System die entsprechenden Meßwerte direkt beim Empfang entsprechender CAN-Signale mit der gewünschten Abtastrate
in den DAQ-Speicher übernehmen.
Setzen Sie dazu die Option 'Connect to DAQ channel' / 'Verbinde mit DAQ-Kanal' im rechten Teil des Definitionsfensters
auf der Registerkarte 'Variablen':

Das Programmiertool sucht beim Setzen dieser Option den nächsten freien DAQ-Kanal (von 0 bis 7 laufender Index),
und trägt diese Nummer in das entsprechende Feld ein.
Damit ist die Verbindung von Variablen (bzw. dessen CAN-Signal) und DAQ hergestellt.
Um eine Variable von der DAQ zu trennen, setzen Sie die oben beschrieben Option (Haken) wieder zurück.
Das Programmiertool entfernt die DAQ-Kanal-Nummer aus der Variablen-Definitions-Tabelle, wodurch der
DAQ-Kanal wieder frei wird.
Bei ausreichend großem Bildschirm können Sie alle momentan verwendeten DAQ-Kanäle auf einen Blick
in der letzten (oder vorletzten) Spalte der Variablen-Definitions-Tabelle sehen (neben dem optional angezeigten aktuellen Messwert:

Variablen-Definitions-Tabelle mit DAQ-Kanalnummern am rechten Rand
Der oben gezeigte Screenshot stammt aus der Applikation 'DAQ_test.cvt'.
In diesem Beispiel wurde die DAQ als Quelle für ein schnelllaufendes Y(t)-Diagramm verwendet,
in dem die Meßwerte 'FourSines1' bis 'FourSines4' mit hoher zeitlicher Auflösung angezeigt wurden.
Um ein bereits existierendes Y(t)-Diagramm auf die Verwendung der DAQ-Einheit umzustellen,
kann der Button mit der Aufschrift 'Verbinde XYZ mit DAQ' (darin ist XYZ der Name der im aktuell markierten
Diagramm-Kanal, z.B. 'Drehzahl') auf der Registerkarte 'Kanäle, Modus, Zeitbasis
im Dialog 'Eigenschaften eines Liniendiagramms' verwendet werden.
Die Bedienung ist denkbar einfach:
Markieren Sie zunächst den gewünschten Diagramm-Kanal in der Tabelle (unter 'Kanäle').
Nur wenn die Quelle des markierten Kanals noch nicht auf die DAQ-Einheit verweist (z.B. 'Drehzahl' statt 'daq[0]'),
hat der oben genannte Button eine Funktion, und bietet Ihnen z.B. die Funktion Verbinde 'Drehzahl' mit DAQ an.
Hinweise zur DAQ im Zusammenhang mit Y(t)-Diagramen:
Die DAQ-Kanal-Nummer braucht nicht mit der Diagramm-Kanal-Nummer übereinzustimmen !
Seit 2018-09 beginnt die Firmware mit dem 'Einsammeln' von Daten für Diagramme
bereits bevor das erste Diagramm sichtbar wird - auch ohne die DAQ-Einheit.
Zusätzlich zu den normalen 'Anzeige'-Variablen können DAQ-Kanäle auch elektrische
'onboard'-Eingänge mit der DAQ-Einheit gekoppelt werden, und stehen damit auch
als Signalquelle mit hoher Abtastrate für Y(t)-Diagramme und ähnliche Anzeigeelemente
zur Verfügung. Im Gegensatz zum Polling (im Script per system.analog_in[])
sind damit beim MKT-View IV Abtastraten bis zu 20 kHz erreichbar.

DAQ-Kanäle und -Optionen im Hauptmenü des Programmiertools
Um DAQ-Kanäle mit analogen und ähnlichen 'elektrischen' Eingängen zu koppeln, wählen Sie
'Optionen'..'Datenerfassungseinheit' im Hauptmenü des Programmiertools.
Wählen Sie einen der acht DAQ-Kanäle (Indizes 0..7), und geben eins der folgenden Schlüsselwörter
im Editierfeld ein (anstelle des Namens einer Anzeige-Variablen):
- analog_in[0]
- Erster analoger 'onboard'-Eingang (in den meisten 'MKT-Views' verfügbar, siehe Feature-Matrix).
Skalierung wie bei der entsprechenden Script-Funktion system.analog_in[0] (floating point, 0 bis 1.0 bzw. -1.0 bis +1.0).
- analog_in[1]
- Zweiter analoger 'onboard'-Eingang.
Skalierung wie bei der entsprechenden Script-Funktion system.analog_in[1] (floating point, 0 bis 1.0 bzw. -1.0 bis +1.0).
- analog_in[2]
- 3. analoger 'onboard'-Eingang (z.Z. nur beim MKT-View IV, 3-polige Buchse "X4")
- analog_in[3]
- 4. analoger 'onboard'-Eingang (z.Z. nur beim MKT-View IV, 3-polige Buchse "X4")
- mic_in
- Mikrofoneingang. Beim MKT-View IV kann der Mikrofoneingang (3.5-mm-Klinkenbuchse "X8") als Analogeingang
für die DAQ verwendet werden. Aus historischen Gründen ist der Wertebereich -32767 .. +32767.
- digital_in[0]
- erster digitaler Eingang ('onboard', 0=logic low, 1=logic high)
- digital_in[1]
- zweiter digitaler Eingang ('onboard', 0=logic low, 1=logic high)
- frequency_in[0]
- am ersten Digitaleingang gemessene Frequenz (nur bei bestimmten Geräten, muss wie hier beschrieben konfiguriert werden)
- frequency_in[1]
- am zweiten Digitaleingang gemessene Frequenz
- pulse_counter[0]
- am ersten Digitaleingang gezählte Impulse (nur bei bestimmten Geräten, muss wie hier beschrieben konfiguriert werden)
- pulse_counter[1]
- am zweiten Digitaleingang gezählte Impulse.
Die oben aufgezählten Schlüsselwörter (Tokens) können auch in Kanal-Definitionen für Diagramme (Y(t) or X/Y) verwendet werden.
Wird ein DAQ-Kanal bereits zum Erfassen des zeitlichen Verlaufs einer Anzeige-Variablen verwendet, dann wird (wie im oben gezeigten Screenshot)
der Variablenname in der Liste angezeigt. Der Variablenname kann einfach im Editierfeld mit der gewünschten Funktion (z.B. "analog_in[0]") überschrieben werden.

Zuordnung einer Signalquelle für einen DAQ-Kanal im Programmiertool
Hinweis: Als 'Quelle' für die DAQ-Einheit können keine beliebigen numerischen Ausdrücke verwendet werden,
sondern nur Signale, die mit hoher Abtastrate eingelesen werden können (alles andere kann z.B. in der Hauptschleife
'gepollt' werden).
Abhängig vom Typ der Signalquelle (Variablen, Analogeingänge, usw) können DAQ-Kanäle voneinander
abweichende Abtastraten verwenden. Wird ein bestimmter DAQ-Kanal z.B. für das
schnelle 'Einsammeln' von Daten für Diagramme
verwendet, dann wird die Abtastrate vom System passend zur Zeitbasis des aktuell
angezeigten Diagramms eingestellt.
In einigen Anwendungen wurde die DAQ-Einheit allerdings für andere Zwecke (ohne Diagramm) verwendet, z.B. für die Signalanalyse
per Script. Um in solchen Fällen die Abtastrate für die DAQ zu definieren, wählen Sie
im Hauptmenü des Programmiertools
'Optionen'..'Datenerfassungseinheit'..'Abtastrate',
und geben den gewünschten Werte (gemessen in Hertz bzw. 'Samples pro Sekunde') in der Dialogbox ein.
- Hinweis
- Bei alten Geräten wie z.B. MKT-View II lag die maximale Abtastrate unter 2000 Hz.
Bei Geräten mit schnellerer CPU sind deutlich höhere Abtastraten möglich, z.B. 20000 Hz beim MKT-View IV.
Für die Entwicklung von 'portablen', d.h. auch auf alten Geräten lauffähigen Applikationen sollte die
Abtastrate nur so hoch wie unbedingt nötig gewählt werden.
Für Experten: Wählen Sie eine Abtastrate knapp oberhalb der doppelten Signalfrequenz, siehe Nyquist-Shannon-Abtasttheorem.
Überprüfen der DAQ-Konfiguration zur Laufzeit ("Diagnostics")
Aufgrund der sehr voneinander abweichenden Hardware in den verschiedenen 'MKT-View'-Generationen
verfügen neuere Geräte über die im Folgenden beschriebene Anzeige der DAQ-Aktivität im Gerät.
Damit kann gegebenenfalls überprüft werden, ob eine ursprünglich für ein anderes Gerät entwickelte
Applikation (mit Nutzung der DAQ-Einheit) auch auf dem momentan verwendeten Gerät funktioniert.
Wesentliche Unterschiede bestehen z.B. in der Anzahl verfügbarer Analog-Eingänge
und deren 'Eignung' für die DAQ (auf bezüglich Einstellbarkeit der Abtastrate des A/D-Wandlers
oder Audio-Codecs).
Um eine schnelle Übersicht über den Status aller DAQ-Kanäle zu erhalten, rufen Sie zunächst das
System-Menu auf (i.A. durch gleichzeitiges Drücken der Funktionstasten F1 und F2).
Wählen Sie dann Diagnostics .. Data Acquisition Unit (ggf. per Drehknopf nach unten scrollen).
Je nach Modell und Programmierung (*) erscheint daraufhin
eine der folgenden Skizze ähnliche Anzeige:
Data Acquisition Unit (DAQ) status
Chn Source fSample nSamples Age Value
0 ThreeSines1 1000 1024 20 12345
1 ThreeSines2 1000 1024 18 0
2 ThreeSines3 0 0 --- (no data yet)
3 FourSines1 0 0 --- (no data yet)
4 ana_in[0] 20000 1024 0 12
5 ana_in[1] 20000 1024 0 1
6 ana_in[2] 20000 0 --- (source n/a)
7 mic_in 20000 1024 0 -1965
< Exit > (scroll here and press ENTER to return to the menu)
Scroll to select a DAQ channel
to plot it in a 'live' diagram.
|
|
(Übersicht 'DAQ Status' im 'Diagnose'-Menü eines neueren MKT-Views)
Bedeutung der Spalten in der Anzeige 'DAQ Status':
- 'Chn' (Kanal):
- Null-basierende DAQ-Kanalnummer (der gleiche Null-basierende Index wie in Script-Kommandos zum Steuern der DAQ)
- 'Source':
- Signalquelle, die momentan mit dem entsprechenden DAQ-Kanal verbunden ist.
In den meisten Fällen ist dies der Name einer Anzeige-Variablen (wie 'ThreeSines1' im gezeigten Beispiel),
oder der Name einer Spezialfunktion wie z.B. Analogeingängen ("ana_in"), Mikrofoneingang ("mic_in"),
digitaler Eingang ("dig_in"), usw. Zahlen in eckigen Klammern sind wie üblich Null-basierte Array-Indizes.
- 'fSample' oder 'fSamp' (abhängig von der Bildschirmgröße):
- Die für jeden DAQ-Kanal indivuell einstellbare Abtastrate in Hertz ('Samples pro Sekunde').
- 'nSamples' oder 'nSamp':
- Anzahl der in diesem DAQ-Kanal (Array) momentan gespeicherten Abtastwerte.
- 'Age':
- Alter des letzten (neuesten) Abtastwert in Millisekunden.
Ist z.B. die momentane Signalquelle eine mit einem CAN-Signal verbundene Variable,
die nur selten (oder im Fehlerfall gar nicht) übertragen wird,
könnte der damit verbundene DAQ-Kanal nur 'sehr alte' (oder gar keine) Daten
enthalten. Dies würde z.B. bei der Anzeige in einem 'live'-Diagramm dazu führen,
daß die entsprechende Kurve nicht mehr angezeigt wird.
- 'Value':
- Aktueller Wert im 'neuesten' Eintrag des Kanalspeichers (Array).
Ist der Kanalspeicher noch leer, oder kann von der DAQ-Einheit nicht
gefüllt werden weil die Quelle (momentan) nicht verfügbar ist, wird
in der Tabellenspalte unter 'Value' folgendes in Klammern angezeigt:
- 'no data yet' : Die Quelle ist zwar prinzipiell gültig, hat aber noch keine Daten geliefert.
- 'source n/a' : Die Quelle ist nicht verfügbar, z.B. weil die Applikation
(geladene *.cvt-Datei) ursprünglich für ein Gerät entwickelt wurde,
als im momentan verwendeten Gerät zur Verfügung stehen.
Das MKT-View IV hatte beispielsweise vier analoge Eingänge 'on-board',
während das neuere (kompaktere) MKT-View V nur zwei analoge Eingänge bietet.
Wie auf den meisten Anzeigeseiten im 'System'-Menü kann auch hier der weiße Selektionsbalken
per Dreh-/Druckknopf bewegt werden. Wird die Selektion in eine Zeile mit einem momentan
aktiven DAQ-Kanal bewegt, dann werden die Daten aus dem Kanalspeicher im unteren Teil
des Bildschirms in einer 'Ozilloskop'-ähnlichen Anzeige dargestellt:

(Screenshot 'DAQ Status' mit Anzeige eines Kurvenspeichers als Grafik)
- (*) Hinweis:
- Die 'DAQ Status'-Anzeige ist nur in neueren Geräten mit ausreichend großem Speicher
für die Firmware verfügbar, z.B. MKT-View V mit 2 MByte 'Firmware Flash'.
Hinweis: Die Speichertiefen (maximale Anzahl von Abtastwerten pro Kanal sind geräteabhängig,
und können von den im Folgenden aufgeführten Richtwerten abweichen.
- MKT-View I, MKT-View "Plus" : keine DAQ-Einheit vorhanden.
- MKT-View II : mindestens 1000 Abtastwerte pro Kanal
- MKT-View III : mindestens 4000 Abtastwerte pro Kanal
- MKT-View IV : mindestens 8000 Abtastwerte pro Kanal
Im Normalfall arbeitet die DAQ-Einheit kontinuierlich, ohne Unterbrechungen.
In typischen Meßaufgaben mit 'moderaten' Abtastraten können die Daten in Echtzeit per Script weiterverarbeitet werden,
oder per Diagramm laufend ('life') angezeigt werden. Gegenenenfalls kann das Script mit den a.a.O. vorgestellten
Befehlen das Diagramm auch stoppen (bzw. "einfrieren"), wenn ein bestimmtes Ereignis eingetreten ist
(z.B. Grenzwertüberschreitung, "merkwürdiges Geräusch", usw).
Bei sehr hohen Abtastraten stellt sich allerdings das Problem, daß weder der Bediener noch das
im Bediengerät ablaufende Script "schnell genug" auf das Ereignis reagieren können. In diesen Fällen
kann die DAQ-Einheit selbst in den Meßdaten (Abtastwerten) nach entsprechenden Ereignissen
suchen, und die Datenaufnahme mit einstellbarer Nachlaufzeit anhalten.
Das Prinzip entspricht weitgehend einem digitalen Oszilloskop mit Triggerfunktion:
- einer der Eingangskanäle wird als 'Triggerkanal' konfiguriert
- für den Triggerkanal wird ein Schwellwert (daq.trigger_level) definiert,
bei dessen Über- oder Unterschreiten (daq.trigger_slope) der Trigger ausgelöst wird
- nach dem Auslösen des Triggers läuft die Datenaufnahme noch einige Millisekunden weiter
(daq.post_trigger_time)
- nach dem Ablauf der Post-Trigger-Zeit wird die Datenaufnahme per DAQ gestoppt
- abhängig von der Trigger-Betriebsart (daq.trigger_mode: 'auto' / 'normal' / 'single')
kann die Datenerfassung kurz danach wieder neu starten.
Alles Weitere (nach einem Trigger-Ereignis) ist dann Sache des Scripts oder des Bedieners
(z.B. Begutachtung der getriggerten Aufzeichnung im einem Y(t)-Diagramm). Auch das
Fortsetzen der Datenerfassung per DAQ erfolgt i.A. per Script.
Die DAQ-Einheit kann nicht nur (direkt) zum schnellen Abtasten von Signalen für die Anzeige (Diagramm),
sondern auch für digitale Signalverarbeitung per Script eingesetzt werden. Mit dem Befehl
daq.read_channel( <DAQ-Kanalnummer>, <Ziel-Array> ); // zwei Parameter: die neuesten Abtastwerte lesen
oder
daq.read_channel( <Kanal>, <Ziel-Array>, <Unix-Zeit> ); // 3 Parameter: Für einen bestimmten Zeitpunkt
oder
daq.read_channel( <Kanal>, <Ziel-Array>, <Unix-Zeit>, <Länge> ); // 4 Parameter: Mit fester Blocklänge
kann das Script zeitlichen Verlauf eines Meßsignals aus einem DAQ-Speicher auslesen,
und in einem im Script deklarierten Array ablegen. Ein Beispiel finden Sie ebenfalls im
'DAQ-Test' (Applikation programs/DAQ_Test.cvt). Darin wird u.A. per FFT das Spektrum
des Mikrofon-Signals berechnet, logarithmiert, und wie
hier beschrieben als Diagramm zur Anzeige gebracht.
Wird beim Aufruf von daq.read_channel
nur die Kanalnummer und der Name des Ziel-Arrays angegeben,
dann liefert die Funktion immer die neuesten verfügbaren Abtastwerte
(siehe Beispiel in der Einleitung dieses Kapitels).
Die Anzahl von Abtastwerten ist nur durch die Kapazität des Ziel-Arrays,
und den momentanen 'Füllstand' des DAQ-internen Speichers begrenzt.
Die Anzahl ausgelesener Abtastwerte kann bei dieser Variante (mit
zwei Parametern) zwischen 1 und <Ziel-Array>.size liegen.
Wie auch bei den weiter unten beschriebenen Varianten von daq.read_channel
werden die folgenden Informationen in den Array-Header
übernommen:
- <Ziel-Array>.len
- Wird auf die Anzahl der von daq.read_channel in das Array eingelesenen Abtastwerte gesetzt.
- <Ziel-Array>..t_sample
- In dieser Komponente des Array-Headers wird das Abtastintervall in Sekunden
(= Kehrwert der Abtastrate in Hertz) gespeichert.
- <Ziel-Array>.unix_time
- Enthält nach dem Aufruf von daq.read_channel den Zeitstempel
des ersten im Ziel-Array abgelegten Abtastwert im Unix-Format.
Ist dieser Automatismus unerwünscht, kann das Script nach dem Aufruf
von daq.read_channel die oben genannten Timing-Parameter im Array überschreiben.
Die Funktion zum Zeichnen von Y(t)-Diagrammen verwendet diese Informationen
für die horizontale Skalierung. Details zum Plotten von Arrays finden sie
hier.
Für eine 'nahtlose', kontinuierliche digitale Signalverarbeitung per Script
und DAQ kann der Funktion daq.read_channel() noch ein drittes Argument
("gewünschter Zeitstempel") übergeben werden - siehe nächstes Kapitel.
Für spezielle Zwecke kann beim Auslesen auch der Zeitstempel für den
ersten auszulesenden Abtastwert (sample) spezifiziert werden:
daq.read_channel( <DAQ-Kanalnummer>, <Ziel-Array>, <Unix-Zeit> );
Mit drei Parametern (in der Argumentenliste) beginnt daq.read_channel
mit dem Abtastwert, dessen Zeitstempel mit dem Parameter <Unix-Zeit> übereinstimmt (*).
Diese im Dezember 2018 implementierte Erweiterung kann z.B. verwendet werden,
um im Script eine 'nahtlose' Signalverarbeitung zu realisieren.
Rufen Sie dazu daq.read_channel zyklisch aus der Hauptschleife des Scripts auf,
wobei Sie als Zeitstempel (drittes Argument von daq.read_channel) die
Zeitmarke des letzten Samples im vorhergehenden Block übergeben,
erhöht um das Abtastintervall eines einzelnen Samples:
daq.read_channel( 0/*channel*/, AudioStream/*dest-array*/, AudioStream.unix_time + AudioStream.t_sample ); // read the next block of samples
Ein Beispiel für den Einsatz dieser Variante von daq.read_channel() finden Sie
in der ausführlich kommentierten Beispiel-Applikation script_demos/diagrams.cvt
in der Funktion CheckTriggerAndUpdateDiagram().
-
- Stehen für die angegebene Zeitmarke wegen der begrenzten DAQ-Speichertiefe
keine Daten mehr im DAQ-Speicher zur Verfügung, dann liefert daq.read_channel
beim Aufruf mit drei oder vier Parametern stattdessem
den Block mit den ältesten noch im FIFO verfügbaren Abtastwerten,
und trägt deren 'Alter' in <Ziel-Array>.unix_time ein.
Siehe auch: Beispiel und Hinweise zur kontinuierlichen Signalverarbeitung (und dem
Übergang zur 'lückenhaften' Verarbeitung bei zu langsamen Script) im nächsten Kapitel.
Für bestimmte Algorithmen (z.B. FFT) können Abtastwerte nur in Blöcken mit
einer bestimmten Größe verarbeitet werden (z.B. 2^N).
Um diese Anforderung ohne großen Aufwand im Script zu erfüllen,
kann daq.read_channel mit einem vierten Parameter (optional) dazu gezwungen
werden, nur genau eine bestimmte Anzahl von Abtastwerten
auszulesen (statt einer nur durch die Kapazität des Ziel-Arrays begrenzten
maximalen Anzahl).
Beispiel:
float fltFFTin[1024]; // FFT-Eingang (1024 Abtastwerte)
float fltFFTout[1024+2]; // FFT-Ausgang mit 513 komplexen "Frequenz-Eimern"
double dblTimeForNextFFT; // geplanter Zeitpunkt für die nächste Transformation
...
daq.read_channel( 7, fltFFTin, dblTimeForNextFFT, 1024 ); // die FFT benötigt genau 2^N Werte - nicht weniger !
if fltFFTin.len > 0 then // nur wenn daq.read_channel neue Daten für die FFT geliefert hat:
dblTimeForNextFFT := fltFFTin.unix_time + fltFFTin.len * fltFFTin.t_sample; // 'geplanter' Zeitpunkt für die nächste FFT
Math.rfft( fltFFTin, fltFFTout ); // Vorwärts-FFT mit reellem Ein- und komplexem Ausgang
endif;
...
Da in diesem Fall (daq.read_channel mit vier Parametern) entweder 'gar nichts'
oder genau die gewünschte Anzahl (hier: 1024 Abtastwerte) eingelesen werden,
bewegt sich der 'geplante Zeitpunkt für die nächste FFT' im Idealfall
bei jedem erfolgreichen Aufruf um 1024 * fltFFTin.t_sample (Sekunden) weiter.
Bei einer Abtastrate von z.B. 11025 Hz (für Signale vom Mikrofoneingang im MKT-View)
müsste das Script dann 11025 Hz / 1024 = etwa 11 Spektren (FFTs) pro Sekunde berechnen,
was bei älteren Geräten (ohne Hardware-Fliesskommaeinheit) nicht funktioniert.
In dem Fall ("zu langsame Verarbeitung") liefert der nächste Aufruf von daq.read_channel()
dann nicht mehr den Block mit der 'gewünschten' Zeitmarke, sondern
(wegen der begrenzten DAQ-Speichertiefe) einen Block mit einer neueren Zeitmarke.
Mit anderen Worten: Bei zu langsamer CPU entstehen 'Lücken' zwischen zwei Blöcken,
erkennbar am "Sprung" der Zeitmarke (im obigen Beispiel: fltFFtin.unix_time > dblTimeForNextFFT).
Dieses Verhalten ist beabsichtigt. Es stellt sicher, daß bei zu langsamer CPU
ohne großen Aufwand im Script-Quelltext die Signalverarbeitung vom 'nahtlosen' Betrieb
in den Betrieb mit 'möglichst kurzen Lücken' zwischen zwei Blöcken übergeht.
In der Applikation DAQ_test.cvt (zu finden im Verzeichnis "programs" im Programmiertool)
finden Sie einige trickreiche Beispiele zur Verwendung der DAQ-Einheit. Sie besteht aus mehreren Anzeigeseiten:
Auf der ersten Anzeigeseite ("Analog") werden per DAQ 'gesammelte' Abtastwerte von Analogeingängen und dem Mikrofoneingang
in einem einfachen Y(t)-Diagramm dargestellt, ähnlich wie bei einem Speicheroszilloskop für NF-Signale.
Für dieses einfache Beispiel wird kein Script benötigt - die in Kapitel 3 beschriebene Definition von DAQ-Kanälen reicht dazu aus.

Wellenform an den Analogeingängen, per DAQ digitalisiert, Anzeige als Y(t)-Diagramm.
Beispiel aus Applikation 'DAQ_Test.cvt', läuft mit 20 kHz Abtastrate auf einem MKT-View IV.
Auf der zweiten Anzeigeseite ("CAN") werden per DAQ vom CAN-Bus 'eingesammelte' Meßwerte angezeigt.
Aus Sicht der DAQ wären deutlich mehr als 1000 Samples/Sekunde möglich, der CAN-Bus erlaubt
allerdings bei vertretbarer Buslast keine schnellere Übertragung.

Wellenform von per CAN empfangenen Signalen, per DAQ 'eingesammelt', Anzeige als Y(t)-Diagramm.
Beispiel aus Applikation 'DAQ_Test.cvt', Testlauf auf einem MKT-View IV.
Auf der dritten Anzeigeseite ("Spectrum Analyser") werden per DAQ 'eingesammelte' Analogwerte
per Script (mit FFT) vom Zeit- in den Frequenzbereich transformiert, und das Resultat (Spektrum)
wie hier beschrieben gezeichnet.

Beispiel eines Diagramms mit Hintergrundbild (hier: Spektrogramm aus 'DAQ_Test.cvt').
Verwendet die Datenerfassungseinheit zum Digitalisieren des Mikrofonsignals im MKT-View,
und die Fourier-Transformation im Script, um daraus Spektren zu berechnen.
Das Spektrogramm (unter der Kurve mit dem aktuellen Spektrum) wird per Script
in einem Canvas-Objekt gezeichnet.
Letzte Änderung: 2024-06-20 durch WB / MKT Systemtechnik .