mcpField
T
Thorlabs Optical Power Meter

Thorlabs Optical Power Meter

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

关于 Thorlabs Optical Power Meter

面向 Thorlabs 光功率计的 MCP 服务,通过 SCPI 和 USBTMC/VISA 读取功率、记录变化并调整仪表设置。适用于激光测量;当前通过线路级模拟器测试,尚未验证真实硬件。

主要功能

  1. 01读取光功率与传感器温度
  2. 02记录功率序列及稳定性指标
  3. 03设置波长校正、平均次数和量程
  4. 04对传感器执行暗零校准
  5. 05查询仪表与传感器信息

适用场景

  1. 01测量指定波长下的激光功率
  2. 02记录激光预热漂移与稳定性
  3. 03测量前校准波长和量程
  4. 04检查热传感器是否仍在升温

MCP 相关

向 MCP 客户端提供 Thorlabs 光功率计的读数、配置和校准工具,通过 USBTMC/VISA 发送 SCPI 命令。

配置

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

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

工具

11

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

此工具无需参数。

详细介绍

Thorlabs 光功率计 — MCP 服务

通过 USB(USBTMC / VISA),使用文档记载的 SCPI 命令集,让 AI Agent 读取 Thorlabs 光功率计 的激光功率、记录稳定性和预热漂移、设置波长校正、平均次数和量程,并将传感器暗零。

软件包labmcp-thorlabs-pm
仪器配备 C 系列光电二极管和热传感器的 PM100D、PM100A、PM100USB、PM400 控制台。PM101 和 PM5020 使用相同的文档记载命令,但未经验证(见备注)
接口USB(USBTMC,通过 VISA)
协议SCPI:PM100D 操作手册 17654-D02 §6.4、PM100USB 操作手册 19570-D02 §6.3、PM400 操作手册 v1.1 §5.5,以及 Thorlabs 的各型号 SCPI 命令参考
状态🧪 模拟:已通过线路级 SCPI 模拟器测试,尚未在硬件上验证。报告硬件测试结果

无需硬件即可试用

uvx labmcp-thorlabs-pm --simulate --check
uvx labmcp-thorlabs-pm --simulate --option sim_sensor=S302C --check   # thermal sensor head

模拟器配置为 PM100D,配有 S120C 光电二极管(或 S302C 热电堆),用于测量 1.234 mW、632.8 nm 的 HeNe 激光。为光电二极管设置错误的波长会导致读数按比例出错,与真实实验台上的情况相同。

连接功率计

  1. 驱动程序。 Thorlabs 计量仪会枚举为 USB 测试与测量类(USBTMC)设备,供应商 ID 为 0x1313。
    • Windows: PyVISA 无法识别 Thorlabs 驱动程序(TLPM / Thorlabs VISA)。请安装免费的 NI-VISA runtime,然后使用 Thorlabs Driver Switcher(随 Thorlabs Optical Power Monitor 软件安装)将计量仪切换到 NI-VISA 驱动程序,并使用 ?backend=@ivi 启动服务(见下文)。这是 Thorlabs 为 PyVISA 记载的方式。
    • Linux: pyvisa-py 可直接与 USBTMC 通信(随此软件包安装)。请授予用户访问设备的权限,例如在 /etc/udev/rules.d/99-thorlabs-pm.rules 中添加:
      SUBSYSTEM=="usb", ATTR{idVendor}=="1313", MODE="0666"
      
      然后运行 sudo udevadm control --reload-rules,并重新插拔计量仪。NI-VISA 也可用(?backend=@ivi)。
    • macOS: 使用 pyvisa-py + libusb(brew install libusb);也可使用 NI-VISA。
  2. **查找资源字符串:**运行 uvx labmcp ports(或 python -m pyvisa info)。资源字符串类似 USB0::0x1313::0x8078::P0012345::INSTR(产品 ID 因型号而异:PM100D 为 0x8078,PM100USB 为 0x8072)。
  3. 测试连接:
    uvx labmcp-thorlabs-pm --address USB0::0x1313::0x8078::P0012345::INSTR --check
    uvx labmcp-thorlabs-pm --address "visa://USB0::0x1313::0x8078::P0012345::INSTR?backend=@ivi" --check   # NI-VISA
    
    对于 PM5020 的第二个输入端,添加 --option channel=2。

添加到 MCP 客户端

Claude Code

claude mcp add power-meter -- uvx labmcp-thorlabs-pm --address USB0::0x1313::0x8078::P0012345::INSTR

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

{
  "mcpServers": {
    "power-meter": {
      "command": "uvx",
      "args": ["labmcp-thorlabs-pm", "--address", "USB0::0x1313::0x8078::P0012345::INSTR"]
    }
  }
}

添加 --read-only 可允许读取,但会阻止更改波长、平均次数、量程和归零。对于其他客户端,运行 uvx labmcp config thorlabs-pm --address <resource> --client vscode 生成配置片段(也支持 cursor、codex、claude-code)。

工具

工具类型描述
get_command_log👁 读取返回最近发送到仪器的原始命令及收到的回复(最新的在最后)。适用于调试和记录操作内容。
get_connection_info👁 读取报告当前连接的仪器(标识、地址、模拟或真实)、服务是否为只读,以及当前生效的安全限制。请先调用此工具。
get_device_info👁 读取识别功率计控制台和连接的传感器头(型号、序列号、类型、波长范围、功率范围),并报告当前波长、平均次数、量程和零值。
log_power_series👁 读取记录一系列功率读数,以表征激光的稳定性、预热或漂移。返回均值、标准差、最小值/最大值、RMS 和峰峰值稳定性(%)及漂移(%/min),以及读数(降采样至 max_points;使用 save_path 指定一个新的 .csv 文件,以保留全部读数)。
read_power👁 读取读取一次光功率(单位为 W,同时提供 dBm 和格式化字符串)。读数使用已配置的校正波长和平均次数;请先设置波长。
read_sensor_temperature👁 读取读取传感器头温度,单位为 °C(仅适用于热传感器及其他内置温度传感器的传感器头)。
reconnect🛑 安全关闭并重新打开与仪器的连接(例如仪器断电重启或重新插拔线缆后)。
set_averaging🎛 控制设置功率计每次读数的平均采样次数。增加平均次数可降低噪声,但会延长每次读数的时间(PM100 系列:每个样本约 3 ms;PM400/PM101/PM5020:1 ms)。
set_range🎛 控制选择自动量程,或选择适合 range_w 的固定功率量程(功率计会选择能够容纳该功率的最灵敏量程)。超出固定量程时会报告超量程。
set_wavelength🎛 控制设置功率计用于将传感器信号转换为功率的校正波长(nm)。必须在传感器的校准范围内(见 get_device_info);发送的值为整数 nm。
zero_sensor🎛 控制对传感器进行暗零校准(消除暗电流/热偏移)。调用前,请让用户挡住光束并完全盖住传感器孔径,等待用户确认:传感器受光时进行零校准会使之后的所有读数失真。需要几秒钟。

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

功率计只能进行测量,因此此服务没有危险操作工具。激光才是危险源:请佩戴适当的护目镜,切勿超过传感器的额定功率或功率密度。

安全限制

限制默认值含义
max_series_duration_s600 sAgent 可启动的最长功率记录序列时长,估算方式为 count × max(interval, reading time),其中一次读数需要 averaging × 3 ms 加约 10 ms

启动时覆盖:--limit max_series_duration_s=3600。一次调用最多可记录 3640 s(工具超时时间减去余量):超过此时长的估算值会被拒绝;若序列运行速度慢于估算值,则会提前停止并返回已测得的数据(completed: false)。save_path 必须以 .csv 结尾,且文件尚不存在(绝不会覆盖已有文件);系统会在开始记录前检查此项。

示例提示词

  • “将功率计设置为 1064 nm,并告诉我物镜后的功率。”
  • “每隔 2 s 记录一次激光功率,持续 10 分钟,并报告 RMS 和峰峰值稳定性。将数据保存到 ~/data/laser_warmup.csv。”
  • “我已盖住传感器。将它归零,然后我会取下盖子,你再读取功率。”
  • “测量这个 ND 滤光片的透射率:先读取未安装滤光片时的功率,再读取插入滤光片后的功率,并计算光密度。”
  • “热传感器头还在升温吗?每分钟读取一次温度,直到温度稳定。”

注意事项

  • 波长很重要。 光电二极管的响应度在传感器的量程范围内会有数倍变化,因此波长设置错误会导致功率读数错误。服务发送整数纳米值(PM400/PM101/PM5020 的参考资料规定使用整数),因此 632.8 nm 会设置为 633 nm。这造成的响应度变化远小于传感器的校准不确定度。
  • 单位。 MEAS:POW? 会按照仪表配置的单位(W 或 dBm)返回结果。驱动会先读取 SENS:POW:UNIT?,并始终返回瓦特,因此前面板上的单位变更不会误导 Agent。
  • 超出量程。 当信号超过手动选择的量程时,仪表会返回 INFINITY / 9.9E37。服务会将其报告为错误,并建议启用自动量程。
  • 归零(SENS:CORR:COLL:ZERO)会在后台运行。服务会轮询 …:ZERO:STAT?、检查错误队列,并返回归零值(…:ZERO:MAGN?)。仪表重启后,归零值会丢失。
  • 能量(热释电)传感器可被识别,但不受支持:单脉冲能量测量需要触发/获取工作流,而此服务尚未实现该功能。
  • 平均。 平均次数由 SENS:AVER:COUN 设置。在 PM100 系列上,一次采样约需 3 ms;在 PM400/PM101/PM5020 上约需 1 ms。响应超时时间会随平均次数增加。
  • PM101 和 PM5020: Thorlabs 对这些型号的命令参考资料列出的命令与此处使用的命令完全一致。PM5020 需要添加通道后缀(SENS2、MEAS2、SYST:SENS2:IDN?),通过 --option channel=2 进行选择。目前这两款型号均未经测试,且尚未尝试 PM5020 的 LAN/串口连接。此服务不使用 PM100D 的 Windows TLPM DLL 驱动,而是仅通过 SCPI 通信。
  • 模拟器对超出量程值的错误响应(-222,"Data out of range")使用标准 SCPI 错误代码。Thorlabs 文档仅明确列出 -113,"Undefined header"。

硬件验证

型号固件接口验证者日期
尚无: 抢先验证

评论

支持 Markdown

第一次接触 MCP?

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

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