关于 NI-DAQmx DAQ Devices
NI-DAQmx DAQ Devices 是用于采集 National Instruments DAQ 硬件数据并设置模拟或数字输出的 MCP 服务。它通过 NI-DAQmx 驱动和 Python API 工作,目前尚无硬件验证记录。
主要功能
- 01采集模拟电压样本和波形
- 02读取热电偶温度及数字线路
- 03设置模拟和数字输出
- 04将采集数据保存为 CSV
- 05查看设备和通道能力
适用场景
- 01测量电压信号及均方根噪声
- 02记录热电偶随时间变化的读数
- 03检查联锁的数字状态
- 04驱动输出后将输出置于安全状态
MCP 相关
向 MCP 客户端提供 DAQ 设备发现、测量、输出控制和安全状态操作工具。只读模式允许采集数据,但会阻止输出工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx labmcp-ni-daqmxLABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)LABMCP_READ_ONLYSet to 1 to disable all state-changing toolsLABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
11收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
NI-DAQmx DAQ 设备 — MCP 服务
通过官方 NI-DAQmx 驱动及其 Python API,让 AI Agent 从 National Instruments DAQ 硬件采集电压和热电偶温度、读取数字线路,并在获得许可后设置模拟和数字输出。
| 软件包 | labmcp-ni-daqmx |
| 仪器 | NI-DAQmx 设备:USB-6001/6002/6003、USB-6008/6009、USB-6211/6212/6218、USB/PCIe M 和 X Series(62xx/63xx)、CompactDAQ C Series 模块(例如 NI 9201、9211、9263、9401)、NI MAX 模拟设备 |
| 接口 | USB、PCI/PCIe、PXI、以太网(cDAQ 机箱) |
| 协议 | 通过 nidaqmx Python API 使用 NI-DAQmx(API 文档、源代码、NI-DAQmx 驱动) |
| 状态 | 🧪 模拟:已使用模拟的 nidaqmx 后端进行测试,尚未在硬件上验证。报告硬件测试结果 |
无需硬件即可试用
uvx labmcp-ni-daqmx --simulate --check
内置模拟器会模拟一台类似 USB-6341 的 X Series 设备 Dev1:ai0 上有 1 V / 50 Hz 正弦波,ai1 上有 2.5 V 传感器,ao0/ao1 回环连接到 ai2/ai3,ai4 上有约 37 °C 的热电偶,以及一个将 port1/line0 拉高的外部“联锁”。它会复现 NI-DAQmx 的行为,例如错误代码(如 -200170 表示通道不存在,-200576 表示没有内置 CJC),以及 task.read() 返回的数据形状。
**无需硬件即可测试真实的 NI-DAQmx 路径:**在 NI MAX(Windows)中选择 Devices and Interfaces → Create New… → Simulated NI-DAQmx Device,然后在不带 --simulate 的情况下,使用该设备运行服务,例如指定 --address SimDev1。NI MAX 模拟设备会返回合成数据,且 get_connection_info 会报告 ni_max_simulated_device: True。在 Linux 上,模拟设备支持有限(NI 的配置工具可以导入定义模拟设备的配置文件,但结果不一);请在此处使用 --simulate。
连接仪器
- 从 ni.com 安装 NI-DAQmx(Windows 或 Linux;NI-DAQmx 不支持 macOS)。
nidaqmxPython 软件包会随本服务安装;也可以使用python -m nidaqmx installdriver安装驱动。 - 在 NI MAX(Devices and Interfaces)中或通过 Linux 上的
nilsdev查找设备名称,例如Dev1或cDAQ1Mod1。连接前请关闭 NI MAX 测试面板。 - 测试连接:
uvx labmcp-ni-daqmx --check # works if exactly one device is present uvx labmcp-ni-daqmx --address Dev1 --check--address是 NI-DAQmx 设备名称。仅当设备恰好只有一个时,此参数才是可选的。
添加到 MCP 客户端
Claude Code
claude mcp add ni-daq -- uvx labmcp-ni-daqmx --address Dev1
Claude Desktop / Cursor / Windsurf(claude_desktop_config.json、.cursor/mcp.json 等)
{
"mcpServers": {
"ni-daq": {
"command": "uvx",
"args": ["labmcp-ni-daqmx", "--address", "Dev1"]
}
}
}
添加 --read-only,以允许采集但禁用输出工具(set_outputs_safe 仍可用)。添加 --option safe_do_lines=port0/line0:3,让 set_outputs_safe 始终将这些线路拉低。对于其他客户端,可使用 uvx labmcp config ni-daqmx --address Dev1 --client vscode 生成配置片段(还支持 cursor、codex、claude-code)。
工具
| 工具 | 类型 | 描述 |
|---|---|---|
get_command_log | 👁 读取 | 返回最近发送给仪器的原始命令和收到的回复(最新的排在最后)。适用于调试和记录操作。 |
get_connection_info | 👁 读取 | 报告已连接的仪器(标识、地址、模拟设备或真实设备)、服务是否为只读,以及当前的安全限制。请先调用此工具。 |
get_device_info | 👁 读取 | 描述已连接的设备:模拟输入/输出通道、数字线路、支持的电压范围、最大采样率,以及此服务已设置的输出。选择通道、量程和采样率之前,请先调用此工具。 |
list_devices | 👁 读取 | 列出驱动程序可见的所有 NI-DAQmx 设备(产品类型、序列号、通道、是否为 NI MAX 模拟设备),以及此服务连接的设备。 |
read_analog | 👁 读取 | 测量一个或多个模拟输入上的电压:可进行单次按需读数,也可进行有限时长的硬件定时采集,为每个通道采集 samples 个样本,采样率为 rate_hz。返回每个通道的统计信息和降采样后的波形;还可选择将所有数据保存到 CSV。 |
read_digital_lines | 👁 读取 | 读取数字线路的逻辑电平。 |
read_thermocouple | 👁 读取 | 在支持热电偶的设备上测量温度(°C),例如 NI 9211/9212/9213/9214 模块或 USB-TC01。支持的热电偶类型包括 B、E、J、K、N、R、S、T。 |
reconnect | 🛑 安全 | 关闭并重新打开与仪器的连接(例如仪器断电重启或重新插接电缆后)。 |
set_outputs_safe | 🛑 安全 | 将设备输出设为安全状态:所有模拟输出均设为 0 V(若其量程不包含 0 V,则设为量程下限);默认情况下,将此服务驱动的所有数字线路以及 safe_do_lines 选项指定的线路均驱动为低电平。操作完成或发现异常时使用。 |
write_analog | ⚠️ 危险 | 将模拟输出设为直流电压(静态、软件定时)。在大多数 NI 设备上,调用后输出会保持此值,直到更改该值或调用 set_outputs_safe。 |
write_digital_lines | ⚠️ 危险 | 将数字输出线路驱动为高电平或低电平。调用后线路会保持该电平,直到更改电平或调用 set_outputs_safe。 |
get_connection_info、get_command_log 和 reconnect 内置于每个 LabMCP 服务中。命令日志会记录服务运行的每项任务(通道、量程、采样率、写入值)。
安全限制
| 限制 | 默认值 | 含义 |
|---|---|---|
max_ao_voltage_v | 5 V | Agent 可施加到模拟输出上的最大 |电压| |
max_samples | 100 000 | 单次采集中每个通道的最大样本数 |
max_rate_hz | 100 000 Hz | 每个通道的最高采样时钟速率 |
max_acquisition_s | 60 s | 有限时长采集的最长时间(样本数 / 采样率) |
启动时可覆盖限制,例如 --limit max_ao_voltage_v=10 --limit max_acquisition_s=300。发送任何内容之前都会检查这些限制。设备自身的 AO 量程也会强制执行(例如 USB-6008/6009 输出仅为 0-5 V),设备的最大采样率也同样会强制执行。
示例提示词
- “列出 NI 设备,并告诉我 Dev1 有哪些输入及其电压范围。”
- “以差分方式采集 ai0 和 ai1,采样率为 10 kHz,持续 0.5 s,使用 ±1 V 量程;计算并告诉我每个通道的 RMS 噪声,并将数据保存到 ~/daq/noise.csv。”
- “使用内置 CJC,每秒读取一次 cDAQ1Mod1/ai0:3 上的 K 型热电偶,持续 30 秒,并报告每个热电偶的平均值。”
- “将 ao0 设为 2.0 V,通过 ai2 回环确认,然后将其恢复为 0。”
- “port1/line0 上的联锁是否闭合?然后将 port0/line2 切换为高电平以打开阀门。”
- “我们操作完成了:将所有输出设为安全状态。”
注意事项
- 每次工具调用都是一个简短的 DAQmx 任务(创建通道、配置时序、读取或写入、关闭),与 NI 的示例一致,因此服务不会在调用之间一直占用设备。同时使用该设备的其他程序会导致明确的“资源已占用”错误(-50103)。输出和数字线路任务与采集任务分别串行执行,因此
set_outputs_safe(以及write_analog)不会等待正在运行的采集任务完成:NI-DAQmx 可以在同一设备上同时运行模拟输入任务和 AO/DIO 任务。 - 采集每次工具调用的时长上限为 600 s,即使提高了
max_acquisition_s也不例外。返回的波形通过保留每个数据块的最小值和最大值进行降采样,因此不会漏掉短暂的尖峰。save_path必须是一个新的.csv文件:采集前会进行检查,绝不会覆盖现有文件。 - 任务关闭后,输出会保持其值(适用于大多数 NI 设备),输出工具正是依赖这一点。部分设备的空闲/上电输出行为可以配置;如果输出会复位,请检查设备设置。
- 读取数字线路可能改变其状态。 DAQmx 数字输入任务会将线路配置为输入。因此,对于由服务驱动的线路,服务会报告其上次设定的电平,而不是读取线路,并会说明其他软件驱动的线路存在的风险。
- 端子配置很重要。
default会让 NI-DAQmx 自行选择(支持时通常选择差分)。选择错误会导致偏移或噪声,而不是报错。 - 热电偶使用
add_ai_thrmcpl_chan,并采用内置或恒定冷端补偿。此版本不提供 CJC 通道(SCANNABLE_CHANNEL),因为其正确用法取决于设备。 - 速率: 多路复用设备会在各通道间共享
ai_max_multi_channel_rate_hz,NI-DAQmx 会将采样时钟调整为时基能够生成的速率。实际速率会在sample_rate_hz中返回。 - NI-DAQmx 警告(例如有关值被调整的警告)会包含在每次采集的
warnings列表中。
硬件验证
| 型号 | NI-DAQmx 版本 | 接口 | 验证者 | 日期 |
|---|---|---|---|---|
| 尚无: 抢先提交 |
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。