跳到主要内容

机器人诊断

生产现场机器人不动了、精度下降、报警爆出, 第一时间要能快速定位。Darra 集成了完整的诊断模块, 覆盖伺服状态关节健康通讯链路精度追溯日志审计五大维度。

调试哲学

Darra PLC 和机器人没有交互式调试器。异常时系统自动停机 + Q 区清零 + 日志输出 + 报警, 诊断手段只有在线监视 / 强制赋值 / 趋势图 / 日志 / 报警码

诊断面板总览

IDE → 诊断 → 机器人子面板, 可以实时看:

┌─────────── 机器人诊断 ───────────┐
│ 伺服状态 │ 关节健康 │ 通讯 │
├────────────┼──────────┼────────┤
│ 精度追溯 │ 报警列表 │ 日志 │
└────────────┴──────────┴────────┘

每个子页签独立刷新 10 Hz, 数据从 PLC 驱动的诊断共享内存直接读取, 不占用 PLC 周期。

伺服状态

字段说明正常范围报警阈值
ServoOn[i]第 i 轴伺服使能TRUE-
ServoReady[i]伺服就绪TRUEFALSE → 无法启动
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 循环失败周期内未收到 PDO0> 3 连续 → 总线故障
丢包率循环丢包 / 总循环0> 0.01% → 总线质量差
AL Status从站应用层状态OP (8)SafeOP (4) / PreOP (2) → 未激活
SDO 邮箱失败参数读写失败0> 5 / 小时 → 重接线

精度追溯

绝对定位精度

  1. 机器人回指定测试点 (用对点销对尖锥)
  2. 记录 20 次重复到位的坐标
  3. 计算均值偏差 (绝对精度) 和标准差 (重复精度)
  4. 对比出厂标定值
目标点: (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)

代码级别含义排查
1001Fatal伺服过流检查负载 / 短路
1002Fatal伺服过压制动电阻或电源
1003Fatal编码器丢失接线, 编码器电池
2001Error跟踪误差超限增益或负载问题
2002Error关节超限位反向 JOG 出来
2101Error奇异点不可逆解调整路径避开
3001ErrorEtherCAT 丢帧网线 / 从站状态
3002ErrorSDO 超时从站未进 OP
4001Warn关节温度高降速或休息
4002Warn编码器电池低换电池 (< 2.6V)
5001Info用户回 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]ENUMOK/WARN/FAIL
EtherCATStateENUMINIT/PREOP/SAFEOP/OP
LastAlarmCodeUDINT最新报警码
UptimeHoursUDINT机器人累计运行小时
TotalMoveDistanceLREAL各关节累计转动角 (用于保养预测)

排错流程示例

症状: 机器人走 MoveL 路径抖动

  1. 开趋势图, 监视 6 轴跟踪误差
  2. 抖动段哪个轴 FE 最大?
  3. 如果是 J4 / J5 / J6 → 腕奇异可能
  4. 切到 JOG 手动过同一段, 看是否奇异
  5. 奇异 → 调整路径绕开 (见 奇异点)
  6. 非奇异 → 检查 J4 伺服增益, 可能参数过冲

症状: 连续 3 次抓取失败

  1. 查程序执行日志, 看失败点位 TCP 坐标
  2. 对比成功 vs 失败的 TCP, 差 > 1 mm → 精度问题
  3. 查报警历史: 近 24 小时有无 2001 (跟踪误差) 或 4001 (温度)
  4. 调用精度追溯, 对比本周 vs 上周绝对精度
  5. 精度下降 → 保养 / 重标
  6. 精度正常 → 工装松动或视觉偏了 → 检查工件坐标系

最佳实践

  1. 常开诊断面板: 示教 / 生产时把诊断面板挂在第二屏
  2. 报警不要清掉就算完: 每条报警写简短处理记录, 累计下来是保养预判的依据
  3. 每周精度抽查: 10 分钟搞定, 发现精度下降前兆
  4. 关键变量录波: 对每个复杂运动配一个自动录波触发 (如 FE > 0.3° 自动录 4 秒)
  5. 日志归档: 每月归档到 MES, 保留 3 年 (追溯用)
  6. 不要强制赋值带到生产: 强制只用于调试, 上线前逐条清除
  7. 温度 / 电流趋势: 每月趋势图看一次, 对比上月是否恶化

相关文档