rigol mcp
MCP服务器,用于控制 Rigol DS1000Z系列示波器 通过局域网。将范围公开为一组工具,Claude(或任何MCP客户端)可以调用这些工具进行测量、配置仪器和捕获屏幕截图——完全通过自然语言。
示例:克劳德的未知信号特征
未知信号(方波进入LCR陷波器),启用了错误的通道,时基/电压/触发器无效。Claude识别信号类型,纠正设置,并描述波形特征。
支持的硬件
Rigol DS1000Z/MSO1000Z系列:
| 型号 | 渠道 | 备注 |
|---|---|---|
| DS1054Z | 4模拟 | 最常见,50 MHz |
| DS1074Z | 4模拟 | 70 MHz |
| DS1074Z-S | 4模拟+信号发生器 | |
| DS1104Z | 4模拟 | 100 MHz |
| DS1104Z-S | 4模拟+信号发生器 | |
| MSO1054Z | 4模拟+16数字 | MSO变体 |
| MSO1074Z | 4模拟+16数字 | |
| MSO1104Z | 4模拟+16数字 |
该范围必须连接到您的 通过以太网的本地网络 (后面板RJ45)。此硬件不支持Wi-Fi。目前不支持USB-VISA,仅限于局域网。
需求
- Python 3.11+
- 紫外线 (推荐)或pip
- Rigol DS1000Z与您的计算机位于同一局域网内
- 作用域上启用TCP/IP上的SCPI(默认情况下)
安装
git clone https://github.com/erebusnz/rigol-mcp
cd rigol-mcp
uv sync范围网络设置
在示波器上,转到 效用→ IO设置→ LAN 并记下IP地址(或分配一个静态地址)。示波器正在监听 端口5555 对于原始SCPI命令,不需要额外的配置。
*在以下所有说明中,将192.168.1.123替换为作用域的IP地址。*
在浏览器中验证: http://192.168.1.123/DS1000Z_WelcomePage.html
在用作MCP之前验证连接:
python -c "import pyvisa; rm = pyvisa.ResourceManager(); s = rm.open_resource('TCPIP0::192.168.1.123::5555::SOCKET'); s.write_termination='\n'; s.read_termination='\n'; print(s.query('*IDN?'))"您应该看到类似以下内容:
RIGOL TECHNOLOGIES,DS1054Z,DS1ZA123456789,00.04.04.SP4配置
通过环境变量设置MCP的作用域IP:
export RIGOL_IP=192.168.1.123或者创建一个 .env 文件(复制自 .env.example):
RIGOL_IP=192.168.1.123可选:
| 变量 | 默认值 | 描述 |
|---|---|---|
RIGOL_IP | (必填) | 作用域IP地址 |
RIGOL_SCREENSHOT_DIR | screenshots/ | 保存PNG屏幕截图的目录 |
克劳德桌面/Claude代码设置
添加到您的 .mcp.json (或克劳德桌面MCP配置):
{
"mcpServers": {
"rigol": {
"command": "uv",
"args": ["run", "rigol-mcp"],
"cwd": "/path/to/rigol-mcp",
"env": {
"RIGOL_IP": "192.168.1.123"
}
}
}
}工具
标识和状态
| 工具 | 说明 |
|---|---|
idn | 识别仪器——品牌、型号、序列号、固件 |
get_scope_state | 所有通道配置、时基和触发器设置的快照 |
采集控制
| 工具 | 说明 |
|---|---|
run | 开始连续采集 |
stop | 停止并冻结显示 |
single | 启动一个触发事件,然后停止 |
autoscale | 自动配置时基、垂直刻度和触发器 |
配置
| 工具 | 说明 |
|---|---|
set_channel | 设置刻度(V/div)、偏移、耦合(AC/DC GND)、探头比、开/关 |
set_timebase | 设置时间/div和触发偏移 |
set_trigger | 配置边缘触发器:源、斜率(POS/NEG/RVAL)、电平 |
测量
| 工具 | 说明 |
|---|---|
measure | 查询任何单通道测量值:VMAX、VMIN、VPP、VTOP、VBASE、VAMP、VAVG、VRMS、PVRMS、VUPPER、VMID、VLOWER、VARIANCE、FREQUENCY、PERIOD、PWIDTH、NWIDTH、PDU、NDUTY、RTIME、FTIME、OVERSHOOT、PRESHOOT、PSLEWRATE、NSLEWRATE,TVMAX、TVMIN、MAREA、MPAREA、PPULSES、NPULSES、PEDGES、NEDGES |
measure_between | 两个通道之间的查询延迟或相位:RDELAY、FDELAY(秒)、RPHASE、FPHASE(度) |
get_waveform | 下载并分析波形数据(~1200点);默认情况下返回文本分析,原始时间/电压数组 raw_data=true |
光标
| 工具 | 说明 |
|---|---|
set_cursors | 设置光标模式(手动/跟踪/关闭)和时间位置(秒) |
get_cursor_values | 读取光标位置(秒)和所有增量/振幅读数 |
效用
| 工具 | 说明 |
|---|---|
screenshot | 捕获显示为PNG格式——内联返回图像并保存到磁盘 |
send_raw | 直接发送任何SCPI命令(逃生口) |
check_error | 查询SCPI错误队列 |
示例提示
基本测量会话:
连接示波器,检查配置,然后测量通道1上的频率和Vpp
信号特征:
“停止示波器,从通道2下载波形,告诉我上升时间、过冲百分比和估计的基频。”
从头开始设置:
“使用10x探头将通道1设置为2V/div DC耦合,将时基设置为1ms/div,在通道1的上升沿1V处触发,然后运行并截图。”
光标测量:
“将手动光标放在通道1上信号的第一个上升沿上——光标A处于10%的水平,光标B处于90%的水平——并从增量中读取上升时间。”
瞬态/振铃特性:
“阶跃边缘后,通道1上出现阻尼振荡。停止示波器,测量Vpp、Vmax、Vmin和Vrms,然后估计环路频率以及衰减所需的周期数。”
迭代调试:
“我正在验证放大器的增益。通道1是输入,通道2是输出。预期增益为20 dB。弄清楚它是否在规格范围内。”
未知信号特征:
“第一频道有一个陌生的信号。我不知道它的频率、振幅或形状。不断调整时基和垂直比例,直到你有一个稳定、框架良好的视图,至少有两个完整的周期,然后给我一个你所看到的完整特征。"
建筑
Claude / MCP client
│ MCP protocol (stdio)
rigol_mcp.server ← tool definitions, request routing
│ Python function calls
rigol_mcp.scope ← VISA connection, SCPI command helpers
│ SCPI over TCP/IP (port 5555)
Rigol DS1000Z ← 192.168.1.123VISA连接跨工具调用缓存(每个服务器会话一个TCP连接),并在网络错误时自动重新连接。
SCPI运输
服务器使用以下方式连接 VISA原始插座 (TCPIP0::::5555::SOCKET),而不是VXI-11。这避免了NI-VISA依赖关系,并适用于纯Python pyvisa-py 后端。它还消除了VXI-11握手开销,使单个命令更快。
局限性
- 仅限局域网(无USB)-USB只会增加更多问题和操作系统特定的实施挑战!
- 当前工具中还不支持数学通道、数字通道(MSO)或协议解码——请使用
send_raw对于那些 - 波形下载使用NORMAL模式(屏幕缓冲区,~1200点);尚未实现全内存深度(RAW模式,高达56M点)
许可证
麻省理工学院——见 许可证.
