# 线切割控制系统 DBus 接口说明文档

## 基本信息

| 项目 | 值 |
|------|-----|
| **服务名** | `com.wirecut.service` |
| **对象路径** | `/com/wirecut/control` |
| **接口名** | `com.wirecut.IControl` |
| **总线类型** | System Bus（系统总线） |
| **设计用途** | 供"小龙虾"等外部程序对接线切割控制系统 |

---

## 目录

1. [运动控制接口](#1-运动控制接口)
2. [加工参数接口](#2-加工参数接口)
3. [状态查询接口](#3-状态查询接口)
4. [NC 文件操作接口](#4-nc-文件操作接口)
5. [工件坐标接口](#5-工件坐标接口)
6. [放电设置接口](#6-放电设置接口)
7. [信号（推送通知）](#7-信号推送通知)
8. [状态码说明](#8-状态码说明)
9. [命令行调用示例](#9-命令行调用示例)
10. [注意事项](#10-注意事项)

---

## 1. 运动控制接口

### startRun() - 启动加工
- **描述**: 启动加工程序，等价于点击界面"运行"按钮
- **参数**: 无
- **返回**: 无

```powershell
# 启动加工
qdbus com.wirecut.service /com/wirecut/control startRun
```

### stopRun() - 停止加工
- **描述**: 停止当前加工，等价于点击"停止"按钮
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control stopRun
```

### pauseRun() - 暂停加工
- **描述**: 暂停加工（变频），等价于点击"变频暂停"
- **参数**: 无
- **返回**: 无

```bash
qdbus mock_qdbus.py com.wirecut.service /com/wirecut/control pauseRun
```

### homeAll() - 全轴回零
- **描述**: 所有轴执行回零操作
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control homeAll
```

### startKongZou() - 开始空走
- **描述**: 启动空走模式（不放电测试）
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control startKongZou
```

### stopKongZou() - 停止空走
- **描述**: 停止空走模式
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control stopKongZou
```

---

## 2. 加工参数接口

### setSpeed(speed: int) -> int - 设置加工速度
- **描述**: 设置加工速度
- **参数**:
  - `speed`: 速度值，单位 mm/min，范围 1-9999
- **返回**: 实际设置的速度值

```bash
qdbus com.wirecut.service /com/wirecut/control setSpeed 80
```

### getSpeed() -> int - 获取设定速度
- **描述**: 获取当前设定的加工速度
- **参数**: 无
- **返回**: 设定速度值 (mm/min)

```bash
qdbus com.wirecut.service /com/wirecut/control getSpeed
```

### setVoltage(vol: int) - 设置放电电压
- **描述**: 设置放电电压值
- **参数**:
  - `vol`: 电压值
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control setVoltage 90
```

### setCurrent(cur: int) - 设置放电电流
- **描述**: 设置放电电流值
- **参数**:
  - `cur`: 电流值
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control setCurrent 5
```

---

## 3. 状态查询接口

### getStatus() -> QVariantMap - 获取完整状态
- **描述**: 获取系统完整状态信息（字典格式）
- **参数**: 无
- **返回字段**:

| 字段 | 类型 | 说明 |
|------|------|------|
| `running` | int | 运行状态：0=停止 1=运行中 2=暂停 |
| `is_homed` | int | 是否已回零：0=否 1=是 |
| `is_homing` | int | 是否正在回零：0=否 1=是 |
| `pos_x` | double | X轴位置 (mm) |
| `pos_y` | double | Y轴位置 (mm) |
| `pos_z` | double | Z轴位置 (mm) |
| `pos_u` | double | U轴位置 (mm) |
| `pos_v` | double | V轴位置 (mm) |
| `vol` | int | 当前电压值 |
| `cur` | int | 当前电流值 |
| `daohao` | int | 导号（加工段号） |
| `speed` | int | 设定速度 (mm/min) |

```bash
qdbus com.wirecut.service /com/wirecut/control getStatus
```

### getAxisPos() -> QString - 获取各轴位置
- **描述**: 轻量级接口，获取各轴当前位置
- **参数**: 无
- **返回**: `"x,y,z,u,v"` 格式字符串，保留3位小数，单位 mm

```bash
qdbus com.wirecut.service /com/wirecut/control getAxisPos
# 返回示例: "10.500,20.321,0.000,0.123,0.000"
```

### isRunning() -> bool - 是否正在加工
- **描述**: 查询是否处于加工状态
- **参数**: 无
- **返回**: true=运行中 false=已停止

```bash
qdbus com.wirecut.service /com/wirecut/control isRunning
```

### isHomed() -> bool - 是否已回零
- **描述**: 查询是否已完成回零
- **参数**: 无
- **返回**: true=已回零 false=未回零

```bash
qdbus com.wirecut.service /com/wirecut/control isHomed
```

---

## 4. NC 文件操作接口

### loadNC(path: QString) -> bool - 加载 NC 文件
- **描述**: 加载 NC 程序文件
- **参数**:
  - `path`: NC 文件的**绝对路径**
- **返回**: true=成功 false=失败

```bash
qdbus com.wirecut.service /com/wirecut/control loadNC "/home/user/test.ngc"
```

### getCurrentNC() -> QString - 获取当前 NC 文件
- **描述**: 获取当前已加载的 NC 文件路径
- **参数**: 无
- **返回**: NC 文件路径

```bash
qdbus com.wirecut.service /com/wirecut/control getCurrentNC
```

---

## 5. 工件坐标接口

### clearAxisOffset(axis: int) - 清除单轴工件坐标
- **描述**: 清除指定轴的工件坐标偏移
- **参数**:
  - `axis`: 轴编号：0=X 1=Y 2=Z 3=U 4=V 5=C
- **返回**: 无

```bash
# 清除 X 轴工件坐标
qdbus com.wirecut.service /com/wirecut/control clearAxisOffset 0
```

### clearAllAxisOffset() - 清除所有轴工件坐标
- **描述**: 清除全部6个轴的工件坐标偏移
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control clearAllAxisOffset
```

---

## 6. 放电设置接口

### ShowDischargeSetting() - 打开放电设置界面
- **描述**: 弹出放电设置窗口
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control ShowDischargeSetting
```

### HideDischargeSetting() - 关闭放电设置界面
- **描述**: 隐藏放电设置窗口
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control HideDischargeSetting
```

### SetWorkpieceId(workpieceId: int) - 设置当前工件号
- **描述**: 切换到指定工件编号
- **参数**:
  - `workpieceId`: 工件编号，范围 0-8
- **返回**: 无

```bash
# 切换到工件3
qdbus com.wirecut.service /com/wirecut/control SetWorkpieceId 3
```

### SetDischargePara(workpieceId, knifeId, paramType, value) - 设置放电参数
- **描述**: 设置指定工件、指定刀号的放电参数
- **参数**:
  - `workpieceId`: 工件编号 (0-8)
  - `knifeId`: 刀号 (1-11)
  - `paramType`: 参数类型字符串：
    - `"voltage"` / `"放电码"` - 放电码
    - `"current"` / `"跟踪值"` - 跟踪值
    - `"servo"` / `"速度"` - 速度上限
  - `value`: 参数值
- **返回**: 无

```bash
# 设置工件0，刀号1，放电码为80
qdbus com.wirecut.service /com/wirecut/control SetDischargePara 0 1 voltage 80
```

### GetDischargePara(workpieceId, knifeId, paramType) -> int - 获取放电参数
- **描述**: 获取指定工件、指定刀号的放电参数值
- **参数**: 同 SetDischargePara
- **返回**: 参数值

```bash
# 获取工件0，刀号1的放电码
qdbus com.wirecut.service /com/wirecut/control GetDischargePara 0 1 voltage
```

### CopyToAllWorkpieces() - 复制到所有工件
- **描述**: 将当前工件的放电参数复制到所有工件
- **参数**: 无
- **返回**: 无

```bash
qdbus com.wirecut.service /com/wirecut/control CopyToAllWorkpieces
```

---

## 7. 信号（推送通知）

DBus 服务会主动推送以下信号，外部程序可以监听：

### runStateChanged(state: int) - 运行状态变化
- **触发时机**: 运行状态改变时
- **参数**:
  - `state`: 0=停止 / 1=运行 / 2=暂停

### alarmMessage(type: int, msg: QString) - 报警/提示
- **触发时机**: 系统产生报警或提示时
- **参数**:
  - `type`: 0=提示 / 1=警告 / 2=错误
  - `msg`: 消息内容

### axisPosUpdated(x, y, z, u, v: double) - 轴位置刷新
- **触发时机**: 每 500ms 周期推送一次
- **参数**: 各轴当前位置 (mm)

### machiningFinished() - 加工完成
- **触发时机**: 加工程序执行完成时
- **参数**: 无

---

## 8. 状态码说明

### 运行状态码 (running 字段)

| 值 | 状态 | 说明 |
|----|------|------|
| 0 | 停止 | 未运行或已停止 |
| 1 | 运行中 | 正在加工 |
| 2 | 暂停 | 已暂停（变频） |

### 轴编号

| 值 | 轴 | 说明 |
|----|-----|------|
| 0 | X | X轴 |
| 1 | Y | Y轴 |
| 2 | Z | Z轴 |
| 3 | U | U轴 |
| 4 | V | V轴 |
| 5 | C | C轴 |

---

## 9. 命令行调用示例

### 完整加工流程

```bash
# 1. 查看当前状态
qdbus com.wirecut.service /com/wirecut/control getStatus

# 2. 加载 NC 文件（必须绝对路径）
qdbus com.wirecut.service /com/wirecut/control loadNC "/home/pi/sample.ngc"

# 3. 设置加工速度
qdbus com.wirecut.service /com/wirecut/control setSpeed 80

# 4. 开始加工
qdbus com.wirecut.service /com/wirecut/control startRun

# 5. 实时查看轴位置
qdbus com.wirecut.service /com/wirecut/control getAxisPos

# 6. 暂停加工
qdbus com.wirecut.service /com/wirecut/control pauseRun

# 7. 停止加工
qdbus com.wirecut.service /com/wirecut/control stopRun
```

### 空走测试流程

```bash
# 1. 回零
qdbus com.wirecut.service /com/wirecut/control homeAll

# 2. 开始空走（不放电）
qdbus com.wirecut.service /com/wirecut/control startKongZou

# 3. 停止空走
qdbus com.wirecut.service /com/wirecut/control stopKongZou
```

### Python 调用示例（使用 dbus-python）

```python
import dbus

# 连接系统总线
bus = dbus.SystemBus()

# 获取服务对象
obj = bus.get_object('com.wirecut.service', '/com/wirecut/control')
iface = dbus.Interface(obj, 'com.wirecut.IControl')

# 调用方法
status = iface.getStatus()
print("运行状态:", status['running'])
print("X轴位置:", status['pos_x'])

# 加载 NC 文件
iface.loadNC("/home/pi/test.ngc")

# 启动加工
iface.startRun()
```

---

## 10. 注意事项

### ⚠️ 重要提醒

1. **CNC 软件必须运行**
   - 所有 DBus 接口只有在 CNC 主程序启动后才能使用
   - 软件未启动时调用会返回 DBus 错误

2. **NC 文件路径必须为绝对路径**
   - `loadNC()` 的 path 参数必须使用完整绝对路径
   - 相对路径会导致加载失败

3. **速度设置范围**
   - 速度值范围：1-9999 mm/min
   - 超出范围会被截断或忽略

4. **System Bus 权限**
   - 服务运行在 System Bus 上，可能需要 root 权限
   - 普通用户调用可能需要配置 DBus 权限规则

5. **线程安全**
   - 所有接口调用都是异步队列执行（QueuedConnection）
   - 调用后不会阻塞，实际执行由主界面事件循环处理

6. **共享内存依赖**
   - 部分参数（电压、电流、位置）依赖共享内存
   - 共享内存未就绪时返回 0 或默认值

---

## 附录：DBus 权限配置

如果普通用户无法调用，需要在 `/etc/dbus-1/system.d/` 下添加权限配置文件 `com.wirecut.conf`：

```xml
&lt;!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"&gt;
&lt;busconfig&gt;
  &lt;policy user="pi"&gt;
    &lt;allow own="com.wirecut.service"/&gt;
    &lt;allow send_destination="com.wirecut.service"/&gt;
    &lt;allow receive_sender="com.wirecut.service"/&gt;
  &lt;/policy&gt;
  &lt;policy context="default"&gt;
    &lt;allow send_destination="com.wirecut.service"/&gt;
    &lt;allow receive_sender="com.wirecut.service"/&gt;
  &lt;/policy&gt;
&lt;/busconfig&gt;
```

---

**文档版本**: v1.0  
**生成日期**: 2026-05-20  
**对应源码**: `/usr/share/runf/wirecutdbus.h` / `wirecutdbus.cpp`
