mcpField
S
SRS Lock-in Amplifier

SRS Lock-in Amplifier

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

关于 SRS Lock-in Amplifier

SRS Lock-in Amplifier 是用于读取和控制 Stanford Research Systems SR810/SR830 与 SR860/SR865A 锁相放大器的 MCP 服务。它提供输出测量、设置控制和有界频率扫描,支持这些仪器的命令集。

主要功能

  1. 01读取 X、Y、R 和 θ 输出
  2. 02配置参考、输入和滤波设置
  3. 03自动执行相位、增益和量程调整
  4. 04记录有界频率扫描
  5. 05限制驱动幅度并支持只读操作

适用场景

  1. 01调整设置后测量锁相输出
  2. 02通过频率扫描查找共振
  3. 03自动优化相位、增益或输入量程
  4. 04将正弦输出降至最低

MCP 相关

向 MCP 客户端提供仪器读数、设置、控制和频率扫描工具。只读模式会阻止更改设置和驱动正弦输出。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"k-dense-ai-labmcp-srs-lockin": {
"command": "uvx",
"args": [
"labmcp-srs-lockin"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}
启动命令uvx labmcp-srs-lockin
需要配置的环境变量
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-srs-lockin0.1.3

工具

15

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

SRS 锁相放大器 — MCP 服务

让 AI Agent 读取 X/Y/R/θ,设置参考频率、谐波和相位、驱动电平、灵敏度和时间常数,运行自动相位/增益调整,并在 Stanford Research Systems DSP 锁相放大器 上记录范围受限的频率扫描,包括经典的 SR810/SR830 和当前的 SR860/SR865A。

软件包labmcp-srs-lockin
仪器SR830、SR810(SR8x0 命令集);SR860、SR865A(SR86x 命令集)
接口GPIB(VISA)、RS-232;SR86x 还支持 USB(USBTMC)和以太网(VXI-11)
协议SRS ASCII 远程命令,采用 IEEE-488.2 风格(SR830 手册 第 5 章,SR810 手册,SR860 手册 第 4 章,SR865A 手册)
状态🧪 模拟:已通过两种命令集的线级模拟器测试,尚未在硬件上验证。报告硬件测试

无需硬件即可试用

uvx labmcp-srs-lockin --simulate --check                       # SR830 simulator
uvx labmcp-srs-lockin --simulate --option model=sr860 --check  # SR860 simulator

模拟样品是由正弦输出驱动的谐振器(10 kHz,Q = 50),因此从 9 到 11 kHz 执行 frequency_sweep 会显示谐振峰。

连接锁相放大器

根据 *IDN? 检测型号(可使用 --option model=sr830|sr810|sr860|sr865a 覆盖)。

  1. **GPIB(所有型号):**在设置菜单中设置 GPIB 地址(SR830 出厂默认值为 8)。安装 labmcp[visa](已包含)和 VISA 后端(pyvisa-py 适用于大多数 USB-GPIB 适配器;NI-VISA 使用 ?backend=@ivi)。
  2. **RS-232:**在仪器上设置波特率和奇偶校验(SR830 默认波特率为 9600,无奇偶校验;字长始终为 8 位)。SR830 只会响应 OUTX 选定的接口;服务器会在串行连接上自动发送 OUTX 0,在 GPIB 上发送 OUTX 1。SR830 的 RS-232 回复以 CR 结尾。对于通过 RS-232 连接的 SR86x,传入 --option model=sr860(回复以 LF 结尾),或将 SR86x 的发送终止符设置为 CR。
  3. **SR86x USB / 以太网:**使用 USBTMC 或 VXI-11 VISA 资源(TCPIP0::<ip>::inst0::INSTR;在系统菜单中启用 VXI-11,并将你的 PC 添加到可信 IP 范围)。
  4. 测试连接:
    uvx labmcp-srs-lockin --address GPIB0::8::INSTR --check
    uvx labmcp-srs-lockin --address /dev/ttyUSB0 --check                      # SR830 RS-232
    uvx labmcp-srs-lockin --address "serial://COM3?baudrate=19200" --check    # non-default baud
    uvx labmcp-srs-lockin --address TCPIP0::192.168.1.20::inst0::INSTR --check  # SR86x LAN
    
    如果通过原始 TCP 适配器连接 SR830 的 GPIB 端口,请使用 --option interface=gpib。

添加到 MCP 客户端

Claude Code

claude mcp add lockin -- uvx labmcp-srs-lockin --address GPIB0::8::INSTR

Claude Desktop / Cursor / Windsurf(claude_desktop_config.json、.cursor/mcp.json、……)

{
  "mcpServers": {
    "lockin": {
      "command": "uvx",
      "args": ["labmcp-srs-lockin", "--address", "GPIB0::8::INSTR"]
    }
  }
}

添加 --read-only,即可读取输出和设置,但会阻止所有设置更改以及正弦输出驱动。对于其他客户端,可使用 uvx labmcp config srs-lockin --address GPIB0::8::INSTR --client vscode 生成配置片段(也支持 cursor、codex、claude-code)。

工具

工具类型描述
auto_gain🎛 控制根据当前信号自动选择灵敏度(SR830 AGAN / SR86x ASCL)。在 SR830 上,如果时间常数超过 1 s,则 AGAN 不执行任何操作。
auto_phase🎛 控制执行自动相位(APHS):调整参考相位,使 Y ≈ 0 且 X ≈ R。随后输出需要经过数个时间常数才能稳定。如果相位不稳定,则不执行任何操作。
auto_range🎛 控制根据当前信号优化输入级:SR830 自动储备(ARSV)或 SR86x 自动设置电压输入范围(ARNG)。
frequency_sweep⚠️ 危险将内部参考(和 SINE OUT 驱动)从 start_hz 逐步调整到 stop_hz,在每个点等待输出滤波器稳定,并记录 X/Y/R/θ 随频率的变化,例如用于测量共振或传递函数。驱动幅度保持当前值。需要使用内部参考。估算时长必须在 max_sweep_duration_s 范围内;set_amplitude_minimum 会停止正在运行的扫描。save_path 必须是一个新的 .csv 文件。
get_command_log👁 读取返回最近发送给仪器的原始命令和从仪器收到的回复(最新记录在最后)。有助于调试和记录操作。
get_connection_info👁 读取报告当前连接的仪器(身份、地址、模拟或真实)、服务是否为只读,以及当前生效的安全限制。请先调用此工具。
get_settings👁 读取报告参考设置(源、频率、谐波、相位)、正弦输出、灵敏度、时间常数/斜率(含 99% 稳定时间)和输入配置。
read_outputs👁 读取通过一次一致的快照(SNAP?)读取 X、Y、R 和 θ,并返回参考频率、灵敏度、满量程占比,以及自上次读数以来锁存的任何过载状态。
reconnect🛑 安全关闭并重新打开与仪器的连接(例如仪器断电重启或重新插拔电缆后)。
set_amplitude⚠️ 危险设置 SINE OUT 幅度(V rms),用于驱动样品或激励电路。超过 max_amplitude_v 安全限制时将被拒绝。请先告知用户新的驱动电平。
set_amplitude_minimum🛑 安全将正弦输出调至仪器最小值(锁相放大器最接近“关闭输出”的状态),并停止任何正在运行的频率扫描。SR810/SR830:4 mV rms(无法降至零——如果样品必须完全不受驱动,请断开电缆)。SR86x:1 nV rms,直流电平为 0 V。
set_input🎛 控制配置信号输入:A / A-B / 电流、AC 或 DC 耦合、屏蔽浮地/接地,以及(SR86x)电压输入范围。低于约 160 mHz 时使用 DC 耦合。未指定的参数保持不变。
set_reference🎛 控制设置参考:源(内部/外部)、内部频率、检测谐波和相移。未指定的参数保持不变。改变频率也会改变 SINE OUT 驱动频率(幅度保持当前值)。
set_sensitivity🎛 控制设置灵敏度(满量程范围)。将选择不小于 full_scale 的最小可用量程,以避免该幅度的信号造成过载。在 SR810/SR830 上,也可以同时设置动态储备。
set_time_constant🎛 控制设置输出滤波器时间常数(选择最接近的可用值),并可选设置滤波器斜率和同步滤波器。SR830 可能会将过短的时间常数提高到当前斜率/储备对应的最小值;返回的设置会显示实际采用的值。

get_connection_info、get_command_log 和 reconnect 内置于每个 LabMCP 服务中。

安全限制

限制默认值含义
max_amplitude_v1.0 Vset_amplitude 可设置的最大正弦输出振幅(V rms);如果当前振幅高于此值,扫描也会被拒绝执行
max_sweep_duration_s600 sAgent 可启动的最长估算频率扫描时长(点数 × 稳定时间)

启动时覆盖:--limit max_amplitude_v=0.1 --limit max_sweep_duration_s=1800。

示例提示词

  • “将锁相放大器设为 13.7 Hz 内部参考、100 mV 驱动、1 s 时间常数和 24 dB/oct,并在稳定后告诉我 X 和 Y。”
  • “自动调相,然后读取 R 和 θ 十次,并给我 R 的均值和标准差。”
  • “以 10 mV 驱动,在 30 到 34 kHz 之间按对数间隔分 201 步扫描,并找出我的音叉的谐振频率和 Q 值。”
  • “切换到电流输入,增益设为 100 MΩ,采用直流耦合,并自动选择灵敏度。”
  • “我们完成了——将正弦输出调至最低。”

备注

  • 正弦输出具有危险性。 它会驱动样品(产生热量、电迁移和压电应力)。set_amplitude 会检查 max_amplitude_v;set_amplitude_minimum 是最接近“关闭输出”的设置:SR810/SR830 无法低于 4 mV rms,因此如果样品必须完全不受驱动,请断开电缆。对于 SR86x,它会将振幅设为 1 nV rms,并将直流电平设为 0 V(SOFF)。SR830 上电和重置(*RST)后的振幅为 1.000 V rms。
  • 每条设置命令后都会执行 *ESR?;如果锁相放大器标记执行错误(例如参数超出范围,如在外部参考模式下使用 FREQ)或命令非法,工具会报告错误,而不会静默继续。
  • set_sensitivity 会选择不低于所请求满量程的最小量程(绝不会选择更小的量程,以免过载)。set_time_constant 会选择最接近的可用值;SR830 可能会根据斜率/储备将其调高到允许的最小值,返回的设置会显示实际使用的值。
  • read_outputs 在电压输入时返回 unit = V,在电流输入时返回 unit = A(根据手册,灵敏度映射为 1 V ↔ 1 µA)。SR830 手册(第 5 章,兼容 SR530 的 QX/QY 命令)指出,选择电流输入时输出以安培为单位返回;SR86x 手册没有明确说明——请报告仪器实际返回的单位。
  • overloads 来自 LIAS?,其位会从上次读取后保持锁存;瞬态之后的首次读数可能会显示已经消失的过载。
  • frequency_sweep 会在每个点等待手册规定的 99% 稳定时间(对于 6/12/18/24 dB/oct,分别为 5/7/9/10 个时间常数),除非提供了 settle_time_constants,并会在之后恢复起始频率。调用 set_amplitude_minimum 会在下一个点停止正在运行的扫描(包括仍在读取设置的扫描)。无论 max_sweep_duration_s 设置为何,单次扫描最长可运行 3640 s(工具超时时间减去余量):会拒绝更长的估算时长;如果扫描的实际运行速度低于估算速度,则会提前停止并返回已测量的点(completed: false)。save_path 必须以 .csv 结尾,且文件必须尚不存在(绝不会覆盖已有文件);此项会在扫描开始前检查。
  • set_amplitude_minimum 会尝试设置振幅和(SR86x 的)直流电平,即使其中一项失败也会继续尝试另一项,然后报告所有失败。
  • auto_gain 对应 AGAN(SR830)或 ASCL(SR86x);auto_range 对应 ARSV(SR830 自动储备)或 ARNG(SR86x 自动输入量程)。当时间常数大于 1 s 时,SR830 的 AGAN 不会执行任何操作。
  • 不提供数据缓冲区、流式传输和 FFT 功能。未纳入 SR850、SR844(RF)和 SR865(非 A 型),因为尚未验证;使用显式的 --option model=... 可以尝试兼容型号,但风险自负。

硬件验证

型号固件接口验证者日期
暂无:成为首位验证者

评论

支持 Markdown

第一次接触 MCP?

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

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