机器人诊断
生产现场机器人不动了、精度下降、报警爆出, 第一时间要能快速定位。Darra 集成了完整的诊断模块, 覆盖伺服状态、关节健康、通讯链路、精度追溯、日志审计五大维度。
Darra PLC 和机器人没有交互式调试器。异常时系统自动停机 + Q 区清零 + 日志输出 + 报警, 诊断手段只有在线监视 / 强制赋值 / 趋势图 / 日志 / 报警码。
诊断面板总览
IDE → 诊断 → 机器人子面板, 可以实时看:
┌─────────── 机器人诊断 ───────────┐
│ 伺服状态 │ 关节健康 │ 通讯 │
├────────────┼──────────┼────────┤
│ 精度追溯 │ 报警列表 │ 日志 │
└────────────┴──────────┴────────┘
每个子页签独立刷新 10 Hz, 数据从 PLC 驱动的诊断共享内存直接读取, 不占用 PLC 周期。
伺服状态
| 字段 | 说明 | 正常范围 | 报警阈值 |
|---|---|---|---|
| ServoOn[i] | 第 i 轴伺服使能 | TRUE | - |
| ServoReady[i] | 伺服就绪 | TRUE | FALSE → 无法启动 |
| PositionCmd[i] | 关节指令位置 | 范围内 | 超限 → 报警 |
| PositionAct[i] | 关节实际位置 | cmd ± 0.1° | 偏差过大 → 跟踪错误 |
| PositionErr[i] | 跟踪误差 | < 0.1° | > 0.5° 报警 |
| VelocityCmd[i] | 关节指令速度 | 范围内 | - |
| VelocityAct[i] | 实际速度 | cmd ± 5% | - |
| TorqueActual[i] | 实际力矩 | < 70% 额定 | > 90% 告警 |
| EncoderErrorCount[i] | 编码器通讯错误累计 | 0 | > 10 / 小时 → 检查 |
跟踪误差分析
跟踪误差 (Following Error, FE) = 指令位置 - 实际位置。FE 持续大说明:
- 伺服增益太低 → 调参 (Pp / Pi)
- 负载过重 → 加减加速或换机型
- 机械阻尼大 → 润滑 / 检修
- 加速度过大 → 减小
Acceleration
关节健康
关节温度
J1 温度: 45.3 °C [正常]
J2 温度: 78.2 °C [警告 > 70°C]
J3 温度: 68.5 °C [正常]
...
温度监控点: 伺服电机 + 减速器 + 刹车, 每个轴 1~3 个温度传感器。
| 温度 | 含义 | 应对 |
|---|---|---|
| < 60°C | 正常 | - |
| 60~70°C | 注意, 散热不良或负载偏大 | 降低速度或减小负载 |
| 70~85°C | 告警, 长期运行会降寿 | 停机散热 30 min |
| > 85°C | 报警, 立即停机 | 查原因 (润滑 / 风扇 / 负载) |
关节电流
实际电流 I 与额定电流 I_rated 比值:
| I / I_rated | 状态 | 说明 |
|---|---|---|
| < 30% | 轻载 | 正常空行程 |
| 30~70% | 中载 | 正常工作 |
| 70~100% | 重载 | 接近额定, 不可长时间 |
| > 100% | 过载 | 伺服限流, 动作变慢 |
| 连续 > 120% 2 秒 | 跳闸 | 报警停机 |
编码器健康
| 指标 | 正常 | 异常 |
|---|---|---|
| 通讯错误率 | 0 / 小时 | > 10 → 接线问题 |
| 电池电压 (绝对编码器) | > 3.0 V | < 2.6 V → 换电池 |
| 多圈计数偏差 | 0 | ≠ 0 → 编码器位置丢 |
| 零位标记偏差 | < 0.01° | > 0.05° → 重新回零 |
通讯链路
机器人与控制器之间走 EtherCAT 通讯, 诊断要看:
| 指标 | 说明 | 正常 | 报警 |
|---|---|---|---|
| WKC (Working Counter) | 从站响应次数 | 等于期望值 | 不匹配 → 从站掉线 |
| PDO 循环失败 | 周期内未收到 PDO | 0 | > 3 连续 → 总线故障 |
| 丢包率 | 循环丢包 / 总循环 | 0 | > 0.01% → 总线质量差 |
| AL Status | 从站应用层状态 | OP (8) | SafeOP (4) / PreOP (2) → 未激活 |
| SDO 邮箱失败 | 参数读写失败 | 0 | > 5 / 小时 → 重接线 |
精度追溯
绝对定位精度
- 机器人回指定测试点 (用对点销对尖锥)
- 记录 20 次重复到位的坐标
- 计算均值偏差 (绝对精度) 和标准差 (重复精度)
- 对比出厂标定值
目标点: (300, 0, 500)
均值到位: (300.15, 0.08, 500.22)
绝对精度: 0.27 mm
标准差: 0.024 mm (重复精度)
正常工业臂: 绝对精度 ±0.5 mm, 重复精度 ±0.05 mm。若偏大:
- 减速器磨损 → 刷新 DH 参数或返修
- 机械松动 → 紧固
- 温度漂移 → 预热 30 min 后重测
- 负载变化 → 重新配置工具质量
精度长期监控
IDE → 诊断 → 精度曲线, 持续记录每周一次的精度测试结果:
2026-01 绝对精度 0.18 mm
2026-02 绝对精度 0.22 mm
2026-03 绝对精度 0.35 mm <- 开始恶化
2026-04 绝对精度 0.72 mm <- 报警
连续 2 周精度下降 > 10% 就需要保养。
报警列表
报警分 4 级:
| 级别 | 说明 | 机器人反应 |
|---|---|---|
| Fatal | 致命 (过流 / 过压 / 位置丢) | 立即断电 |
| Error | 错误 (超限 / 通讯超时) | 停机 + 保持抱闸 |
| Warning | 警告 (温度高 / 电池低) | 继续运行 |
| Info | 信息 (用户操作记录) | 仅记录 |
常见报警码 (Darra 范围 1000~5999)
| 代码 | 级别 | 含义 | 排查 |
|---|---|---|---|
| 1001 | Fatal | 伺服过流 | 检查负载 / 短路 |
| 1002 | Fatal | 伺服过压 | 制动电阻或电源 |
| 1003 | Fatal | 编码器丢失 | 接线, 编码器电池 |
| 2001 | Error | 跟踪误差超限 | 增益或负载问题 |
| 2002 | Error | 关节超限位 | 反向 JOG 出来 |
| 2101 | Error | 奇异点不可逆解 | 调整路径避开 |
| 3001 | Error | EtherCAT 丢帧 | 网线 / 从站状态 |
| 3002 | Error | SDO 超时 | 从站未进 OP |
| 4001 | Warn | 关节温度高 | 降速或休息 |
| 4002 | Warn | 编码器电池低 | 换电池 (< 2.6V) |
| 5001 | Info | 用户回 Home | - |
报警支持触发截图 (保存前 2 秒的所有变量快照) 和录波 (触发前后 2 秒高速数据记录).
日志
示教器日志 (UI 操作审计)
记录所有示教器按键动作, 用于追溯"这个点是谁什么时候改的":
[2026-04-18 09:32:15] [INFO] [张三] 切换到 Robot1
[2026-04-18 09:32:22] [INFO] [张三] JOG 关节 J3+ 连续
[2026-04-18 09:32:45] [INFO] [张三] 记录点位 Pick_New
[2026-04-18 09:33:01] [WARN] [张三] 使能松开, 进入急停
[2026-04-18 09:33:30] [INFO] [李四] 解除急停
程序执行日志 (Runtime)
记录 PLC 程序运行流水:
[2026-04-18 14:20:01.123] [DEBUG] [Motion] MoveJ Home Done
[2026-04-18 14:20:02.543] [DEBUG] [Motion] MoveL Pick Done
[2026-04-18 14:20:02.544] [INFO ] [IO] DO[1] := TRUE (Gripper Close)
[2026-04-18 14:20:02.844] [DEBUG] [Motion] MoveL Pick_Approach Start
内核驱动日志 (DbgView)
底层驱动 DbgPrint 输出, 用 SysInternals DbgView.exe 接收. 过滤规则:
- Include:
DarraRT/ROBOT_/MOTION_ - Exclude:
HEARTBEAT
日志文件位置
| 日志 | 路径 |
|---|---|
| IDE 日志 | %AppData%/DarraPLC/logs/ide_*.log |
| Service 日志 | <Service.exe 同目录>/logs/service_*.log |
| 示教器日志 | %AppData%/DarraPLC/logs/pendant_*.log |
| 报警历史 | %AppData%/DarraPLC/alarms/history.db (SQLite) |
在线监视 / 强制赋值
替代交互调试的手段:
在线监视
IDE 变量监视 面板添加要看的变量 (包括机器人关节、TCP、IO), 实时显示数值和变化曲线. 不影响程序执行。
强制赋值 (Force)
用于调试: 强制某个变量为指定值, 不受程序控制:
Force DI[1] = TRUE // 模拟传感器信号, 测流程
Force SafetyOk = TRUE // 跳过安全检查 (仅调试, 不可用于生产)
强制状态在 IDE 里有明显标记 (红底黄字), 编译后自动清除 (除非勾选"保留强制")。
趋势图 (Trend)
记录任意变量时序曲线, 0.1~100 Hz 可选:
- 关节位置
- 跟踪误差
- 电流
- TCP 坐标
用于分析振动 / 抖动 / 滞后等动态问题。
诊断 API (SCL)
VAR
diag : ROBOT_DIAG;
END_VAR
ReadRobotDiag(Robot := Robot1, Diag := ADR(diag));
IF diag.JointTemp[2] > 75 THEN
ReduceSpeedOverride(Robot := Robot1, Override := 50); // 降速 50%
END_IF;
IF diag.LastAlarmCode <> 0 THEN
MES_ReportAlarm(AlarmCode := diag.LastAlarmCode);
END_IF;
参数表
| 参数 | 类型 | 说明 |
|---|---|---|
| JointTemp[6] | LREAL[6] | 关节温度 °C |
| JointCurrent[6] | LREAL[6] | 关节电流 A |
| TrackingError[6] | LREAL[6] | 跟踪误差 ° |
| EncoderHealth[6] | ENUM | OK/WARN/FAIL |
| EtherCATState | ENUM | INIT/PREOP/SAFEOP/OP |
| LastAlarmCode | UDINT | 最新报警码 |
| UptimeHours | UDINT | 机器人累计运行小时 |
| TotalMoveDistance | LREAL | 各关节累计转动角 (用于保养预测) |
排错流程示例
症状: 机器人走 MoveL 路径抖动
- 开趋势图, 监视 6 轴跟踪误差
- 抖动段哪个轴 FE 最大?
- 如果是 J4 / J5 / J6 → 腕奇异可能
- 切到 JOG 手动过同一段, 看是否奇异
- 奇异 → 调整路径绕开 (见 奇异点)
- 非奇异 → 检查 J4 伺服增益, 可能参数过冲
症状: 连续 3 次抓取失败
- 查程序执行日志, 看失败点位 TCP 坐标
- 对比成功 vs 失败的 TCP, 差 > 1 mm → 精度问题
- 查报警历史: 近 24 小时有无 2001 (跟踪误差) 或 4001 (温度)
- 调用精度追溯, 对比本周 vs 上周绝对精度
- 精度下降 → 保养 / 重标
- 精度正常 → 工装松动或视觉偏了 → 检查工件坐标系
最佳实践
- 常开诊断面板: 示教 / 生产时把诊断面板挂在第二屏
- 报警不要清掉就算完: 每条报警写简短处理记录, 累计下来是保养预判的依据
- 每周精度抽查: 10 分钟搞定, 发现精度下降前兆
- 关键变量录波: 对每个复杂运动配一个自动录波触发 (如 FE > 0.3° 自动录 4 秒)
- 日志归档: 每月归档到 MES, 保留 3 年 (追溯用)
- 不要强制赋值带到生产: 强制只用于调试, 上线前逐条清除
- 温度 / 电流趋势: 每月趋势图看一次, 对比上月是否恶化