# NI-DAQmx

> National Instruments 데이터 수집 하드웨어(cDAQ 섀시와 그 모듈, USB와 PCI Express 장치, NI MAX의 시뮬레이션 장치)를 이 컴퓨터에 설치된 NI-DAQmx를 통해 읽을 때마다 샘플 하나씩 읽습니다. NI-DAQmx 장치 카드, 태그의 물리 채널과 측정, 읽기와 쓰기, 장치 검색, 그리고 cDAQ 섀시로 만든 완성된 예입니다.

**NI-DAQmx** 드라이버는 National Instruments 데이터 수집 하드웨어를 읽고 씁니다. cDAQ 섀시와 그 C 시리즈 모듈, USB-6001이나 USB-6211 같은 USB 장치, 그리고 PCI Express 장치를, National Instruments가 자사 하드웨어용으로 무료로 배포하는 드라이버인 NI-DAQmx를 통해 다룹니다. LabVIEW 프로그램이 DAQmx 블록으로 읽는 하드웨어를 블록 다이어그램에 배선하는 대신 패널에서 설정하는 것으로, 각 태그는 NI MAX가 붙인 이름 그대로의 물리 채널(`ai0`, `port0/line3`, `ao0`, `ctr0`)과 그 채널이 측정하거나 구동하는 것입니다. 값은 다른 모든 태그의 값과 같은 곳에 닿습니다. Logic, 대시보드, 그리고 [Process](process) 시험대의 실행입니다.

이 드라이버는 읽을 때마다 샘플 하나를 읽습니다. 다른 모든 드라이버처럼 각 태그의 읽기 주기마다 채널의 값을 하나 가져옵니다. 알맞은 것은 느린 신호(온도, 압력, 레벨, 상태, 카운트)이고, 하드웨어가 자기 클럭으로 하는 연속 수집은 아닙니다. [알아 둘 한계](#limits-worth-knowing)를 보십시오.

이 드라이버의 장치는 NI MAX의 장치 하나이며, NI MAX가 붙인 이름으로 어디에 연결되어 있든 찾아집니다. USB, PCI Express 슬롯, USB나 Ethernet으로 연결된 cDAQ 섀시 어디든 됩니다. NI MAX가 NI 하드웨어 대부분에 대해 무료로 만드는 시뮬레이션 장치도 실제 장치처럼 읽히므로, 하드웨어가 도착하기 전에 구성을 짜고 시험해 볼 수 있습니다. 시뮬레이션 장치는 NI의 구성 API로도 만들 수 있으며, 이 컴퓨터에 접근할 수 있는 AI 어시스턴트가 동의를 받은 뒤 이를 사용할 수 있습니다. 장치는 드라이버 아래에 놓이고 폴더에 넣을 수 있으며, 시리얼 회선도 브로커도 없는 다른 드라이버와 마찬가지로 **드라이버 → 폴더 → 장치 → 태그**가 됩니다.

## 이 컴퓨터의 NI-DAQmx {#ni-daqmx-on-this-computer}

제품은 NI-DAQmx를 담고 있지 않으며 그 파일을 하나도 설치하지 않습니다. 드라이버는 이 컴퓨터에 설치된 NI-DAQmx, 곧 NI MAX와 LabVIEW가 쓰는 것을 통해 하드웨어를 읽습니다. 스테이션은 그것이 있는지 스스로 확인합니다. 드라이버 페이지, 그 장치 가운데 하나의 페이지, 또는 에이전트가 처음 물을 때, 그리고 없는 동안에는 30초마다입니다. Connector가 시작되기 전에는 NI-DAQmx가 있는지 알 수 없으므로, 그에 대해서는 아무것도 말하지 않습니다. 없는 동안에는 다음과 같습니다.

| 위치 | 일어나는 일 |
| --- | --- |
| 드라이버 페이지 | 주의 알림 "이 컴퓨터에는 NI-DAQmx가 설치되어 있지 않습니다"와 아래의 단계. 링크는 컴퓨터의 브라우저에서 NI 페이지를 엽니다. |
| 각 장치의 페이지 | 같은 알림. |
| 장치 | 태그까지 추가하고 설정할 수 있습니다. 오프라인으로 남으며, 각 장치의 마지막 오류가 드라이버 자신의 원인처럼 영어로 같은 단계를 알려 줍니다. |
| 장치 검색 | 아무것도 나열하지 않고, NI-DAQmx가 설치되어 있지 않다는 것과 다운로드 위치와 설치 단계가 드라이버 페이지의 알림에 있다는 것을 알립니다. |
| 에이전트 | `driver_capabilities`가 `prerequisite` 아래에 `installed`를 false로 하여 단계를 알려 줍니다. |

설치 방법:

1. NI 페이지 [NI-DAQ™mx Download](https://www.ni.com/en/support/downloads/drivers/download.ni-daq-mx.html)를 엽니다. 다운로드 전에 NI 계정으로 로그인하라고 요청합니다.
2. 페이지의 Version 목록에서, readme(**View Readme**)에 이 컴퓨터의 Windows가 있고 Device Support에 사용하는 장치가 있는 가장 최신 버전을 고릅니다. NI-DAQmx는 64비트 Windows에서만 동작합니다.
3. 설치 프로그램을 관리자 권한으로 실행합니다. NI Package Manager를 통해 NI-DAQmx가 설치됩니다. 설치 프로그램이 요청하면 컴퓨터를 다시 시작합니다.

최신 NI-DAQmx는 일부 오래된 장치를 더 이상 지원하지 않습니다. readme에 사용하는 장치가 없으면 Version 목록에서 readme에 그 장치가 있는 이전 버전을 고르십시오.

설치하고 30초 안에 알림이 사라지고, Ganter Lab을 다시 시작하지 않아도 이 드라이버의 장치가 지금 설정 그대로 연결됩니다. NI MAX(NI Measurement & Automation Explorer)는 각 장치를 [NI-DAQmx 장치 카드](#the-ni-daqmx-device-card)에 입력할 이름으로 보여 줍니다.

## 드라이버 페이지 {#the-drivers-page}

페이지에는 다른 모든 드라이버와 같은 **장치** 표([장치 표](connector-drivers#the-device-table) 참고)가 있으며, 제목 오른쪽의 **장치 추가**로 늘립니다. 비어 있으면 "아직 장치가 없습니다."라고 표시합니다. 드라이버의 막대에는 **장치 검색**이 있고, 페이지에는 스캔 범위 카드가 없습니다. 스캔이 묻는 곳은 NI-DAQmx뿐이기 때문입니다.

## 장치 {#device}

### NI-DAQmx 장치 카드 {#the-ni-daqmx-device-card}

이 드라이버의 장치에는 연결 카드가 없습니다. NI-DAQmx가 이름으로 장치를 찾으므로 적을 호스트도 포트도 경로도 없기 때문입니다. 그 대신 **NI-DAQmx 장치** 카드가 NI MAX의 어느 장치를 읽는지 보여 줍니다.

| 필드 | 의미 | 기본값 |
| --- | --- | --- |
| **장치 이름** | "NI MAX가 장치에 붙인 이름입니다(예: Dev1, cDAQ 섀시의 모듈은 cDAQ1Mod1). NI MAX에서 이름을 바꾼 장치는 새 이름을 여기에 쓰면 다시 읽힙니다." | 비어 있음 |
| **제품** | 읽기 전용: "NI-DAQmx가 알려 주는 이 장치의 제품(예: NI 9211)입니다. 스테이션이 연결할 때마다 읽습니다." 장치가 연결될 때까지는 "아직 읽지 않음"이라고 표시하고, 연결이 끊긴 뒤에도 다시 그렇게 표시합니다. 아무것도 저장하지 않습니다. | |

cDAQ 섀시는 그 자체로 NI MAX의 장치(`cDAQ1`)이며, 각 모듈도 마찬가지로 장치입니다(`cDAQ1Mod1`, `cDAQ1Mod2`). 모듈의 채널은 모듈의 장치에서 읽고, 섀시의 카운터(`_ctr0`부터 `_ctr3`)는 섀시의 장치에서 읽습니다. 장치 카드의 **읽기 주기 (ms)**는 다른 모든 드라이버와 똑같이 동작하며, 태그마다 덮어쓸 수 있습니다.

새 장치에는 아직 이름이 없고, 이름이 생길 때까지 스테이션은 연결을 시도하지 않습니다. 그 행에는 "NI-DAQmx 장치를 아직 입력하지 않음"이 나오고, 태그는 빈칸으로 읽히며, 페이지에는 다음 알림이 나옵니다. "NI-DAQmx 장치 이름을 입력하기 전까지 스테이션은 이 장치에 연결을 시도하지 않으므로, 아직 아무것도 읽지 않고 표시할 오류도 없습니다. 아래 NI-DAQmx 장치 카드에 NI MAX가 붙인 장치 이름을 입력하면 스테이션이 연결합니다." NI-DAQmx가 없는 컴퓨터에서는 그 자리에 NI-DAQmx가 설치되어 있지 않다는 알림이 나옵니다.

NI-DAQmx가 결코 읽을 수 없는 이름은 칸 아래에서 거부됩니다. "장치 이름에는 '/', ',', ':'가 들어갈 수 없습니다. NI MAX에 보이는 그대로 이름을 쓰십시오(예: Dev1, cDAQ1Mod1)." 슬래시는 장치와 그 채널을 가르는 것이므로, `Dev1/ai0`는 태그의 채널이지 장치가 아닙니다. NI MAX가 그 이름을 아는지는 NI-DAQmx 자신의 답이며, 스테이션이 연결할 때 알게 됩니다. NI MAX가 모르는 장치는 오프라인으로 남고, NI-DAQmx의 말이 마지막 오류가 됩니다.

머리글에 보이는 기본 URI는 드라이버 스킴 뒤에 장치 이름을 붙인 것입니다. `nidaqmx://cDAQ1Mod1`. 이 드라이버의 장치 둘이 NI MAX의 같은 장치를 읽을 수도 있습니다. 예를 들어 같은 모듈을 서로 다른 두 읽기 주기로 읽는 경우입니다. 이름이 고유할 필요는 없습니다.

## 태그 주소 지정 {#tag-addressing}

### 물리 채널 {#the-physical-channel}

이 드라이버의 태그는 자기 장치의 채널 하나를 읽거나 구동합니다. 태그의 신호원 카드에는 **물리 채널** 칸이 있고, 그 아래에 측정을 따르는 안내가 나옵니다. "아날로그 입력 채널(예: ai0, cDAQ1Mod1/ai0)", "디지털 라인(예: port0/line3, Dev1/port0/line3)", "아날로그 출력 채널(예: ao0, Dev1/ao0)", 또는 "카운터(예: ctr0, cDAQ 섀시에서는 _ctr0)".

채널은 장치를 기준으로 한 상대 이름(`ai0`)으로 저장되므로, NI MAX에서 장치 이름을 바꿔도 바뀌는 것은 장치의 칸 하나뿐입니다. NI MAX가 쓰는 대로 통째로 쓴 채널(`cDAQ1Mod1/ai0`)은 태그 자신의 장치를 가리키면 상대 이름으로 저장되고, 다른 장치를 가리키면 거부됩니다. "이 채널은 cDAQ1Mod1이 아니라 장치 Dev1의 채널입니다. 이 장치의 채널이나 채널만(예: ai0) 쓰십시오."

### 측정 {#measurements}

채널 아래의 **측정**은 그 채널이 무엇을 측정하거나 구동하는지 나타냅니다. 측정에 따라 태그를 읽는 데이터 형식, 허용하는 접근, 단위, 그 아래에 그려지는 칸이 정해집니다.

| 측정 | 채널 | 데이터 형식 | 접근 | 단위 |
| --- | --- | --- | --- | --- |
| **전압 입력** | 아날로그 입력, `ai0` | Double 또는 Float | 읽기 전용 | 볼트 |
| **전류 입력** | 아날로그 입력, `ai0` | Double 또는 Float | 읽기 전용 | 밀리암페어 |
| **열전대** | 아날로그 입력, `ai0` | Double 또는 Float | 읽기 전용 | 섭씨 |
| **디지털 입력 라인** | 디지털 라인, `port0/line3` | Boolean | 읽기 전용 | |
| **디지털 출력 라인** | 디지털 라인, `port0/line3` | Boolean | 읽기와 쓰기(기본값), 쓰기 전용, 읽기 전용 | |
| **전압 출력** | 아날로그 출력, `ao0` | Double 또는 Float | 쓰기 전용 | 볼트 |
| **에지 카운트** | 카운터, `ctr0`(cDAQ 섀시에서는 `_ctr0`) | Int64 또는 Double | 읽기 전용 | 카운트 |

새 태그는 전압 입력이며 Double로 읽습니다. 지금 측정이 읽지 않는 종류의 채널을 입력하면 그 채널에 가장 자연스러운 측정으로 바뀝니다. 아날로그 입력은 전압 입력, 디지털 라인은 디지털 입력 라인, 아날로그 출력은 전압 출력, 카운터는 에지 카운트입니다. 다른 측정을 고르면 그 측정의 범위로 바뀌고, 그 측정이 허용하지 않는 데이터 형식이나 접근은 그 측정의 것으로 바뀌므로, 데이터 형식과 접근 목록에는 측정이 허용하는 것만 나옵니다. 전류는 밀리암페어로 읽으므로(NI-DAQmx는 암페어로 읽고 드라이버가 1000을 곱합니다) 4-20 mA 루프를 말하는 그대로 적을 수 있습니다.

각 측정은 선택 칸 아래에 자기가 하는 일을 보여 줍니다.

| 측정 | 그 아래의 줄 |
| --- | --- |
| **전압 입력** | "읽을 때마다 샘플 하나를 볼트로 읽습니다." |
| **전류 입력** | "읽을 때마다 샘플 하나를 밀리암페어로 읽습니다." |
| **열전대** | "읽을 때마다 샘플 하나를 섭씨로 읽으며, 냉접점을 보상합니다." |
| **디지털 입력 라인** | "라인이 High이면 true, Low이면 false로 읽습니다." |
| **디지털 출력 라인** | "쓴 값으로 라인을 구동하고, 유지하는 상태를 다시 읽습니다." |
| **전압 출력** | "쓴 전압으로 출력을 구동합니다. NI-DAQmx는 아날로그 출력을 다시 읽지 않으므로 이 태그는 쓰기 전용입니다." |
| **에지 카운트** | "스테이션이 장치에 연결한 순간부터 에지를 세고, 읽을 때마다 카운트를 읽습니다. 다시 연결하면 초기 카운트부터 다시 셉니다." |

### 측정의 칸 {#the-measurements-fields}

측정이 읽지 않는 칸은 그려지지 않으며, 태그와 함께 저장되지도 않습니다.

| 필드 | 측정 | 의미 | 기본값 |
| --- | --- | --- | --- |
| **범위 (V)**, **범위 (mA)**, **범위 (°C)** | 전압 입력, 전류 입력, 열전대, 전압 출력 | 측정 단위로 된 두 칸, **최소**와 **최대**. 입력에서는: "NI-DAQmx는 이 범위를 포함하는 장치의 입력 범위를 고르므로, 범위를 좁히면 작은 신호를 더 세밀하게 읽습니다." 전압 출력에서는: "출력은 이 범위 안의 값만 받습니다. 범위를 벗어난 쓰기는 장치에 닿기 전에 거부됩니다." | -10에서 10 V, 0에서 20 mA, 0에서 100 °C |
| **단자 구성** | 전압 입력, 전류 입력 | **채널 기본값**, **차동**, **기준 단일 종단 (RSE)**, **비기준 단일 종단 (NRSE)**, **의사 차동**: "입력의 배선 방식입니다. 차동 입력은 채널의 두 단자 사이를, 단일 종단 입력은 공통 기준에 대해 측정합니다. 채널 기본값은 NI-DAQmx가 이 채널에 고르는 구성입니다." | **채널 기본값** |
| **션트 저항** | 전류 입력 | **채널 기본값**, **내부**, **외부**: "전류를 측정하려고 전류가 지나가는 저항입니다. 장치에 내장된 것이나 입력에 배선한 외부 저항이며, 외부 저항은 저항값을 여기에 씁니다." | **채널 기본값** |
| **션트 저항값 (Ω)** | 전류 입력에서 션트가 **외부**일 때 | 외부 저항의 저항값(옴). | 249 |
| **열전대 종류** | 열전대 | **J형**, **K형**, **N형**, **R형**, **S형**, **T형**, **B형**, **E형**. | **K형** |
| **냉접점 보상 (CJC)** | 열전대 | **내장 센서** 또는 **고정 온도**: "열전대 냉접점의 온도입니다. 장치나 단자대에 내장된 센서로 측정하거나, 냉접점을 알려진 온도로 유지하는 경우 그 고정 온도를 여기에 씁니다." | **내장 센서** |
| **CJC 온도 (°C)** | 열전대에서 **고정 온도**일 때 | 냉접점의 온도(섭씨). | 25 |
| **셀 에지** | 에지 카운트 | **상승 에지** 또는 **하강 에지**. | **상승 에지** |
| **카운트 방향** | 에지 카운트 | **업 카운트** 또는 **다운 카운트**. | **업 카운트** |
| **초기 카운트** | 에지 카운트 | 장치가 연결될 때마다 카운터가 세기 시작하는 값으로, 0부터 4294967295까지. | 0 |
| **입력 단자** | 에지 카운트 | "펄스를 셀 단자입니다(예: /Dev1/PFI8). 비워 두면 카운터 자체의 기본 입력 단자에서 셉니다." 비어 있을 때 칸에는 "카운터 기본값"이 보입니다. 장치 없이 쓴 단자(`PFI8`)는 태그 자신의 장치의 단자로 읽습니다. 자체 입력 단자가 없는 cDAQ 섀시의 카운터(`_ctr0`)에서는 칸에 기본값이 보이지 않고 안내는 "펄스를 셀 단자입니다(예: /cDAQ1Mod2/PFI0). cDAQ 섀시의 카운터에는 자체 입력 단자가 없으므로 이 칸은 필수입니다."입니다. | 비어 있음 |

칸이 동작할 수 없는 태그는 저장되지 않고, 태그 페이지가 빠진 것을 알려 줍니다.

| 입력한 것 | 태그 페이지의 표시 |
| --- | --- |
| 채널 없음 | "물리 채널을 쓰십시오(예: ai0, Dev1/ai0)." |
| 측정이 읽는 것과 다른 종류의 채널(열전대 아래의 `ao0` 등) | "이 측정은 아날로그 입력 채널(예: ai0)을 읽습니다.", "전압 출력은 아날로그 출력 채널(예: ao0)을 구동합니다.", "디지털 라인은 포트와 라인으로 씁니다(예: port0/line3).", 또는 "에지 카운트는 카운터(예: ctr0)를 읽습니다." |
| 최대보다 작지 않은 최소 | "최소는 최대보다 작아야 합니다." |
| 0보다 큰 저항값이 없는 외부 션트 | "외부 션트에는 0보다 큰 저항값(옴)이 필요합니다." |
| 절대영도 이하의 냉접점 고정 온도 | "CJC 온도는 절대영도보다 높은 섭씨 온도여야 합니다." |
| 32비트 카운터에 담기지 않는 초기 카운트 | "초기 카운트는 0부터 4294967295까지의 정수입니다." |
| 공백이나 쉼표가 든 입력 단자 | "입력 단자는 NI-DAQmx가 부르는 이름대로 공백이나 쉼표 없이 쓰십시오(예: /Dev1/PFI8)." |
| 입력 단자가 없는 cDAQ 섀시 카운터(`_ctr0`)의 에지 카운트 | "cDAQ 섀시의 카운터에는 자체 입력 단자가 없습니다. 펄스가 들어오는 단자를 쓰십시오(예: /cDAQ1Mod2/PFI0)." |
| 측정이 허용하지 않는 데이터 형식이나 접근 | "이 측정은 Double, Float(으)로 읽습니다.", 접근이라면 측정이 허용하는 접근을 밝히는 문장 |

저장도 패널과 같은 규칙을 지키며, 거부할 때는 작업 기록 줄이 그렇게 알립니다. "장치 'Module voltages'은(는) 드라이버가 읽을 수 없는 NI-DAQmx 장치를 가리킵니다. 장치를 열어 패널이 표시하는 장치 이름을 고치십시오." 또는 "태그 'Pressure'에 NI-DAQmx 드라이버가 쓸 수 없는 설정이 있습니다. 태그를 열어 태그 패널이 표시하는 칸을 고치십시오."

읽기 전용 **신호원 주소 (버스)** 줄은 드라이버가 받는 것을 보여 줍니다. NI-DAQmx가 부르는 이름 그대로의 채널과 측정의 모든 설정입니다. 예를 들면 `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`, `cDAQ1/_ctr0?measurement=edgeCount&edge=rising&direction=up&initial=0&input=%2FcDAQ1Mod3%2FPFI0`입니다.

## 읽기 {#reading}

드라이버는 스테이션이 장치에 연결할 때 그 장치의 NI-DAQmx 작업을 만들고, 연결이 끊길 때까지 간직합니다. 읽기가 하는 일과 NI-DAQmx의 답에 따라 태그가 보여 주는 것이 정해집니다([값 변환 경로](connector-value-pipeline) 참고).

| 태그 | 읽는 방법 |
| --- | --- |
| 아날로그 입력(전압, 전류, 열전대) | 한 장치의 아날로그 입력은 모두 작업 하나를 함께 쓰며, 읽을 때마다 그 작업을 시작해 채널마다 샘플 하나를 가져오고 멈춥니다. 장치에는 아날로그 타이밍 엔진이 하나, cDAQ 섀시에는 모든 모듈을 통틀어 셋뿐이므로, 시작한 채로 둔 작업이 있으면 다른 모듈이 읽지 못합니다. 엔진을 다른 작업(NI MAX, LabVIEW)이 쓰고 있으면 읽기는 25 ms 간격으로 두 번 더 묻습니다. 샘플 하나는 그 장치의 아날로그 태그 가운데 가장 짧은 읽기 주기의 절반 동안 모든 아날로그 태그에 쓰이므로, 변환이 느린 열전대 모듈도 한 차례에 한 번만 변환합니다. |
| NI-DAQmx가 거부하는 채널 | 아날로그 채널은 먼저 하나씩 시험합니다. NI-DAQmx가 거부하는 채널(모듈에 없는 범위, 열전대를 읽지 않는 채널의 열전대)은 그 태그만 실패시키고, 장치의 아날로그 태그 전부를 끌어들이지 않습니다. |
| 디지털 라인, 전압 출력, 카운터 | 태그마다 작업 하나이며, 장치가 연결될 때 시작합니다. 카운터는 그때부터 세고, 장치가 다시 연결되면 초기 카운트부터 다시 셉니다. |

| NI-DAQmx의 답 | 읽기가 하는 일 |
| --- | --- |
| 값, 또는 경고 | 측정 단위로 된 값이며, 태그 자신의 단계가 변환하기 전의 것입니다. |
| 장치의 제거, 연결 불가, 재설정 | 연결이 끊긴 것입니다. 장치는 다시 연결하고 작업을 새로 만듭니다. |
| 10초 안에 답이 없음 | 무응답입니다. 장치는 다시 연결하고, 무엇을 보여 줄지는 [응답하지 않은 장치](connector-value-pipeline#the-device-did-not-answer)에 대한 태그의 정책이 정합니다. |
| 그 밖의 오류 | 그 태그의 읽기 실패이며, NI-DAQmx 자신의 텍스트와 코드를 보여 줍니다. 장치는 다른 태그를 계속 읽습니다. |

스케일링은 태그 자신의 변환 경로가 맡습니다. 드라이버는 볼트, 밀리암페어, 섭씨 값을 넘기고, 스케일링과 교정 단계가 그것을 공학 값으로 바꿉니다(0에서 10 V를 0에서 16 bar로). NI MAX의 사용자 지정 스케일은 만들지도 읽지도 않습니다.

## 쓰기 {#writing}

쓸 수 있는 것은 **디지털 출력 라인**과 **전압 출력**이며, 다른 측정은 읽기 전용입니다. 쓰기는 다른 어느 드라이버와도 같은 경로를 지납니다. 쓰기 칸은 공학 값을 받고, 원시 값을 보내기 전에 변환 단계를 거꾸로 거칩니다([Connector](connector) 참조).

| 측정 | 쓰기가 하는 일 |
| --- | --- |
| **디지털 출력 라인** | true면 High, false면 Low로 라인을 구동합니다. 쓰기 전용이 아니면 태그는 라인이 유지하는 상태를 다시 읽습니다. |
| **전압 출력** | 쓴 전압으로 출력을 구동합니다. 태그 범위를 벗어난 값은 장치에 무엇이든 닿기 전에 거부됩니다. NI-DAQmx는 아날로그 출력을 다시 읽지 않으므로 태그는 쓰기 전용이며 자기 값을 보여 주지 않습니다. |

NI-DAQmx가 거부한 값은 NI-DAQmx의 오류 번호(`NI-DAQmx -200561`)를 이유로 "현장 장비가 쓰기를 거부했습니다: `<reason>`."으로 돌아오고(이 번호는 어느 언어에서나 똑같이 읽히며, NI-DAQmx 자신의 말은 진단 로그에 남습니다), 10초 안에 답이 없으면 "쓰기가 확인되지 않았습니다: 현장 장비가 제시간에 응답하지 않았습니다."라고 표시합니다. 쓰기는 같은 장치에서 진행 중인 읽기가 끝나기를 기다립니다.

## 장치 검색 {#discovery}

드라이버 막대의 **장치 검색**은 NI MAX가 아는 모든 장치를, 시뮬레이션 장치까지 포함해 NI-DAQmx에 묻습니다. 하드웨어에는 아무것도 보내지 않습니다. 주소는 받지 않습니다. 실행 중에는 진행 줄이 읽고 있는 장치를 밝힙니다. "NI-DAQmx에서 cDAQ1Mod1을(를) 읽는 중…". NI-DAQmx가 없으면 아무것도 나열하지 않고 "이 컴퓨터에는 NI-DAQmx가 설치되어 있지 않아 장치를 나열할 수 없습니다. 다운로드 위치와 설치 단계는 이 드라이버 패널의 알림에 있습니다."라고 알립니다.

각 장치는 그 이름과 제품으로 이름 붙인 후보(`cDAQ1Mod1 (NI 9205)`)가 되며, 채널은 각각 측정의 기본값 그대로 태그 후보가 됩니다.

| 채널 | 제시되는 방식 |
| --- | --- |
| 아날로그 입력 | 열전대 모듈, 즉 밀리볼트만 읽고 열전대를 읽는다고 알려 주는 장치(NI 9211)에서는 **열전대**이며, K형, **내장 센서**, 0에서 100 °C입니다. 그렇지 않으면 채널이 전압을 읽을 수 있으면 **전압 입력**이며, 범위는 -10에서 10 V이고 장치 자체의 범위가 그보다 좁으면 그 범위입니다. NI-DAQmx가 그 채널이 전압을 읽지 않는다고 알려 주면 **전류 입력** 또는 **열전대**. 열전대와 실제 전압을 모두 읽는 유니버설 모듈은 전압 입력으로 제시되므로, 추가한 뒤 태그에서 측정을 고르십시오. |
| 디지털 라인 | **디지털 입력 라인**. 구동만 하는 라인은 **디지털 출력 라인**. |
| 아날로그 출력 | **전압 출력**이며, 쓰기 전용. |
| 카운터 | **에지 카운트**. NI-DAQmx는 cDAQ 섀시의 카운터를 목록에 올리지 않으므로 섀시는 태그 없이 제시됩니다. `_ctr0`에 태그를 직접 추가하고 펄스가 들어오는 **입력 단자**를 지정하십시오. 섀시의 카운터에는 자체 입력 단자가 없습니다. |

이 드라이버의 장치가 이미 그 이름을 읽고 있는 후보에는 이미 설정됨 표시가 붙고 추가 대신 열기가 제시됩니다. 스캔의 나머지 동작은 [장치 검색](connector-discovery)에 있습니다.

이미 있는 장치는 자기 페이지에서 채널을 다시 읽습니다. 태그 카드 머리의 **태그 검색**은 NI-DAQmx에 그 장치만 묻고, 아직 태그가 없는 채널만 측정의 기본값으로 제시합니다([장치의 태그 검색](connector-discovery#discovering-a-devices-tags) 참고).

## 예: cDAQ 섀시 {#example-a-cdaq-chassis}

NI MAX가 `cDAQ1`이라고 부르는 cDAQ-9178 섀시의 슬롯 1에는 첫 채널에 0-10 V 압력 전송기를 차동으로 배선한 NI 9205 전압 모듈이, 슬롯 2에는 오븐 안의 K형 열전대를 연결한 NI 9211 열전대 모듈이 있습니다. 둘 다 읽습니다.

1. 드라이버 페이지에서 **장치 추가**를 누르고, 이름을 `Module voltages`로 하여 **장치 이름**에 `cDAQ1Mod1`을 씁니다. 연결되면 **제품**에 NI 9205가 표시됩니다.
2. **태그 추가**를 누르고, 이름을 `Pressure`, **물리 채널**을 `ai0`로 하여 **전압 입력**을 그대로 두고, 범위를 0과 10, **단자 구성**을 **차동**으로 합니다. 변환 카드에서 스케일링 단계를 계수 1.6으로 켜고 태그의 단위를 bar로 합니다. 0에서 10 V가 0에서 16 bar로 읽힙니다.
3. 다시 **장치 추가**를 누르고, 이름을 `Oven thermocouples`, **장치 이름**을 `cDAQ1Mod2`로 합니다.
4. **태그 추가**로 `Zone1`을 만들고, **물리 채널**을 `ai0`, **측정**을 **열전대**로 하여 **K형**과 **내장 센서**를 그대로 두고, 범위를 0과 400으로 합니다.
5. 섀시에서 펄스를 세려면 **장치 이름**이 `cDAQ1`인 장치가 카운터를 맡습니다. `_ctr0`의 태그는 **에지 카운트**이며, 펄스가 들어오는 **입력 단자**를 `/cDAQ1Mod3/PFI0`처럼 지정합니다.

`Pressure` 태그의 버스 주소는 `cDAQ1Mod1/ai0?measurement=voltageInput&terminal=diff&min=0&max=10`입니다. 에이전트는 도구로 같은 일을 합니다. `ai0`만으로는 전압 입력으로 읽히므로, 열전대는 측정을 밝혀 줍니다.

```
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-tools}

`driver_capabilities`는 이 드라이버를 `niDaqmx` 아래에서 설명합니다. 장치 이름, 그리고 측정마다 채널 예, 단위, 칸, 허용하는 데이터 형식과 접근, 각 칸의 선택지, 읽기와 쓰기의 동작, 장치 검색이 제시하는 것입니다. `device_upsert driver=NiDaqmx`는 NI MAX가 장치에 붙인 이름인 `daqmxDevice`를 받습니다(`''`이면 지우며, 장치는 이름을 기다립니다). `tag_upsert`는 채널을 `address`로, 그리고 측정의 칸을 받습니다. `daqmxMeasurement`(`VoltageInput`, `CurrentInput`, `Thermocouple`, `DigitalInput`, `DigitalOutput`, `VoltageOutput`, `EdgeCount`. 생략하면 채널이 자기 측정을 정합니다), `daqmxMinimum`과 `daqmxMaximum`, `daqmxTerminal`(`Default`, `Differential`, `ReferencedSingleEnded`, `NonReferencedSingleEnded`, `PseudoDifferential`), `daqmxShunt`(`Default`, `Internal`, `External`)와 `daqmxShuntOhms`, `daqmxThermocouple`(`J`, `K`, `N`, `R`, `S`, `T`, `B`, `E`), `daqmxCjcSource`(`BuiltIn` 또는 `ConstantValue`)와 `daqmxCjcTemperature`, `daqmxEdge`(`Rising` 또는 `Falling`), `daqmxCountDirection`(`Up` 또는 `Down`), `daqmxInitialCount`, `daqmxCounterTerminal`입니다. 측정이 읽지 않는 칸은 거부되므로, 호출에는 해당하는 것만 적습니다. 도구가 돌려주는 장치와 태그는 `niDaqmx`를 가지며, 장치 이름, 연결된 뒤의 제품, NI-DAQmx가 설치되어 있는지가 들어 있습니다. `device_discover driver=NiDaqmx`는 NI MAX가 아는 모든 장치를 채널을 태그 후보로 하여 나열합니다. 다른 도구는 [에이전트 도구](agent-tools)에 있습니다.

## 알아 둘 한계 {#limits-worth-knowing}

- 연속 수집은 하지 않습니다. 하드웨어는 자기 클럭으로 초당 수천 점을 버퍼에 담을 수 있지만, 이 드라이버는 읽을 때마다 샘플 하나를 읽으므로 알맞은 것은 느린 신호입니다. 파형이나 진동은 읽지 않습니다.
- 제품은 NI-DAQmx를 담고 있지 않습니다. 이 컴퓨터에 없으면 장치는 오프라인으로 남고, 드라이버 페이지가 설치 방법을 알려 줍니다([이 컴퓨터의 NI-DAQmx](#ni-daqmx-on-this-computer)). 스테이션은 다시 시작하지 않고 그것을 쓰기 시작합니다.
- 열전대의 냉접점은 모듈의 내장 센서나 고정 온도에서 가져옵니다. 다른 채널에서 읽는 냉접점은 고를 수 없습니다.
- 아날로그 출력은 다시 읽지 않습니다. 전압 출력 태그는 쓰기 전용입니다.
- NI MAX에 저장한 작업, 글로벌 채널, 사용자 지정 스케일은 쓰지 않습니다. 각 태그는 물리 채널을 가리키고, 드라이버가 자기 작업을 짜며, 스케일링은 태그의 변환 경로가 맡습니다.
