关于 Thorlabs Optical Power Meter
面向 Thorlabs 光功率计的 MCP 服务,通过 SCPI 和 USBTMC/VISA 读取功率、记录变化并调整仪表设置。适用于激光测量;当前通过线路级模拟器测试,尚未验证真实硬件。
主要功能
- 01读取光功率与传感器温度
- 02记录功率序列及稳定性指标
- 03设置波长校正、平均次数和量程
- 04对传感器执行暗零校准
- 05查询仪表与传感器信息
适用场景
- 01测量指定波长下的激光功率
- 02记录激光预热漂移与稳定性
- 03测量前校准波长和量程
- 04检查热传感器是否仍在升温
MCP 相关
向 MCP 客户端提供 Thorlabs 光功率计的读数、配置和校准工具,通过 USBTMC/VISA 发送 SCPI 命令。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx labmcp-thorlabs-pmLABMCP_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 周前
此工具无需参数。
详细介绍
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 激光。为光电二极管设置错误的波长会导致读数按比例出错,与真实实验台上的情况相同。
连接功率计
- 驱动程序。 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。
- Windows: PyVISA 无法识别 Thorlabs 驱动程序(TLPM / Thorlabs VISA)。请安装免费的 NI-VISA runtime,然后使用 Thorlabs Driver Switcher(随 Thorlabs Optical Power Monitor 软件安装)将计量仪切换到 NI-VISA 驱动程序,并使用
- **查找资源字符串:**运行
uvx labmcp ports(或python -m pyvisa info)。资源字符串类似USB0::0x1313::0x8078::P0012345::INSTR(产品 ID 因型号而异:PM100D 为0x8078,PM100USB 为0x8072)。 - 测试连接:
对于 PM5020 的第二个输入端,添加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--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_s | 600 s | Agent 可启动的最长功率记录序列时长,估算方式为 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"。
硬件验证
| 型号 | 固件 | 接口 | 验证者 | 日期 |
|---|---|---|---|---|
| 尚无: 抢先验证 |
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。