技术分享roadmap • 2026-09-09
设备连接冲突恢复:拟议工程契约
为 CNC 断线后的串口所有权、控制器状态确认和管理员审批建立失败关闭的恢复契约。

目录索引▼
必须控制的故障
CNC 连接中断不只是网络错误。浏览器失去会话视图时,控制器可能仍处于运动、暂停、报警或等待输入状态;另一个进程也可能同时访问同一串口。因此,恢复契约必须采用失败关闭策略:
- 一个控制器会话只能由一个活动应用持有;
- 未确定的命令不能因为重连就被标记为完成;
- 重连事件本身不能授权运动;
- 任何经管理员批准的运动前,都必须重新读取工作坐标和模态状态。
不同操作系统对串口所有权的表现不同。“单一所有者”是应用层不变量,不是声称所有驱动都会以相同方式拒绝第二次打开。
恢复状态机
建议的状态顺序:
已连接
-> 链路过期
-> 暂停运动 / 操作员停止
-> 检查串口所有者
-> 无运动重连
-> 查询控制器状态
-> 比较会话检查点
-> 管理员批准或保持阻塞
每次状态转换都应写入驱动日志,并在 UI 中显示。超时应保持在阻塞状态,不能作为跳过检查的理由。
需要查询的状态
重新获得串口会话后,驱动应使用目标固件支持的协议查询控制器。对于 Grbl v1.1,接口文档描述了:
?:请求实时状态报告;$G:查询当前解析器模态状态;$#:查询保存的坐标参数,包括工作坐标偏移;!与~:实时暂停和恢复控制。
驱动必须在使用任何值前验证响应格式和固件身份。响应超时、报告格式错误、固件家族变化或与会话检查点不一致,都应让任务保持阻塞。
禁止自动执行的动作
第一阶段实现不得自动:
- 重放未知的在途命令;
- 假设最后一次确认的命令等于机器实际位置;
- 串口打开后立即发送 Cycle Start;
- 使用
$X绕过未解决的报警或安全条件; - 仅凭浏览器状态推断工作零点仍然有效;
- 把示例配置文件当作运行时真实来源。
如果链路中断期间机器发生了运动,软件不能通过浏览器时间戳重建真实位置。安全结果应是显示检查清单并要求操作员现场确认。
管理员审批清单
在批准恢复运动前,UI 应要求确认:
- 当前持有串口的进程;
- 控制器固件和当前状态;
- 工作坐标系和偏移量;
- 刀具、工件、夹具和安全高度;
- 管理员选择重新回零、重新设零、放弃任务还是重新开始。
实施边界
第一阶段应先交付状态模型、日志、阻塞恢复界面和只读控制器查询。命令重放、续切检查点和任何自动进给倍率控制,都需要单独的协议评审和真实硬件测试矩阵。在这些工作完成前,正确的工程行为是采用带人工确认的较慢恢复,而不是快速但不可信的自动续切。
