内容
# Rigol DP832 MCP 服务器
用于通过以太网连接使用 VISA TCP/IP 控制 Rigol DP832 可编程电源的 Python 库和模型上下文协议(MCP)服务器。
## 功能特点
- **仅以太网**:专注于以太网连接,无 USB/USBTMC 依赖
- **VISA TCP/IP**:使用行业标准的 VISA TCP/IP 进行可靠的通信
- **完整的 DP832 支持**:对所有 DP832 通道和功能进行完全控制
- **网络发现**:自动发现工具来查找网络上的 DP832
- **易于使用**:用于电源控制的简单 Python API
- **MCP 服务器**:用于 AI 代理集成的模型上下文协议服务器
- **AI 就绪**:与 AI 助手和自动化工作流直接集成
## 支持的型号
- **DP832**:3 通道可编程电源(主要关注)
- **DP821**:2 通道可编程电源
- **DP712**:1 通道可编程电源
## 安装
### 选项 1:通过 pip 安装(推荐)
直接从 GitHub 安装:
```bash
pip install git+https://github.com/amahpour/rigol_dp832_mcp_server.git
```
### 选项 2:克隆和安装
1. 克隆此存储库:
```bash
git clone https://github.com/amahpour/rigol_dp832_mcp_server.git
cd rigol_dp832_mcp_server
```
2. 安装软件包:
```bash
pip install .
```
### 选项 3:开发安装
用于可编辑模式的开发:
```bash
git clone https://github.com/amahpour/rigol_dp832_mcp_server.git
cd rigol_dp832_mcp_server
pip install -e .
```
## 快速入门
### 1. 连接您的 DP832
通过以太网电缆将您的 DP832 连接到网络,并配置其 IP 地址。
### 2. 查找您的设备
使用自动发现工具来查找您的 DP832:
```bash
python rigol_dp832/find_dp832.py
```
这将扫描您的网络并提供要使用的确切连接字符串。
### 3. 使用库
```python
from rigol_dp832.rigol_dp import DP832
# 连接到您的 DP832
ps = DP832(
conn_type="VISA",
visa_resource_string="TCPIP0::192.168.1.100::5555::SOCKET"
)
# 获取设备信息
device_id = ps.id()
print(f"已连接到:{device_id['model']}")
# 将通道 1 设置为 5V,1A 并打开它
ps.set_channel_settings(channel=1, voltage=5.0, current=1.0)
ps.set_output_state(channel=1, state=True)
# 读取测量值
voltage = ps.measure_voltage(1)
current = ps.measure_current(1)
print(f"电压:{voltage:.3f}V,电流:{current:.3f}A")
# 关闭输出
ps.set_output_state(channel=1, state=False)
# 关闭连接
ps.close()
```
## MCP 服务器用法
此存储库包括一个模型上下文协议(MCP)服务器,允许 AI 代理直接控制您的 Rigol 电源。MCP 服务器提供了一套全面的工具,用于设备发现、连接管理、通道控制、测量和保护设置。
### 1. 安装依赖项
在运行 MCP 服务器之前,请安装所需的 Python 包:
```bash
pip install pyvisa fastmcp
```
或从 requirements 文件安装:
```bash
pip install -r requirements.txt
```
或安装软件包本身(它会拉取所有依赖项):
```bash
pip install git+https://github.com/amahpour/rigol_dp832_mcp_server.git
```
### 2. 将 MCP 服务器添加到您的客户端
将以下内容添加到您的 MCP 客户端配置中。将 `/path/to/rigol_dp832_mcp_server` 替换为实际的克隆存储库的路径。
**Cursor** (`~/.cursor/mcp.json`):
```json
{
"mcpServers": {
"rigol-dp832": {
"command": "python3",
"args": ["/path/to/rigol_dp832_mcp_server/mcp_rigol_dp832.py"],
"env": {}
}
}
}
```
**Claude Code** (运行此命令):
```bash
claude mcp add --transport stdio rigol-dp832 -s user -- python3 /path/to/rigol_dp832_mcp_server/mcp_rigol_dp832.py
```
您可以选择通过环境变量设置静态 IP 地址和端口,而不是依赖自动发现:
```json
{
"mcpServers": {
"rigol-dp832": {
"command": "python3",
"args": ["/path/to/rigol_dp832_mcp_server/mcp_rigol_dp832.py"],
"env": {
"RIGOL_DP832_IP": "192.168.1.100",
"RIGOL_DP832_PORT": "5555"
}
}
}
}
```
**配置选项:**
- `RIGOL_DP832_IP`:您的电源的 IP 地址(可选 — 如果未设置,则使用自动发现)
- `RIGOL_DP832_PORT`:端口号(默认值:5555)
### 3. 重启您的客户端
重启 Cursor 或 Claude Code 以使新的 MCP 服务器被拾取。
配置完成后,您可以通过自然语言命令与您的电源交互,例如:
- “连接到电源”
- “将通道 1 设置为 5V 和 1A”
- “启用通道 1 的输出”
- “测量通道 1 的电压和电流”
- “在网络上发现可用的电源”
### 可用的 MCP 工具
MCP 服务器提供以下工具:
#### 设备发现与连接
- `discover_devices()` - 在网络上查找所有 Rigol 电源(自动发现)
- `test_connection(ip_address=None)` - 测试到配置的设备或特定 IP 的连接
- `connect(ip_address=None, port=None)` - 连接到配置的设备或特定 IP/端口
- `disconnect()` - 与当前设备断开连接
- `get_device_info()` - 获取有关连接设备的详细信息
#### 通道控制
- `set_channel_settings(channel, voltage, current)` - 设置电压和电流
- `get_channel_settings(channel)` - 获取当前设置
- `set_output_state(channel, state)` - 启用/禁用输出
- `get_output_state(channel)` - 获取输出状态
#### 测量
- `measure_voltage(channel)` - 测量电压
- `measure_current(channel)` - 测量电流
- `measure_all(channel)` - 测量电压、电流和功率
#### 保护设置
- `set_ocp_enabled(channel, state)` - 启用/禁用过流保护
- `get_ocp_enabled(channel)` - 获取 OCP 状态
- `set_ocp_value(channel, current_limit)` - 设置 OCP 电流限制
- `get_ocp_value(channel)` - 获取 OCP 电流限制
- `set_ovp_enabled(channel, state)` - 启用/禁用过压保护
- `get_ovp_enabled(channel)` - 获取 OVP 状态
- `set_ovp_value(channel, voltage_limit)` - 设置 OVP 电压限制
- `get_ovp_value(channel)` - 获取 OVP 电压限制
#### 状态和诊断
- `get_output_mode(channel)` - 获取输出模式(CV/CC/UR)
- `get_ocp_alarm(channel)` - 检查 OCP 警报状态
- `get_ovp_alarm(channel)` - 检查 OVP 警报状态
- `clear_ocp_alarm(channel)` - 清除 OCP 警报
- `clear_ovp_alarm(channel)` - 清除 OVP 警报
- `ping()` - 健康检查
## 网络发现工具
### 自动发现
```bash
python rigol_dp832/find_dp832.py
```
自动扫描您的网络并查找 DP832 设备。
### 测试特定 IP
```bash
python rigol_dp832/test_ip.py 192.168.1.100
```
测试特定 IP 地址的 DP832 连接性。
### 全面的网络扫描
```bash
python rigol_dp832/network_discovery.py
```
执行具有多个发现方法的详细网络扫描。
## API 参考
### 连接
```python
from rigol_dp832.rigol_dp import DP832
ps = DP832(
conn_type="VISA",
visa_resource_string="TCPIP0::<IP_ADDRESS>::5555::SOCKET"
)
```
### 设备信息
```python
device_id = ps.id()
# 返回:{'manufacturer': 'RIGOL TECHNOLOGIES', 'model': 'DP832', ...}
```
### 通道控制
```python
# 设置电压和电流
ps.set_channel_settings(channel=1, voltage=5.0, current=1.0)
# 启用/禁用输出
ps.set_output_state(channel=1, state=True)
# 获取当前设置
settings = ps.get_channel_settings(channel=1)
# 返回:{'voltage': 5.0, 'current': 1.0}
```
### 测量
```python
# 单个测量
voltage = ps.measure_voltage(channel=1)
current = ps.measure_current(channel=1)
# 一次所有测量
measurements = ps.measure_all(channel=1)
# 返回:{'voltage': 5.0, 'current': 0.5, 'power': 2.5}
```
### 保护设置
```python
# 过流保护(OCP)
ps.set_ocp_enabled(channel=1, state=True)
ps.set_ocp_value(channel=1, setting=1.5)
ocp_enabled = ps.get_ocp_enabled(channel=1)
ocp_value = ps.get_ocp_value(channel=1)
# 过压保护(OVP)
ps.set_ovp_enabled(channel=1, state=True)
ps.set_ovp_value(channel=1, setting=6.0)
ovp_enabled = ps.get_ovp_enabled(channel=1)
ovp_value = ps.get_ovp_value(channel=1)
```
## 示例
参见 `rigol_dp832/ethernet_example.py` 以获取一个完整的示例。
## 故障排除
### 连接问题
1. **检查 IP 地址**:验证 IP 地址是否正确
2. **网络连接性**:ping 设备:`ping 192.168.1.100`
3. **SCPI 接口**:确保 DP832 上启用了 SCPI over Ethernet
4. **防火墙**:检查是否有防火墙阻止端口 5555
5. **PyVISA**:确保 PyVISA 已安装并正常工作
### 常见错误代码
- `-1073807339`:连接超时(设备未找到或无响应)
- `-1073807343`:无效的资源字符串格式
- `-1073807346`:设备忙或锁定
## 要求
- Python 3.6+
- PyVISA >= 1.11.0
- 到 DP832 的网络连接
## 已排除的内容
本库仅专注于以太网连接。以下内容已被故意排除:
- USB/USBTMC 连接
- 自定义套接字实现
- Web 服务器功能
- OpenAI 集成
## 许可证
该项目基于原始的 instrument-controllables 库,并保持与 DP832 仪器控制功能的兼容性。
## 贡献
欢迎提交问题和增强请求!