# NI-DAQmx

> Messdatenerfassungs-Hardware von National Instruments (cDAQ-Chassis und ihre Module, USB- und PCI-Express-Geräte sowie die simulierten Geräte von NI MAX), ein Abtastwert je Abfrage über das auf diesem Rechner installierte NI-DAQmx gelesen: die Karte NI-DAQmx-Gerät, physischer Kanal und Messgröße eines Tags, Lesen und Schreiben, die Gerätesuche und ein durchgerechnetes Beispiel an einem cDAQ-Chassis.

Der Treiber **NI-DAQmx** liest und schreibt Messdatenerfassungs-Hardware von National Instruments:
cDAQ-Chassis und ihre Module der C-Serie, USB-Geräte wie das USB-6001 oder das USB-6211 und
PCI-Express-Geräte, über NI-DAQmx, den Treiber, den National Instruments für seine Hardware
kostenlos abgibt. Es ist die Hardware, die ein LabVIEW-Programm mit den DAQmx-Blöcken liest, auf
einem Panel eingerichtet statt in einem Blockdiagramm verdrahtet: Jedes Tag ist ein physischer
Kanal, wie NI MAX ihn nennt (`ai0`, `port0/line3`, `ao0`, `ctr0`), mit dem, was der Kanal misst
oder ansteuert, und die Werte landen dort, wo die jedes anderen Tags landen: in der Logik, auf
Dashboards, in den Läufen eines Prüfstands im [Process](process).

Der Treiber liest einen Abtastwert je Abfrage: Im Abfrageintervall jedes Tags nimmt er einen Wert
des Kanals, wie es jeder andere Treiber tut. Er dient langsamen Signalen (Temperaturen, Drücke,
Füllstände, Zustände, Zählerstände), nicht der kontinuierlichen Erfassung, die die Hardware nach
ihrem eigenen Takt leistet; siehe [Grenzen, die man kennen sollte](#limits-worth-knowing).

Ein Gerät dieses Treibers ist ein Gerät von NI MAX, gefunden über den Namen, den NI MAX ihm gibt,
wo auch immer es angeschlossen ist: an USB, in einem PCI-Express-Steckplatz, in einem cDAQ-Chassis
an USB oder Ethernet. Die simulierten Geräte, die NI MAX für den größten Teil der NI-Hardware
kostenlos anlegt, werden wie echte gelesen, sodass sich eine Konfiguration aufbauen und
ausprobieren lässt, bevor die Hardware eintrifft. Simulierte Geräte lassen sich auch über die
Konfigurations-API von NI anlegen, die ein KI-Assistent mit Zugriff auf diesen Rechner mit Ihrer
Zustimmung nutzen kann. Die Geräte liegen unter dem Treiber und können in
Ordnern abgelegt werden, **Treiber → Ordner → Gerät → Tag**, wie unter jedem Treiber ohne serielle
Leitung oder Broker.

## NI-DAQmx auf diesem Rechner {#ni-daqmx-on-this-computer}

Das Produkt enthält NI-DAQmx nicht und installiert keine seiner Dateien. Der Treiber liest die
Hardware über das auf diesem Rechner installierte NI-DAQmx, dasselbe, das NI MAX und LabVIEW
verwenden. Die Station prüft selbst, ob es vorhanden ist: beim ersten Mal, wenn die Seite des
Treibers, die Seite eines seiner Geräte oder der Agent danach fragt, und danach alle 30 Sekunden,
solange es fehlt. Bis der Connector gestartet ist, ist nicht bekannt, ob NI-DAQmx vorhanden ist, und
es wird nichts darüber gesagt. Solange es fehlt:

| Wo | Was geschieht |
| --- | --- |
| Die Seite des Treibers | Ein Warnhinweis, "NI-DAQmx ist auf diesem Rechner nicht installiert", mit den Schritten unten. Sein Link öffnet die Seite von NI im Browser des Rechners. |
| Die Seite jedes Geräts | Derselbe Hinweis. |
| Die Geräte | Lassen sich hinzufügen und konfigurieren, Tags eingeschlossen; sie bleiben getrennt, und der letzte Fehler jedes Geräts nennt dieselben Schritte, auf Englisch, wie die Ursachen des Treibers geschrieben sind. |
| Geräte suchen | Listet nichts auf und sagt, dass NI-DAQmx nicht installiert ist und dass der Hinweis auf der Seite des Treibers den Download und die Installationsschritte nennt. |
| Der Agent | `driver_capabilities` nennt die Schritte unter `prerequisite`, mit `installed` false. |

So installieren Sie es:

1. Öffnen Sie die NI-Seite [NI-DAQ™mx Download](https://www.ni.com/en/support/downloads/drivers/download.ni-daq-mx.html). Sie verlangt vor dem Download eine Anmeldung mit einem NI-Konto.
2. Nehmen Sie in ihrer Liste Version die neueste Version, deren Readme (**View Readme**) das Windows dieses Rechners und unter Device Support Ihr Gerät aufführt. NI-DAQmx läuft nur unter 64-Bit-Windows.
3. Führen Sie das Installationsprogramm als Administrator aus: Es installiert NI-DAQmx über den NI Package Manager. Starten Sie den Rechner neu, wenn das Installationsprogramm danach fragt.

Das neueste NI-DAQmx unterstützt manche älteren Geräte nicht mehr: Wenn sein Readme Ihr Gerät nicht
aufführt, wählen Sie in der Liste Version eine frühere Version, deren Readme es aufführt.

Spätestens 30 Sekunden nach der Installation verschwindet der Hinweis, und die Geräte dieses
Treibers verbinden sich mit ihrer bestehenden Konfiguration, ohne dass Ganter Lab neu gestartet
wird. NI MAX (NI Measurement & Automation Explorer) zeigt jedes Gerät mit dem Namen, der in [die Karte NI-DAQmx-Gerät](#the-ni-daqmx-device-card) gehört.

## Die Seite des Treibers {#the-drivers-page}

Die Seite trägt die Tabelle **Geräte** jedes Treibers (siehe
[Die Gerätetabelle](connector-drivers#the-device-table)), die mit **Gerät hinzufügen** rechts von
ihrem Titel wächst; leer zeigt sie "Noch keine Geräte." Die Leiste des Treibers trägt
**Geräte suchen**, und die Seite hat keine Karte Suchbereich, weil der Suchlauf NI-DAQmx fragt und
sonst niemanden.

## Gerät {#device}

### Die Karte NI-DAQmx-Gerät {#the-ni-daqmx-device-card}

Ein Gerät dieses Treibers hat keine Karte Verbindung: Es gibt keinen Host, keinen Port und keine
Route einzutragen, denn NI-DAQmx findet das Gerät über seinen Namen. An ihrer Stelle sagt die Karte
**NI-DAQmx-Gerät**, welches Gerät von NI MAX es liest.

| Feld | Bedeutung | Standard |
| --- | --- | --- |
| **Gerätename** | "Der Name, den NI MAX dem Gerät gibt, etwa Dev1, oder cDAQ1Mod1 für ein Modul eines cDAQ-Chassis. Ein in NI MAX umbenanntes Gerät wird wieder gelesen, sobald sein neuer Name hier steht." | leer |
| **Produkt** | Nur lesbar: "Was das Gerät laut NI-DAQmx ist, etwa NI 9211, gelesen bei jeder Verbindung der Station mit ihm." Es zeigt "Noch nicht gelesen", bis sich das Gerät verbindet, und wieder, sobald es nicht mehr verbunden ist. Davon wird nichts gespeichert. | |

Ein cDAQ-Chassis ist ein eigenes Gerät von NI MAX (`cDAQ1`), und jedes seiner Module ebenso
(`cDAQ1Mod1`, `cDAQ1Mod2`). Die Kanäle eines Moduls werden am Gerät des Moduls gelesen; die Zähler
des Chassis (`_ctr0` bis `_ctr3`) am Gerät des Chassis. Das **Abfrageintervall (ms)** der Karte
Gerät wirkt wie bei jedem Treiber, und jedes Tag kann es überschreiben.

Ein neues Gerät hat noch keinen Namen, und die Station versucht nicht, es zu erreichen, bis es einen
hat: Seine Zeile zeigt "NI-DAQmx-Gerät noch nicht eingetragen", seine Tags lesen als Lücken, und
seine Seite trägt den Hinweis
"Die Station versucht nicht, dieses Gerät zu erreichen, solange es keinen NI-DAQmx-Gerätenamen hat. Deshalb wird noch nichts aus ihm gelesen, und es gibt keinen Fehler anzuzeigen. Tragen Sie den Namen, den NI MAX dem Gerät gibt, unten in der Karte NI-DAQmx-Gerät ein, dann verbindet sich die Station mit ihm."
Auf einem Rechner ohne NI-DAQmx steht dort stattdessen der Hinweis, dass NI-DAQmx nicht installiert
ist.

Ein Name, den NI-DAQmx nie lesen könnte, wird unter dem Feld abgelehnt: "Ein Gerätename enthält kein '/', ',' oder ':'. Schreiben Sie den Namen genau so, wie NI MAX ihn zeigt, etwa Dev1 oder cDAQ1Mod1."
Ein Schrägstrich trennt ein Gerät von seinem Kanal, `Dev1/ai0` ist also der Kanal eines Tags und
kein Gerät. Ob NI MAX den Namen kennt, ist die eigene Antwort von NI-DAQmx, gegeben, wenn sich die
Station verbindet: Ein Gerät, das NI MAX nicht kennt, bleibt getrennt, mit den Worten von NI-DAQmx
als letztem Fehler.

Der Basis-URI, den die Kopfzeile zeigt, ist der Name des Geräts hinter dem Schema des Treibers:
`nidaqmx://cDAQ1Mod1`. Zwei Geräte dieses Treibers dürfen dasselbe Gerät von NI MAX lesen, etwa
dasselbe Modul in zwei verschiedenen Abfrageintervallen; der Name muss nicht eindeutig sein.

## Adressierung des Tags {#tag-addressing}

### Der physische Kanal {#the-physical-channel}

Ein Tag dieses Treibers liest oder steuert einen Kanal seines Geräts. Die Karte Quelle des Tags
trägt das Feld **Physischer Kanal**, mit einem Hinweis darunter, der der Messgröße folgt:
"Analogeingangskanal, z. B. ai0 oder cDAQ1Mod1/ai0", "Digitale Leitung, z. B. port0/line3 oder Dev1/port0/line3",
"Analogausgangskanal, z. B. ao0 oder Dev1/ao0" oder "Zähler, z. B. ctr0, oder _ctr0 an einem cDAQ-Chassis".

Der Kanal wird relativ zu seinem Gerät gespeichert (`ai0`), sodass ein in NI MAX umbenanntes Gerät
ein einziges Feld ändert, das des Geräts. Ein Kanal, der ganz geschrieben ist, wie NI MAX ihn
schreibt (`cDAQ1Mod1/ai0`), wird relativ gespeichert, wenn er das eigene Gerät des Tags nennt, und
abgelehnt, wenn er ein anderes nennt:
"Dieser Kanal gehört zum Gerät Dev1, nicht zu cDAQ1Mod1. Tragen Sie einen Kanal dieses Geräts ein oder nur den Kanal, etwa ai0."

### Messgrößen {#measurements}

Unter dem Kanal sagt **Messgröße**, was der Kanal misst oder ansteuert. Die Messgröße bestimmt die
Datentypen, als die das Tag gelesen wird, den Zugriff, den es erlaubt, seine Einheit und die
Felder, die darunter gezeichnet werden.

| Messgröße | Kanal | Datentyp | Zugriff | Einheit |
| --- | --- | --- | --- | --- |
| **Spannungseingang** | ein Analogeingang, `ai0` | Double oder Float | Nur lesen | Volt |
| **Stromeingang** | ein Analogeingang, `ai0` | Double oder Float | Nur lesen | Milliampere |
| **Thermoelement** | ein Analogeingang, `ai0` | Double oder Float | Nur lesen | Grad Celsius |
| **Digitale Eingangsleitung** | eine digitale Leitung, `port0/line3` | Boolean | Nur lesen | |
| **Digitale Ausgangsleitung** | eine digitale Leitung, `port0/line3` | Boolean | Lesen und schreiben (der Standard), Nur schreiben oder Nur lesen | |
| **Spannungsausgang** | ein Analogausgang, `ao0` | Double oder Float | Nur schreiben | Volt |
| **Flankenzählung** | ein Zähler, `ctr0` (`_ctr0` an einem cDAQ-Chassis) | Int64 oder Double | Nur lesen | Zählimpulse |

Ein neues Tag ist ein Spannungseingang, gelesen als Double. Ein eingetragener Kanal, den die
geltende Messgröße nicht liest, bringt die Messgröße mit, die er am natürlichsten liest: ein
Analogeingang einen Spannungseingang, eine digitale Leitung eine digitale Eingangsleitung, ein
Analogausgang einen Spannungsausgang und ein Zähler eine Flankenzählung. Eine andere Messgröße zu
wählen bringt deren Bereich mit, und ein Datentyp oder Zugriff, den sie nicht erlaubt, wird zu dem,
den sie verwendet, sodass die Listen Datentyp und Zugriff nur anbieten, was die Messgröße erlaubt.
Strom wird in Milliampere gelesen (NI-DAQmx liest Ampere, und der Treiber multipliziert mit 1000),
sodass eine 4-bis-20-mA-Schleife so geschrieben wird, wie man sie nennt.

Jede Messgröße sagt unter ihrer Auswahl, was sie tut:

| Messgröße | Die Zeile darunter |
| --- | --- |
| **Spannungseingang** | "Liest bei jeder Abfrage einen Abtastwert in Volt." |
| **Stromeingang** | "Liest bei jeder Abfrage einen Abtastwert in Milliampere." |
| **Thermoelement** | "Liest bei jeder Abfrage einen Abtastwert in Grad Celsius, mit kompensierter Vergleichsstelle." |
| **Digitale Eingangsleitung** | "Liest die Leitung als wahr (high) oder falsch (low)." |
| **Digitale Ausgangsleitung** | "Setzt die Leitung auf den geschriebenen Wert und liest den Zustand zurück, den sie hält." |
| **Spannungsausgang** | "Setzt den Ausgang auf die geschriebene Spannung. NI-DAQmx liest einen Analogausgang nicht zurück, deshalb ist das Tag nur schreibbar." |
| **Flankenzählung** | "Zählt Flanken ab dem Moment, in dem sich die Station mit dem Gerät verbindet, und liest den Zählerstand bei jeder Abfrage. Eine neue Verbindung beginnt wieder beim Anfangswert." |

### Die Felder der Messgröße {#the-measurements-fields}

Ein Feld, das die Messgröße nicht liest, wird weder gezeichnet noch mit dem Tag gespeichert.

| Feld | Messgrößen | Bedeutung | Standard |
| --- | --- | --- | --- |
| **Bereich (V)**, **Bereich (mA)** oder **Bereich (°C)** | Spannungseingang, Stromeingang, Thermoelement, Spannungsausgang | Zwei Felder, **Minimum** und **Maximum**, in der Einheit der Messgröße. An einem Eingang: "NI-DAQmx wählt den Eingangsbereich des Geräts, der diesen umfasst, sodass ein enger Bereich ein kleines Signal feiner liest." Am Spannungsausgang: "Der Ausgang nimmt nur Werte innerhalb dieses Bereichs an; ein Schreiben außerhalb wird abgelehnt, bevor es das Gerät erreicht." | -10 bis 10 V; 0 bis 20 mA; 0 bis 100 °C |
| **Anschlusskonfiguration** | Spannungseingang, Stromeingang | **Kanalstandard**, **Differenziell**, **Massebezogen unsymmetrisch (RSE)**, **Nicht massebezogen unsymmetrisch (NRSE)** oder **Pseudodifferenziell**: "Wie der Eingang verdrahtet ist: Ein differenzieller Eingang misst zwischen zwei Anschlüssen des Kanals, ein unsymmetrischer gegen ein gemeinsames Bezugspotenzial. Der Kanalstandard ist das, was NI-DAQmx für diesen Kanal wählt." | **Kanalstandard** |
| **Shunt-Widerstand** | Stromeingang | **Kanalstandard**, **Intern** oder **Extern**: "Der Widerstand, durch den der Strom zur Messung fließt: der im Gerät eingebaute oder ein externer, über den Eingang geschalteter, dessen Widerstandswert hier eingetragen wird." | **Kanalstandard** |
| **Shunt-Widerstandswert (Ω)** | Stromeingang, mit einem Shunt **Extern** | Der Widerstandswert des externen Widerstands, in Ohm. | 249 |
| **Thermoelementtyp** | Thermoelement | **Typ J**, **Typ K**, **Typ N**, **Typ R**, **Typ S**, **Typ T**, **Typ B** oder **Typ E**. | **Typ K** |
| **Vergleichsstellenkompensation (CJC)** | Thermoelement | **Eingebauter Sensor** oder **Feste Temperatur**: "Die Temperatur der Vergleichsstelle des Thermoelements: gemessen vom Sensor, der im Gerät oder in seinem Anschlussblock eingebaut ist, oder eine feste Temperatur, die hier eingetragen wird, wenn die Vergleichsstelle auf einer bekannten gehalten wird." | **Eingebauter Sensor** |
| **CJC-Temperatur (°C)** | Thermoelement, mit **Feste Temperatur** | Die Temperatur der Vergleichsstelle, in Grad Celsius. | 25 |
| **Gezählte Flanke** | Flankenzählung | **Steigende Flanke** oder **Fallende Flanke**. | **Steigende Flanke** |
| **Zählrichtung** | Flankenzählung | **Aufwärts zählen** oder **Abwärts zählen**. | **Aufwärts zählen** |
| **Anfangswert** | Flankenzählung | Der Zählerstand, bei dem der Zähler bei jeder Verbindung des Geräts beginnt, 0 bis 4294967295. | 0 |
| **Eingangsanschluss** | Flankenzählung | "Der Anschluss, dessen Impulse gezählt werden, etwa /Dev1/PFI8. Leer gelassen, zählt der Zähler an seinem eigenen Standard-Eingangsanschluss." Leer zeigt das Feld "Zählerstandard". Ein Anschluss, der ohne sein Gerät geschrieben ist (`PFI8`), wird am eigenen Gerät des Tags gelesen. An einem Zähler eines cDAQ-Chassis (`_ctr0`), der keinen eigenen Eingangsanschluss hat, nennt das Feld keinen Standard, und der Hinweis lautet "Der Anschluss, dessen Impulse gezählt werden, etwa /cDAQ1Mod2/PFI0. Ein Zähler eines cDAQ-Chassis hat keinen eigenen Eingangsanschluss, daher ist dieser erforderlich." | leer |

Ein Tag, dessen Felder nicht funktionieren können, wird nicht gespeichert, und die Seite des Tags
sagt, was ihm fehlt:

| Sie geben ein | Die Seite des Tags sagt |
| --- | --- |
| Keinen Kanal | "Tragen Sie den physischen Kanal ein, etwa ai0 oder Dev1/ai0." |
| Einen Kanal einer anderen Art, als die Messgröße liest, etwa `ao0` unter einem Thermoelement | "Diese Messgröße liest einen Analogeingangskanal, etwa ai0.", "Ein Spannungsausgang steuert einen Analogausgangskanal, etwa ao0.", "Eine digitale Leitung wird als Port und Leitung geschrieben, etwa port0/line3." oder "Eine Flankenzählung liest einen Zähler, etwa ctr0." |
| Ein Minimum, das nicht unter dem Maximum liegt | "Das Minimum muss unter dem Maximum liegen." |
| Einen externen Shunt ohne Widerstandswert über null | "Ein externer Shunt braucht seinen Widerstand in Ohm, größer als null." |
| Eine feste Vergleichsstellentemperatur am oder unter dem absoluten Nullpunkt | "Die CJC-Temperatur muss eine Temperatur in Grad Celsius über dem absoluten Nullpunkt sein." |
| Einen Anfangswert außerhalb dessen, was ein 32-Bit-Zähler fasst | "Der Anfangswert ist eine ganze Zahl von 0 bis 4294967295." |
| Einen Eingangsanschluss mit Leerzeichen oder Komma | "Schreiben Sie den Eingangsanschluss so, wie NI-DAQmx ihn nennt, etwa /Dev1/PFI8, ohne Leerzeichen oder Komma." |
| Eine Flankenzählung an einem Zähler eines cDAQ-Chassis (`_ctr0`) ohne Eingangsanschluss | "Ein Zähler eines cDAQ-Chassis hat keinen eigenen Eingangsanschluss: Schreiben Sie den Anschluss, an dem seine Impulse ankommen, etwa /cDAQ1Mod2/PFI0." |
| Einen Datentyp oder Zugriff, den die Messgröße nicht erlaubt | "Diese Messgröße wird als Double, Float gelesen.", und für einen Zugriff der Satz, der die Zugriffe nennt, die die Messgröße erlaubt |

Das Speichern hält dieselben Regeln wie die Panels ein, und das Aktionsprotokoll sagt es, wenn es
eines ablehnt:
"Das Gerät 'Module voltages' nennt ein NI-DAQmx-Gerät, das der Treiber nicht lesen kann. Öffnen Sie es und korrigieren Sie den Gerätenamen, den sein Panel markiert."
oder "Das Tag 'Pressure' hat eine Einstellung, die der NI-DAQmx-Treiber nicht verwenden kann. Öffnen Sie es und korrigieren Sie das Feld, das das Tag-Panel markiert."

Die nur lesbare Zeile **Quelladresse (Bus)** zeigt, was der Treiber bekommt: den Kanal, wie
NI-DAQmx ihn nennt, und jede Einstellung der Messgröße, etwa
`cDAQ1Mod1/ai0?measurement=voltageInput&terminal=diff&min=0&max=10`,
`cDAQ1Mod2/ai0?measurement=thermocouple&type=K&cjc=builtIn&min=0&max=400`,
`Dev1/port0/line3?measurement=digitalOutput` oder
`cDAQ1/_ctr0?measurement=edgeCount&edge=rising&direction=up&initial=0&input=%2FcDAQ1Mod3%2FPFI0`.

## Lesen {#reading}

Der Treiber legt die NI-DAQmx-Tasks eines Geräts an, wenn sich die Station mit ihm verbindet, und
behält sie, bis es sich trennt. Was ein Lesevorgang tut und was NI-DAQmx antwortet, bestimmen, was
das Tag zeigt (siehe [Die Wertkette](connector-value-pipeline)):

| Tags | Wie sie gelesen werden |
| --- | --- |
| Analogeingänge (Spannung, Strom, Thermoelement) | Alle Analogeingänge eines Geräts teilen sich einen Task, den jeder Lesevorgang startet, aus dem er einen Abtastwert je Kanal nimmt und den er wieder anhält. Ein Gerät hat eine analoge Zeitsteuerung, ein cDAQ-Chassis drei für alle seine Module, sodass ein dauerhaft gestarteter Task ein anderes Modul am Lesen hindern würde. Ein Lesevorgang, der die Zeitsteuerung von einem anderen Task belegt findet (NI MAX, LabVIEW), fragt noch zweimal, im Abstand von 25 ms. Ein Abtastwert dient jedem analogen Tag des Geräts für die Hälfte des kürzesten Abfrageintervalls unter ihnen, sodass ein langsames Thermoelementmodul einmal je Durchgang wandelt. |
| Ein Kanal, den NI-DAQmx ablehnt | Jeder Analogkanal wird zuerst allein geprüft: Ein Kanal, den NI-DAQmx ablehnt (ein Bereich, den das Modul nicht hat, ein Thermoelement an einem Kanal, der keines liest), lässt sein eigenes Tag scheitern, nicht jedes analoge Tag des Geräts. |
| Digitale Leitungen, der Spannungsausgang, Zähler | Ein Task je Tag, gestartet, wenn sich das Gerät verbindet. Ein Zähler zählt ab dann und beginnt wieder bei seinem Anfangswert, wenn sich das Gerät neu verbindet. |

| NI-DAQmx antwortet | Was der Lesevorgang tut |
| --- | --- |
| Ein Wert oder eine Warnung | Der Wert, in der Einheit der Messgröße, bevor die eigenen Stufen des Tags ihn umrechnen. |
| Das Gerät entfernt, nicht erreichbar oder zurückgesetzt | Eine verlorene Verbindung: Das Gerät verbindet sich neu, und seine Tasks werden neu angelegt. |
| Keine Antwort innerhalb von 10 Sekunden | Stille: Das Gerät verbindet sich neu, und die Regel des Tags für [ein Gerät, das nicht geantwortet hat](connector-value-pipeline#the-device-did-not-answer) bestimmt, was es zeigt. |
| Jeder andere Fehler | Der fehlgeschlagene Lesevorgang dieses Tags, mit dem eigenen Text von NI-DAQmx und seinem Code; das Gerät liest seine anderen Tags weiter. |

Die Skalierung ist die eigene Kette des Tags: Der Treiber liefert Volt, Milliampere oder Grad, und
die Stufen Skalierung und Kalibrierung machen daraus den technischen Wert (0 bis 10 V zu 0 bis
16 bar). Keine benutzerdefinierte Skalierung von NI MAX wird angelegt oder gelesen.

## Schreiben {#writing}

Eine **Digitale Ausgangsleitung** und ein **Spannungsausgang** werden geschrieben; jede andere
Messgröße ist nur lesbar. Ein Schreibvorgang geht durch denselben Trichter wie der jedes anderen
Treibers: Das Schreibfeld nimmt den technischen Wert, und die Umrechnungsstufen werden umgekehrt,
bevor der Rohwert gesendet wird (siehe [Connector](connector)).

| Messgröße | Was ein Schreibvorgang tut |
| --- | --- |
| **Digitale Ausgangsleitung** | Setzt die Leitung bei wahr auf high und bei falsch auf low. Das Tag liest den Zustand zurück, den die Leitung hält, es sei denn, es ist Nur schreiben. |
| **Spannungsausgang** | Setzt den Ausgang auf die geschriebene Spannung. Ein Wert außerhalb des Bereichs des Tags wird abgelehnt, bevor irgendetwas das Gerät erreicht. NI-DAQmx liest einen Analogausgang nicht zurück, deshalb ist das Tag Nur schreiben und zeigt keinen eigenen Wert. |

Ein Wert, den NI-DAQmx ablehnt, kommt als "Schreiben von der Anlage abgelehnt: `<reason>`." zurück,
mit der Fehlernummer von NI-DAQmx als Grund (`NI-DAQmx -200561`), die in jeder Sprache gleich lautet,
während die eigenen Worte von NI-DAQmx ins Journal gehen; keine Antwort innerhalb von 10 Sekunden zeigt "Schreiben nicht bestätigt: Die Anlage hat nicht rechtzeitig geantwortet."
Ein Schreibvorgang wartet auf den laufenden Lesevorgang am selben Gerät.

## Gerätesuche {#discovery}

**Geräte suchen** in der Leiste des Treibers fragt NI-DAQmx nach jedem Gerät, das NI MAX kennt, die
simulierten eingeschlossen, und an die Hardware wird nichts gesendet. Es nimmt keine Adresse.
Während des Suchlaufs nennt die Fortschrittszeile das Gerät, das gerade gelesen wird:
"cDAQ1Mod1 wird aus NI-DAQmx gelesen…". Ohne NI-DAQmx listet sie nichts auf und sagt
"NI-DAQmx ist auf diesem Rechner nicht installiert, deshalb kann kein Gerät aufgelistet werden. Der Hinweis im Bereich dieses Treibers nennt den Download und die Installationsschritte."

Jedes Gerät ist ein Kandidat, benannt nach seinem Namen und seinem Produkt (`cDAQ1Mod1 (NI 9205)`),
mit seinen Kanälen als Tag-Kandidaten, jeder mit den Standards seiner Messgröße:

| Kanäle | Angeboten als |
| --- | --- |
| Analogeingänge | **Thermoelement** an einem Thermoelementmodul, einem Gerät, das nur Millivolt liest und laut NI-DAQmx ein Thermoelement liest (ein NI 9211): Typ K, **Eingebauter Sensor** und 0 bis 100 °C. Sonst **Spannungseingang**, wo der Kanal eine Spannung liest, auf -10 bis 10 V oder auf dem eigenen Bereich des Geräts, wo dieser enger ist, und **Stromeingang** oder **Thermoelement**, wo der Kanal laut NI-DAQmx keine Spannung liest. Ein Universalmodul, das eine echte Spannung und ein Thermoelement liest, bietet Spannungseingänge an: Wählen Sie die Messgröße am Tag, sobald es hinzugefügt ist. |
| Digitale Leitungen | **Digitale Eingangsleitung**, oder **Digitale Ausgangsleitung**, wo die Leitung nur ansteuert. |
| Analogausgänge | **Spannungsausgang**, Nur schreiben. |
| Zähler | **Flankenzählung**. NI-DAQmx listet die Zähler eines cDAQ-Chassis nicht auf, daher kommt das Chassis ohne Tags: Legen Sie von Hand einen Tag auf `_ctr0` an, mit dem **Eingangsanschluss**, an dem die Impulse ankommen, denn ein Zähler des Chassis hat keinen eigenen. |

Ein Kandidat, dessen Namen ein Gerät des Treibers schon liest, wird als bereits konfiguriert
gekennzeichnet und bietet Öffnen statt Hinzufügen an. Das übrige Verhalten des Suchlaufs steht
unter [Gerätesuche](connector-discovery).

Ein Gerät, das Sie schon haben, liest seine Kanäle von seiner eigenen Seite aus erneut: **Tags suchen** im Kopf seiner Karte der Tags fragt NI-DAQmx nur nach diesem Gerät und bietet nur die Kanäle an, für die es noch kein Tag hat, mit den Standardwerten ihrer Messung (siehe [Die Tags eines Geräts suchen](connector-discovery#discovering-a-devices-tags)).

## Beispiel: ein cDAQ-Chassis {#example-a-cdaq-chassis}

Ein cDAQ-9178-Chassis, das NI MAX `cDAQ1` nennt, trägt in Steckplatz 1 ein Spannungsmodul NI 9205,
mit einem Druckmessumformer 0 bis 10 V, differenziell an seinem ersten Kanal verdrahtet, und in
Steckplatz 2 ein Thermoelementmodul NI 9211, mit einem Thermoelement Typ K in einem Ofen. Beide
lesen:

1. Auf der Seite des Treibers **Gerät hinzufügen**; nennen Sie es `Module voltages` und tragen Sie
   `cDAQ1Mod1` unter **Gerätename** ein. Sobald es verbunden ist, zeigt **Produkt** NI 9205.
2. **Tag hinzufügen**; nennen Sie es `Pressure`, **Physischer Kanal** `ai0`, behalten Sie
   **Spannungseingang**, setzen Sie den Bereich auf 0 und 10 und die **Anschlusskonfiguration** auf
   **Differenziell**. Schalten Sie auf der Karte Umrechnung die Stufe Skalierung mit einem Faktor
   von 1,6 ein und geben Sie dem Tag die Einheit bar: 0 bis 10 V lesen sich als 0 bis 16 bar.
3. Noch einmal **Gerät hinzufügen**; nennen Sie es `Oven thermocouples`, **Gerätename** `cDAQ1Mod2`.
4. **Tag hinzufügen** `Zone1`, **Physischer Kanal** `ai0`, **Messgröße** **Thermoelement**,
   behalten Sie **Typ K** und **Eingebauter Sensor**, und setzen Sie den Bereich auf 0 und 400.
5. Um Impulse am Chassis zu zählen, hält ein Gerät, dessen **Gerätename** `cDAQ1` ist, die Zähler:
   Ein Tag an `_ctr0` ist eine **Flankenzählung**, mit dem **Eingangsanschluss**, an dem die Impulse
   ankommen, etwa `/cDAQ1Mod3/PFI0`.

Die Busadresse des Tags `Pressure` lautet
`cDAQ1Mod1/ai0?measurement=voltageInput&terminal=diff&min=0&max=10`. Ein Agent tut dasselbe mit den
Werkzeugen; das Thermoelement nennt seine Messgröße, weil `ai0` allein als Spannungseingang gelesen
wird:

```
device_upsert name="Module voltages" driver="NiDaqmx" daqmxDevice="cDAQ1Mod1"
tag_upsert device="Module voltages" name="Pressure" address="ai0" daqmxMinimum=0 daqmxMaximum=10 daqmxTerminal="Differential"
device_upsert name="Oven thermocouples" driver="NiDaqmx" daqmxDevice="cDAQ1Mod2"
tag_upsert device="Oven thermocouples" name="Zone1" address="ai0" daqmxMeasurement="Thermocouple" daqmxThermocouple="K" daqmxMaximum=400
device_upsert name="Chassis counters" driver="NiDaqmx" daqmxDevice="cDAQ1"
tag_upsert device="Chassis counters" name="Pulses" address="_ctr0" daqmxCounterTerminal="/cDAQ1Mod3/PFI0"
```

## Agent-Werkzeuge {#agent-tools}

`driver_capabilities` beschreibt diesen Treiber unter `niDaqmx`: den
Gerätenamen und für jede Messgröße einen Beispielkanal, die Einheit, ihre Felder, die Datentypen und
Zugriffe, die sie erlaubt, mit den Auswahllisten jedes Felds, wie sich Lese- und Schreibvorgänge
verhalten und was die Gerätesuche anbietet. `device_upsert driver=NiDaqmx` nimmt `daqmxDevice`, den
Namen, den NI MAX dem Gerät gibt (`''` leert ihn, und das Gerät wartet auf einen). `tag_upsert`
nimmt den Kanal als `address` und die Felder seiner Messgröße: `daqmxMeasurement` (`VoltageInput`,
`CurrentInput`, `Thermocouple`, `DigitalInput`, `DigitalOutput`, `VoltageOutput` oder `EdgeCount`;
weggelassen, bringt der Kanal seine eigene mit), `daqmxMinimum` und `daqmxMaximum`, `daqmxTerminal`
(`Default`, `Differential`, `ReferencedSingleEnded`, `NonReferencedSingleEnded` oder
`PseudoDifferential`), `daqmxShunt` (`Default`, `Internal` oder `External`) und `daqmxShuntOhms`,
`daqmxThermocouple` (`J`, `K`, `N`, `R`, `S`, `T`, `B` oder `E`), `daqmxCjcSource` (`BuiltIn` oder
`ConstantValue`) und `daqmxCjcTemperature`, `daqmxEdge` (`Rising` oder `Falling`),
`daqmxCountDirection` (`Up` oder `Down`), `daqmxInitialCount` und `daqmxCounterTerminal`. Ein Feld,
das die Messgröße nicht liest, wird abgelehnt, sodass der Aufruf nur nennt, was zutrifft. Ein Gerät
und ein Tag, die die Werkzeuge zurückgeben, tragen `niDaqmx`: den Namen des Geräts, sein Produkt,
sobald es verbunden ist, und ob NI-DAQmx installiert ist. `device_discover driver=NiDaqmx` listet
jedes Gerät, das NI MAX kennt, mit seinen Kanälen als Tag-Kandidaten. Die übrigen Werkzeuge stehen
unter [Agent-Werkzeuge](agent-tools).

## Grenzen, die man kennen sollte {#limits-worth-knowing}

- Eine kontinuierliche Erfassung findet nicht statt. Die Hardware kann nach ihrem eigenen Takt
  abtasten, Tausende von Punkten je Sekunde in einen Puffer; dieser Treiber liest einen Abtastwert
  je Abfrage, er dient also langsamen Signalen, und eine Kurvenform oder eine Schwingung wird nicht
  gelesen.
- Das Produkt enthält NI-DAQmx nicht: Ohne es auf diesem Rechner bleiben die Geräte getrennt, und
  die Seite des Treibers sagt, wie es installiert wird ([NI-DAQmx auf diesem Rechner](#ni-daqmx-on-this-computer)). Die Station übernimmt es ohne Neustart.
- Die Vergleichsstelle eines Thermoelements kommt vom eingebauten Sensor des Moduls oder von einer
  festen Temperatur; eine aus einem anderen Kanal gelesene Vergleichsstelle wird nicht angeboten.
- Ein Analogausgang wird nicht zurückgelesen: Ein Tag eines Spannungsausgangs ist Nur schreiben.
- Ein Task, ein globaler Kanal oder eine benutzerdefinierte Skalierung, die in NI MAX gespeichert
  sind, werden nicht verwendet: Jedes Tag nennt einen physischen Kanal, der Treiber baut seine
  eigenen Tasks, und die Skalierung ist die Kette des Tags.
