# Fluke NetDAQ

> Fluke NetDAQ（2640A、2645A）和 2680 Series（2680A、2686A）数据采集仪，根据点位配置，并在 32 位辅助进程中通过 Fluke 自己的库读取：设备及其“仪器”卡片、点位的点和功能、读取、写入，以及驱动交给 Logic 的事。

**Fluke NetDAQ** 驱动读写 Fluke 的联网数据采集仪：NetDAQ 2640A 和 2645A，以及 2680 Series 的 2680A和 2686A。每台设备是网络上的一台仪器，每个点位是它的一个点：一个模拟通道及其在那里测量的内容（热电偶、直流电压、电阻、热电阻），它的一条数字线，2680 Series DIO 模块的一个继电器，或者它的累加器。工作站根据点位配置仪器：每次连接时都发送完整的配置，替换仪器原有的配置，所以仪器测量的正是工作站点位所规定的内容。

驱动通过 Fluke 自己的库 `NTOOL32.dll` 与仪器通信，这些仪器的 LabVIEW 驱动也建立在这个库之上，工作站随驱动一起提供它。在 [Connector](connector) 页面添加驱动及其设备。

## 开始之前 {#before-you-start}

| 内容 | 原因 |
| --- | --- |
| 计算机上的 32 位 Microsoft Visual C++ 2005 运行库 | Fluke 的库需要它，而 Ganter Lab 不能包含它。工作站会自己检查它是否存在；缺少它时，驱动页面、每台设备的页面和每台设备最近的错误都会说明这一点，并给出[安装 Visual C++ 2005 运行库](#installing-the-visual-c-2005-runtime)中的步骤。 |
| 仪器已接入网络，处于通用网络模式（General），并已在前面板上设置 IP 地址和基本通道号（BCN） | 工作站通过 TCP 端口 4369 连接仪器的 IP 地址，Fluke 的库按基本通道号称呼仪器。 |
| 一次只能一台计算机 | 仪器只与一台计算机通信：在其他程序（Fluke DAQ、NetDAQ Logger、LabVIEW 程序）占用它期间，工作站无法打开它。 |
| 嵌入式软件为 2.0 或更高版本的 NetDAQ | Fluke 的库不配置更旧的 NetDAQ；设备的连接会失败，并说明仪器需要更新。 |

此驱动只能在 Windows 上运行。

## 安装 Visual C++ 2005 运行库 {#installing-the-visual-c-2005-runtime}

工作站会自己检查 Windows 能否加载 Fluke 的库，无需等待设备：在驱动页面、其某台设备的页面或代理第一次询问时检查，缺少运行库期间每 30 秒再检查一次。Connector 启动之前，无法知道运行库是否存在，因此不作任何说明。缺少它时：

| 位置 | 显示的内容 |
| --- | --- |
| 驱动页面 | 一条注意通知“本计算机未安装 Microsoft Visual C++ 2005 运行库”，以及下面的步骤。其中的链接会在计算机的浏览器中打开 Microsoft 的页面。 |
| 每台设备的页面 | 同一条通知。 |
| 每台设备最近的错误 | 同样的步骤，和驱动自身的原因一样用英文写出。 |
| 代理 | `driver_capabilities` 在 `prerequisite` 下给出这些步骤，`installed` 为 false。 |

安装步骤：

1. 打开 Microsoft 的页面 [Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update](https://www.microsoft.com/download/details.aspx?id=26347)，即 Microsoft 的最新受支持 Visual C++ 下载列表为 Visual C++ 2005 给出的页面。
2. 即使是 64 位 Windows，也请选择文件 `vcredist_x86.exe`（2.6 MB）：Fluke 的库是 32 位的，所以 `vcredist_x64.exe` 不能用。
3. 以管理员身份运行它。Windows 可能会要求重启计算机。

如果已安装程序的列表里已经有“Microsoft Visual C++ 2005 Redistributable”，也请照样安装：已有的那个可能只有 C 运行库，而没有 Fluke 的库需要的 MFC 部分。

安装后 30 秒内，通知会消失，此驱动的设备按现有配置连接，无需重启 Ganter Lab。

## 设备 {#device}

此驱动的设备带有“连接”卡片的 **主机** 字段，以及其下方的 **仪器** 卡片。

| 字段 | 含义 | 默认值 |
| --- | --- | --- |
| **主机** | 仪器在网络上的 IP 地址，或可解析为 IPv4 地址的名称。没有端口：每台仪器都在 TCP 端口 4369 上应答。 | 空 |
| **基本通道** | 仪器前面板上设置的基本通道号（BCN），1 到 99。Fluke 的库按此号称呼仪器，因此工作站的两台设备不能共用一个号。 | 空 |
| **扫描速度** | 慢速、中速或快速。扫描越慢，积分时间越长，分辨率越高、噪声越小；扫描越快，每秒扫描的通道越多。 | 慢速 |
| **轮询间隔（ms）** | 工作站读取该设备点位的频率，点位自己规定了间隔时以点位为准。仪器按设备点位中最短的轮询间隔扫描，因此每次轮询都能得到新的扫描。 | 1000 |

新设备既没有主机也没有基本通道，在两者都有之前工作站不会尝试连接它：在填写主机之前，它那一行显示“尚未填写主机”，之后在填写基本通道之前显示“尚未填写基本通道”，它的页面会说明要填写什么。标题显示的基本 URI 为 `netdaq://192.168.0.21/1?speed=slow`：主机、基本通道和扫描速度。

保存一台设备时，如果它的基本通道已被工作站的另一台 NetDAQ 设备占用，无论在哪个主机上都会被拒绝：“基本通道号 5 已属于 Fluke NetDAQ 设备‘Logger’。请选择另一个基本通道号。”仍在等待基本通道的设备不占用任何号，设备再次保存时保留自己的号。

**仪器** 卡片还会显示工作站上次连接时仪器报告的自身信息：**仪器型号**（2640A、2645A、2680A 或 2686A）和 **固件版本**，即其嵌入式软件的版本，两者也都写入日志。仪器连接之前显示“尚未读取”。两者都从不保存，所以同一台设备今天可以指向 2640A，明天可以指向 2645A。

## 点位寻址 {#tag-addressing}

### 点 {#the-point}

点位的“信号源”卡片包含点选择器，即点位在仪器上读取的内容，以及该点需要的字段。它们就是点位的完整地址。

| 点 | 字段 | 数据类型 | 访问 | 值 |
| --- | --- | --- | --- | --- |
| **模拟通道** | 通道和 **功能**，以及该功能自己的字段 | Double 或 Float | 只读 | 以功能单位表示的测量值 |
| **数字线** | 数字线，NetDAQ 上为 0 到 7，2680 Series 的 DIO 模块上为 0 到 19 | Boolean | 只读（默认）或读写 | 数字线为高电平时为 true |
| **继电器** | 继电器，2680 Series DIO 模块上的 0 到 7 | Boolean | 读写（默认）或只读 | 继电器闭合时为 true |
| **累加器** | 无 | Int64 或 Double | 只读（默认）或读写 | 累加器输入的计数 |

NetDAQ 的模拟通道编号为 1 到 20。2680 Series 按模块和通道编号：先是模块（1 到 6），再是模块上的通道（01 到 20），因此模块 2 的通道 3 是 203。选择另一种点时，如果点位原有的数据类型或访问方式该点不允许，就会换成它允许的。

### 模拟通道的功能 {#the-function-of-an-analog-channel}

| 功能 | 单位 | 字段 |
| --- | --- | --- |
| **直流电压** | 伏特 | **量程**：自动、`90 mV`、`300 mV`、`3 V`、`30 V`、`50 V`、`150/300 V` |
| **交流电压** | 伏特 | **量程**：自动、`300 mV`、`3 V`、`30 V`、`150/300 V` |
| **电阻** | 欧姆 | **量程**：自动、`300 Ω`、`3 kΩ`、`30 kΩ`、`300 kΩ`、`3 MΩ`；**接线** |
| **频率** | 赫兹 | 无 |
| **热电阻（RTD）** | 摄氏度 | **电阻 R0 (Ω)**，10 到 1010（Pt100 为 100）；**接线**，默认四线制。alpha 为 0.00385 的铂热电阻 |
| **热电偶** | 摄氏度 | **热电偶类型**：J、K（默认）、E、T、R、S、B、C 或 N，2680 Series 上还有 L 和 U；**检测热电偶断开**，默认开启 |
| 电流 | 毫安或百分比 | **量程**：`100 mA`（以毫安读取）或 **4 到 20 mA（百分比）**（4 mA 读作 0，20 mA 读作 100）；**分流电阻阻值 (Ω)**，电流流经的电阻，10 到 250（默认 250） |
| **热敏电阻** | 摄氏度 | **Steinhart-Hart 系数**：热敏电阻数据手册中的 A、B、C，每个都大于 0 且最大为 0.1；**接线**。仅限 2680 Series |

**接线** 为 **两线制** 或 **四线制**。四线制通道用比它高 10 的通道作为检测线对（通道 3 用 13），因此一台仪器或一个模块上只有通道 1 到 10 能作为四线制通道，检测通道上的点位不读取自己的值。选择另一个功能会带来该功能的量程和接线。

有些量程和接线只属于某一类输入级：

| 输入级 | 仪器 | 只有它才有的 |
| --- | --- | --- |
| 快速 | 2645A 和 2680 Series 的 FAI 模块 | `50 V` 量程；热电阻以及 `300 Ω` 和 `3 kΩ` 量程仅限四线制 |
| 精密 | 2640A 和 2680 Series 的 PAI 模块 | `150/300 V` 量程（通道 1 和 11 为 300 V，其余为 150 V） |

由于要到工作站连接时才知道是哪台仪器应答，面板提供所有量程。已连接的仪器无法读取的点位会被排除在其配置之外，并把原因显示为错误；仪器的其余部分照常配置和读取。

只读的 **源地址（总线）** 行显示驱动收到的地址，例如 `ch=3&fn=tc&tc=T&otc=on`、`ch=5&fn=vdc&range=3v`、`ch=1&fn=rtd&r0=100&wires=4`、`ch=9&fn=current&range=4-20ma&shunt=250`、`dio=0`、`relay=2` 或 `totalizer`。

## 工作站如何配置仪器 {#how-the-station-configures-the-instrument}

| 步骤 | 工作站的操作 |
| --- | --- |
| 连接 | 按基本通道号打开仪器并读取其型号。 |
| 配置 | 停止仪器的扫描，发送根据点位构建的配置（每个模拟点位配置自己的通道，其余通道关闭），然后以点位中最短的轮询间隔和设备的扫描速度重新开始扫描。 |
| 仪器拒绝的通道 | 该通道被排除，它的点位显示仪器给出的原因，其余部分重新发送。 |
| 断开连接 | 停止仪器的扫描并关闭连接。 |
| 连接丢失 | 仪器过一段时间会自行停止扫描，以免 PAI 模块的继电器磨损；工作站重新连接时会再次配置它。 |

在仪器前面板上或用其他程序做的配置会被替换。以不同方式配置同一通道的两个点位不能都被读取：第二个点位把第一个点位的地址显示为错误。

## 读取 {#reading}

仪器按自己的时钟扫描。一次读取取仪器的最后一次扫描，一次扫描在设备所有模拟点位中最短轮询间隔的一半时间内供这些点位共用；2680 Series 逐个模块读取。数字线、继电器和累加器也以同样方式直接从仪器读取。仪器的应答决定点位显示的内容（见[值管道](connector-value-pipeline)）：

| 仪器 | 点位 |
| --- | --- |
| 一个读数 | 在点位自己的各级转换之前、以功能单位表示的值 |
| 过载 | 正无穷或负无穷 |
| 热电偶断开（检测开启） | NaN，由点位对非数值的处理策略决定 |
| 刚配置完、还没有扫描 | 在第一次扫描之前没有值 |
| 未及时应答 | 静默：由点位对未应答设备的处理策略决定显示内容 |
| 连接丢失，或被另一台计算机占用 | 设备重新连接并再次配置仪器 |

## 写入 {#writes}

| 点 | 写入的作用 |
| --- | --- |
| **数字线**、**继电器** | 写 true（或 1）时把数字线置为高电平或闭合继电器，写 false（或 0）时相反。其他值都会被拒绝。 |
| **累加器** | 把计数清零。0 是它唯一接受的值；其他值都会被拒绝。 |
| **模拟通道** | 不做任何事：模拟通道只读。 |

仪器拒绝的写入会以拒绝返回，日志中记录 Fluke 的错误代码和库自己的说明。

## Fluke 的库和 32 位辅助进程 {#flukes-library-and-the-32-bit-helper}

Fluke 的库是 32 位库，64 位的工作站无法加载，所以此驱动和 [OPC DA](driver-opc-da) 驱动一样，运行在工作站的 32 位辅助进程 `Lab.Desktop.DriverBridge.exe` 中：辅助进程在驱动的设备第一次连接或工作站检查 Visual C++ 2005 运行库时启动，其设备和点位与其他设备一样被读取、写入和记录到日志。辅助进程停止时，设备会显示它已停止，并通过新的辅助进程重新连接。

库把它要连接的仪器列表保存在自己的文件 `ccf.cfg` 中，放在辅助进程旁边（程序文件夹中的`bridge-x86\ccf.cfg`）。这个文件由工作站自己写入：其中无需设置任何内容，删除后会在下一次连接时重新写入。库一次只调用一台仪器，因此工作站的仪器是依次读取的。

## 值得了解的限制 {#limits-worth-knowing}

| 不做的事 | 改在哪里做 |
| --- | --- |
| 仪器自身的报警和报警输出 | 点位上的[报警](logic-alarms)，以及控制数字线或继电器的 Logic 动作 |
| 计算通道和通道运算 | Logic 中的[变量](logic-variables) |
| 在 2686A 的 PC Card 上记录，以及仪器的扫描队列 | 工作站自己的历史：一次 [Process](process) 运行或一个[数据日志](process-datalogs) |
| 发现 | 无：逐台用主机和基本通道添加仪器 |
| macOS | 此驱动只能在 Windows 上运行 |
