Files
test_demo/MX-PD-盘古 - new/PanGu.DieBonderApp/plans/motion-safety-plan.md
Shi.Ji e31d3560bb 添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
2026-05-18 11:43:09 +08:00

13 KiB
Raw Blame History

Motion 安全检查设计稿

1. 目标

围绕 MainShell/Motion/SafeAxisMotion.csMainShell/Motion/MotionController.csMainShell/Motion/StagePlatformMotionService.cs 建立一套统一的运动前安全检查方案,在不破坏现有分层的前提下,为后续代码实现提供明确设计依据。

本设计稿目标如下:

  • 所有真实运动入口具备统一前置安全检查能力
  • 单轴底线检查 设备级互锁检查 机构专属检查边界清晰
  • 多轴联动在下发前完成组合安全判定
  • 失败处理方式统一,包括阻断 联停 告警 日志
  • 为后续切换到 code 模式提供实现蓝图

2. 当前代码结构观察

2.1 现有职责

当前主要调用链如下:

当前各层职责已经基本成形:

层级 当前职责 对应文件
机构动作层 组织业务动作 组装联动请求 MainShell/Motion/StagePlatformMotionService.cs
安全运动调度层 统一封装单轴 多轴运动 失败联停 告警上报 MainShell/Motion/SafeAxisMotion.cs
轴控制层 下发运动命令 轴状态校验 软限位检查 超时控制 MainShell/Motion/MotionController.cs
参数速度层 速度参数应用 MainShell/Motion/AxisSpeedManager.cs

2.2 当前已有安全基础

现有代码中已经具备一些底层安全能力:

说明当前系统并不是没有安全设计,而是还缺少统一的运动前安全检查编排层


3. 设计原则

3.1 分层原则

3.2 收口原则

所有真实发运动命令的入口,后续应尽可能统一经过:

3.3 组合判定优先原则

多轴动作必须先整体检查,再启动任意一根轴,避免出现部分轴已开始移动、剩余轴检查失败的情况。

3.4 检查结果结构化原则

后续检查结果不应只返回 true 或 false而应具备规则名、层级、失败原因、影响轴、是否报警、恢复建议等结构化信息。


4. 安全检查分层方案

4.1 第一层 轴级底线检查

定位

用于保证单轴命令发出前的最低安全边界,不承载设备业务语义。

放置位置

检查项

检查项 说明 当前状态
轴对象存在 防止空引用和未初始化轴 已部分具备
Axis.State 可用 保证状态读取有效 已具备
Servo 已上电 禁止断使能运动 已具备
无 ALM ServoFault EMG 禁止故障状态运动 已具备
CanMove 为 true 禁止当前状态不允许运动 已具备
目标在软限位内 防止目标超行程 已具备
超时参数合法 防止非法等待参数 已具备
驱动返回码正常 命令下发失败立即阻断 已具备

不建议放入的规则

  • 安全门
  • 总急停整机状态
  • 气缸或相机回避
  • 多轴组合碰撞
  • 流程阶段判断
  • 自动手动模式权限

这些都超出了单轴控制器边界。


4.2 第二层 设备级互锁检查

定位

这是后续“每次运动前统一安全检查”的核心层。

放置位置

建议以后仍然由 SafeAxisMotion 作为总入口,但将检查逻辑进一步抽象为专门组件,例如:

  • MotionSafetyChecker
  • IMotionSafetyPolicy
  • IMotionPrecheck
  • MotionInterlockService

典型检查项

检查项 说明 建议失败处理
总急停已释放 整机急停未复位时禁止运动 阻断 + 可报警
安全门状态允许 门打开时禁止危险动作 阻断 + 可报警
当前模式允许该动作 自动 手动 调试权限控制 阻断
当前流程状态允许运动 防止流程中非法插入动作 阻断
关键气缸在安全位 防止机构干涉 阻断 + 可报警
真空 夹持 吸附状态满足要求 防止掉料 空跑 阻断
危险机构已退出 防止碰撞 阻断 + 可报警
同组互斥对象未占用 防止并发冲突 阻断
当前速度模式满足安全约束 危险段使用安全速度 阻断或降级

设计要求

  • 必须在真正调用 MotionController.MoveAbsAsync() 前完成
  • 应支持单轴与多轴动作共用
  • 应支持和报警系统集成
  • 应支持基于模式和场景动态组合规则

4.3 第三层 多轴组合检查

定位

用于解决单轴单独都合法,但组合动作整体不安全的问题。

放置位置

优先放在 SafeAxisMotion.SafeMoveAsync() 所在层。

对于明显属于某机构专属姿态约束的规则,也可先由机构服务层做第一轮检查。

典型检查项

检查项 说明 建议归属
多轴请求中无重复轴 防止一个批次对同一轴下多个目标 安全运动层
多轴组合目标整体可达 防止单轴都合法但整体姿态不合法 安全运动层
多轴目标不引发机械碰撞 防止联动过程干涉 安全运动层
联动姿态变化量不超限 防止平台受力异常或姿态突变 机构层或安全运动层
是否需要先中转位再联动 防止直接走位不安全 机构层

重点建议

StagePlatformMotionService.MovePlaneAsync() 这类三轴联动动作,后续一定要先做整体姿态检查,再交给 SafeAxisMotion.SafeMoveAsync() 发命令。


4.4 第四层 机构工艺检查

定位

只对某类业务动作成立的前置条件,不应做成全局通用规则。

放置位置

典型检查项

检查项 说明
平台三点高度差不超限 防止平台姿态异常
平移前已抬安全高度 防止横移干涉
对位前光学条件准备完成 防止动作无效
BondHead 或相机已回避 防止机构碰撞
顶针 吸嘴 工装在安全位 防止治具干涉
当前工艺阶段允许该动作 保证流程一致性
工件状态正确 防止空跑 掉料 误动作

5. 推荐调用链方案

flowchart TD
    A[业务动作入口] --> B[机构服务前置检查]
    B --> C[统一安全运动入口]
    C --> D[构建运动检查上下文]
    D --> E[设备级互锁检查]
    E --> F[多轴组合检查]
    F --> G[单轴底线检查]
    G --> H[下发运动命令]
    H --> I[等待完成 取消 超时]
    I --> J[失败联停 告警 日志]

5.1 业务动作入口

例如:

职责:

  • 表达动作意图
  • 先做机构专属前置条件判断
  • 组装单轴或多轴请求
  • 调用统一安全运动入口

5.2 统一安全运动入口

例如:

职责:

  • 解析请求
  • 构建上下文
  • 执行设备级与组合级前置检查
  • 通过后调用 MotionController
  • 失败时统一联停 告警 日志

5.3 单轴命令执行入口

例如:

职责:

  • 轴底线校验
  • 下发命令
  • 超时与取消控制
  • 返回结构化结果

6. 推荐检查执行顺序

建议后续严格固定顺序,避免规则散落。

步骤 1 机构动作前置检查

适用于业务动作服务,例如平台动作先检查:

  • 是否需要先走安全高度
  • 目标姿态是否合法
  • 当前流程状态是否允许

步骤 2 设备级互锁检查

统一检查:

  • 总急停
  • 安全门
  • 关键气缸
  • 回避状态
  • 模式权限
  • 关键资源占用

步骤 3 多轴组合检查

统一检查:

  • 多轴目标是否冲突
  • 联动是否越界
  • 是否需要分步走位
  • 是否存在组合干涉

步骤 4 单轴底线检查

MotionController 执行:

  • Servo
  • Alarm
  • CanMove
  • 软限位
  • 超时与驱动返回码

步骤 5 发命令与结果收敛

调用底层轴执行,并在失败时统一:

  • 联停
  • 告警
  • 日志记录

7. 建议的数据模型

本节不是要求立刻编码,而是后续实现时建议统一抽象。

7.1 运动检查上下文

建议未来形成类似 MotionCheckContext 的概念,字段建议包括:

字段 说明
Operation MoveAbs MoveRel Home Jog
Axis 当前目标轴
AxisName 轴名称
CurrentPosition 当前位
TargetPosition 目标位
Distance 相对位移
RelatedAxes 关联轴集合
Requests 当前批量请求
Mode 自动 手动 调试
Source 调用来源或动作名
NeedAlarm 是否需要报警
TimeoutMilliseconds 超时配置

7.2 检查结果模型

建议未来形成类似 MotionCheckResult 的概念。

字段 说明
IsPassed 是否通过
RuleName 规则名称
Layer 规则所属层级
Severity Block 或 Warning
Message 失败描述
AxisNames 影响轴
AlarmId 可选报警编号
RecoveryHint 建议恢复方式

7.3 检查规则接口方向

建议未来每条规则抽象成统一接口,例如:

  • IMotionPrecheck
  • IMotionSafetyRule

每条规则只负责一件事,统一输入上下文,统一输出结果。


8. 失败处理策略

后续所有安全检查与运动失败,建议统一为三类处理级别。

级别 说明 典型场景
Block 阻断但不联停 发命令前检查失败
StopAndBlock 先停止相关轴再阻断 多轴动作中途失败
AlarmAndBlock 报警并阻断 急停 门禁 危险机构未回避

结合现有能力:


9. 对当前各文件的未来职责建议

9.1 MainShell/Motion/MotionController.cs

保持职责

  • 单轴命令执行
  • 底线安全检查
  • 超时控制
  • 结果封装

不建议新增

  • 安全门判断
  • 气缸互锁判断
  • 工艺流程阶段判断
  • 平台姿态判断
  • 多轴组合碰撞判断

9.2 MainShell/Motion/SafeAxisMotion.cs

强化为统一前置安全入口

未来建议增加:

  • 前置检查编排
  • 单轴与多轴统一安全上下文构建
  • 设备级互锁检查
  • 多轴组合检查
  • 失败等级处理策略

保持现有优势

  • 单轴与多轴入口已经集中
  • 已具备联停能力
  • 已具备报警对接能力
  • 已具备日志挂接点

9.3 MainShell/Motion/StagePlatformMotionService.cs

保留机构业务语义

未来建议这里承担:

  • 平台类动作专属规则
  • 姿态约束
  • 安全中转位策略
  • 业务前置条件

而不是直接下沉到轴控制层。

9.4 MainShell/Motion/AxisSpeedManager.cs

可扩展为安全速度策略辅助层

例如未来用于:

  • 危险区动作自动切安全速度
  • 根据模式切换速度模板
  • 高风险动作限制加速度和 jerk

但它不应承担互锁判断主责。


10. 分阶段实施计划

阶段 A 规则清单固化

先在设计层确认:

  • 哪些规则为全局必检
  • 哪些规则为机构专属
  • 哪些规则为阻断型
  • 哪些规则为报警型
  • 哪些规则仅提示

阶段 B 入口收口检查

确认项目内是否存在绕过 SafeAxisMotion 直接调用轴对象的路径。

如果有,后续应逐步迁移,避免统一检查失效。

阶段 C 上下文模型抽象

统一后续所有检查的输入对象,避免每条规则自行拼接所需数据。

阶段 D 先实现高价值规则

优先顺序建议:

  1. 总急停
  2. 安全门
  3. Servo 和 Alarm
  4. 软限位
  5. 危险机构回避
  6. 多轴组合越界

阶段 E 再补机构专属规则

例如:

  • 平台三点姿态约束
  • 安全高度
  • 中转位策略
  • 工装占位状态

11. 需要优先确认的规则清单

后续若进入详细实现设计,建议优先由业务方或设备调试方确认以下问题:

主题 需要确认的问题
急停 是否整机任何运动都必须检查总急停
安全门 手动模式是否允许门开点动
模式权限 自动 手动 调试的运动权限边界
危险区 哪些机构组合构成机械干涉
平台联动 Z7 Z8 Z9 姿态变化允许范围
中转位 哪些动作必须先走安全位再到目标位
报警策略 哪些检查失败必须报警 哪些只阻断
速度策略 哪些动作需要强制安全速度

这些内容越早明确,后续实现越稳定。


12. 最终设计结论

本设计稿的结论如下:

  1. MotionController 继续承担单轴底线检查与命令执行职责
  2. SafeAxisMotion 应演进为统一的运动前安全检查编排入口
  3. 多轴联动必须先做组合安全检查,再统一下发命令
  4. StagePlatformMotionService 这类机构服务负责工艺专属前置条件
  5. AxisSpeedManager 可作为安全速度策略辅助组件,但不承载主互锁逻辑
  6. 后续实现宜采用 规则接口 + 上下文对象 + 分层编排 的方式推进,而不是在各处零散追加 if 判断

该方案兼顾了现有代码结构、现场可维护性与后续扩展性,适合作为下一阶段实现设计的基础文档。