mcpField
N
NI-DAQmx DAQ Devices

NI-DAQmx DAQ Devices

本地服务
github.com科研与教育235 周前更新

关于 NI-DAQmx DAQ Devices

NI-DAQmx DAQ Devices 是用于采集 National Instruments DAQ 硬件数据并设置模拟或数字输出的 MCP 服务。它通过 NI-DAQmx 驱动和 Python API 工作,目前尚无硬件验证记录。

主要功能

  1. 01采集模拟电压样本和波形
  2. 02读取热电偶温度及数字线路
  3. 03设置模拟和数字输出
  4. 04将采集数据保存为 CSV
  5. 05查看设备和通道能力

适用场景

  1. 01测量电压信号及均方根噪声
  2. 02记录热电偶随时间变化的读数
  3. 03检查联锁的数字状态
  4. 04驱动输出后将输出置于安全状态

MCP 相关

向 MCP 客户端提供 DAQ 设备发现、测量、输出控制和安全状态操作工具。只读模式允许采集数据,但会阻止输出工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"k-dense-ai-labmcp-ni-daqmx": {
"command": "uvx",
"args": [
"labmcp-ni-daqmx"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}
启动命令uvx labmcp-ni-daqmx
需要配置的环境变量
LABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025
LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)
LABMCP_READ_ONLYSet to 1 to disable all state-changing tools
LABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypilabmcp-ni-daqmx0.1.2

工具

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。

连接仪器

  1. 从 ni.com 安装 NI-DAQmx(Windows 或 Linux;NI-DAQmx 不支持 macOS)。nidaqmx Python 软件包会随本服务安装;也可以使用 python -m nidaqmx installdriver 安装驱动。
  2. 在 NI MAX(Devices and Interfaces)中或通过 Linux 上的 nilsdev 查找设备名称,例如 Dev1 或 cDAQ1Mod1。连接前请关闭 NI MAX 测试面板。
  3. 测试连接:
    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_v5 VAgent 可施加到模拟输出上的最大 |电压|
max_samples100 000单次采集中每个通道的最大样本数
max_rate_hz100 000 Hz每个通道的最高采样时钟速率
max_acquisition_s60 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 版本接口验证者日期
尚无: 抢先提交

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。