12 KiB
12 KiB
线切割控制系统 DBus 接口说明文档
基本信息
| 项目 | 值 |
|---|---|
| 服务名 | com.wirecut.service |
| 对象路径 | /com/wirecut/control |
| 接口名 | com.wirecut.IControl |
| 总线类型 | System Bus(系统总线) |
| 设计用途 | 供"小龙虾"等外部程序对接线切割控制系统 |
目录
1. 运动控制接口
startRun() - 启动加工
- 描述: 启动加工程序,等价于点击界面"运行"按钮
- 参数: 无
- 返回: 无
# 启动加工
qdbus com.wirecut.service /com/wirecut/control startRun
stopRun() - 停止加工
- 描述: 停止当前加工,等价于点击"停止"按钮
- 参数: 无
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control stopRun
pauseRun() - 暂停加工
- 描述: 暂停加工(变频),等价于点击"变频暂停"
- 参数: 无
- 返回: 无
qdbus mock_qdbus.py com.wirecut.service /com/wirecut/control pauseRun
homeAll() - 全轴回零
- 描述: 所有轴执行回零操作
- 参数: 无
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control homeAll
startKongZou() - 开始空走
- 描述: 启动空走模式(不放电测试)
- 参数: 无
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control startKongZou
stopKongZou() - 停止空走
- 描述: 停止空走模式
- 参数: 无
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control stopKongZou
2. 加工参数接口
setSpeed(speed: int) -> int - 设置加工速度
- 描述: 设置加工速度
- 参数:
speed: 速度值,单位 mm/min,范围 1-9999
- 返回: 实际设置的速度值
qdbus com.wirecut.service /com/wirecut/control setSpeed 80
getSpeed() -> int - 获取设定速度
- 描述: 获取当前设定的加工速度
- 参数: 无
- 返回: 设定速度值 (mm/min)
qdbus com.wirecut.service /com/wirecut/control getSpeed
setVoltage(vol: int) - 设置放电电压
- 描述: 设置放电电压值
- 参数:
vol: 电压值
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control setVoltage 90
setCurrent(cur: int) - 设置放电电流
- 描述: 设置放电电流值
- 参数:
cur: 电流值
- 返回: 无
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) |
qdbus com.wirecut.service /com/wirecut/control getStatus
getAxisPos() -> QString - 获取各轴位置
- 描述: 轻量级接口,获取各轴当前位置
- 参数: 无
- 返回:
"x,y,z,u,v"格式字符串,保留3位小数,单位 mm
qdbus com.wirecut.service /com/wirecut/control getAxisPos
# 返回示例: "10.500,20.321,0.000,0.123,0.000"
isRunning() -> bool - 是否正在加工
- 描述: 查询是否处于加工状态
- 参数: 无
- 返回: true=运行中 false=已停止
qdbus com.wirecut.service /com/wirecut/control isRunning
isHomed() -> bool - 是否已回零
- 描述: 查询是否已完成回零
- 参数: 无
- 返回: true=已回零 false=未回零
qdbus com.wirecut.service /com/wirecut/control isHomed
4. NC 文件操作接口
loadNC(path: QString) -> bool - 加载 NC 文件
- 描述: 加载 NC 程序文件
- 参数:
path: NC 文件的绝对路径
- 返回: true=成功 false=失败
qdbus com.wirecut.service /com/wirecut/control loadNC "/home/user/test.ngc"
getCurrentNC() -> QString - 获取当前 NC 文件
- 描述: 获取当前已加载的 NC 文件路径
- 参数: 无
- 返回: NC 文件路径
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
- 返回: 无
# 清除 X 轴工件坐标
qdbus com.wirecut.service /com/wirecut/control clearAxisOffset 0
clearAllAxisOffset() - 清除所有轴工件坐标
- 描述: 清除全部6个轴的工件坐标偏移
- 参数: 无
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control clearAllAxisOffset
6. 放电设置接口
ShowDischargeSetting() - 打开放电设置界面
- 描述: 弹出放电设置窗口
- 参数: 无
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control ShowDischargeSetting
HideDischargeSetting() - 关闭放电设置界面
- 描述: 隐藏放电设置窗口
- 参数: 无
- 返回: 无
qdbus com.wirecut.service /com/wirecut/control HideDischargeSetting
SetWorkpieceId(workpieceId: int) - 设置当前工件号
- 描述: 切换到指定工件编号
- 参数:
workpieceId: 工件编号,范围 0-8
- 返回: 无
# 切换到工件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: 参数值
- 返回: 无
# 设置工件0,刀号1,放电码为80
qdbus com.wirecut.service /com/wirecut/control SetDischargePara 0 1 voltage 80
GetDischargePara(workpieceId, knifeId, paramType) -> int - 获取放电参数
- 描述: 获取指定工件、指定刀号的放电参数值
- 参数: 同 SetDischargePara
- 返回: 参数值
# 获取工件0,刀号1的放电码
qdbus com.wirecut.service /com/wirecut/control GetDischargePara 0 1 voltage
CopyToAllWorkpieces() - 复制到所有工件
- 描述: 将当前工件的放电参数复制到所有工件
- 参数: 无
- 返回: 无
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. 命令行调用示例
完整加工流程
# 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
空走测试流程
# 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)
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. 注意事项
⚠️ 重要提醒
-
CNC 软件必须运行
- 所有 DBus 接口只有在 CNC 主程序启动后才能使用
- 软件未启动时调用会返回 DBus 错误
-
NC 文件路径必须为绝对路径
loadNC()的 path 参数必须使用完整绝对路径- 相对路径会导致加载失败
-
速度设置范围
- 速度值范围:1-9999 mm/min
- 超出范围会被截断或忽略
-
System Bus 权限
- 服务运行在 System Bus 上,可能需要 root 权限
- 普通用户调用可能需要配置 DBus 权限规则
-
线程安全
- 所有接口调用都是异步队列执行(QueuedConnection)
- 调用后不会阻塞,实际执行由主界面事件循环处理
-
共享内存依赖
- 部分参数(电压、电流、位置)依赖共享内存
- 共享内存未就绪时返回 0 或默认值
附录:DBus 权限配置
如果普通用户无法调用,需要在 /etc/dbus-1/system.d/ 下添加权限配置文件 com.wirecut.conf:
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy user="pi">
<allow own="com.wirecut.service"/>
<allow send_destination="com.wirecut.service"/>
<allow receive_sender="com.wirecut.service"/>
</policy>
<policy context="default">
<allow send_destination="com.wirecut.service"/>
<allow receive_sender="com.wirecut.service"/>
</policy>
</busconfig>
文档版本: v1.0
生成日期: 2026-05-20
对应源码: /usr/share/runf/wirecutdbus.h / wirecutdbus.cpp