V2.0报错代码&SDO读取
本文说明通过 CANopen SDO 读取 JxServo 模组告警和故障信息的方法。V2.0 版本的所有模组报错代码采用统一编码规则,因此同一个报错代码在不同模组上表示相同故障类型。不同产品或定制版本可能会根据功能配置屏蔽部分报错,或增加少量定制报错项,但已定义的报错代码含义保持一致。
本文以 R68LITE 项目故障表为例说明解析方式。该示例用于说明 V2.0 通用编码规则,实际使用时应以对应产品发布资料为准。
0x603F 读取的是厂家兼容性报错,用于兼容旧版主站、旧版客户软件或通用 CANopen 错误码显示。
0x4500 读取的是新版完整诊断 ID 的后 2 字节,也就是低 16 位 [故障域][子项],更适合用于 V2.0 以后精确定位故障来源。
读取对象
| SDO 对象 | 名称 | 数据长度 | 返回内容 | 推荐用途 |
|---|---|---|---|---|
0x603F:00 | errorCode | 2 字节 | 厂家兼容性报错 | 兼容旧版上位机、客户已有解析逻辑或只需要粗略故障分类的场景 |
0x4500:00 | currentErrorID | 2 字节 | 新版诊断 ID 的低 16 位 [故障域][子项] | V2.0 新软件、售后诊断、日志记录和精确故障定位 |
两个对象都返回最近一次告警或故障记录;若当前没有可读取的告警或故障,返回值为 0x0000。其中 0x603F 还会经过兼容映射,同一个兼容码可能对应多个新版故障项,因此不要用 0x603F 做精确故障区分。
SDO 帧格式
以下示例以节点 ID 为 1 的设备为例:
- 主站发送 COB-ID:
0x600 + NodeID,即0x601 - 设备响应 COB-ID:
0x580 + NodeID,即0x581 - SDO 读取命令字:
0x40 - 2 字节读取响应命令字:
0x4B
读取厂家兼容性报错 0x603F
主站发送:
ID: 0x601
DLC: 8
Data: 40 3F 60 00 00 00 00 00
设备响应:
ID: 0x581
DLC: 8
Data: 4B 3F 60 00 LL HH 00 00
解析方式:
兼容错误码 = 0xHHLL
示例:
4B 3F 60 00 04 00 00 00
表示 0x603F = 0x0004。该值是厂家兼容性报错,例如可用于兼容显示“过温”类故障,但它不是 V2.0 的完整故障分类。
读取新版错误 ID 低 16 位 0x4500
主站发送:
ID: 0x601
DLC: 8
Data: 40 00 45 00 00 00 00 00
设备响应:
ID: 0x581
DLC: 8
Data: 4B 00 45 00 LL HH 00 00
解析方式:
新版错误 ID 低 16 位 = 0xHHLL
高字节 HH = 故障域
低字节 LL = 子项
示例:
4B 00 45 00 05 02 00 00
表示 0x4500 = 0x0205,其中:
0x02表示驱动类故障。0x05表示该故障域下的第0x05个子项。- 按 R68LITE 示例故障表解析,该值对应“驱动过温故障”。
V2.0 错误 ID 结构
设备内部使用 32 位诊断 ID:
[严重度][预留ID][故障域][子项]
1B 1B 1B 1B
0x4500 只返回后 2 字节:
[故障域][子项]
1B 1B
这意味着 0x4500 不直接返回严重度字段。对于上位机显示和售后排查,通常用 0x4500 的故障域和子项即可定位问题类型;如需区分告警、故障或跳闸等级,应结合设备状态、日志或对应产品的诊断说明。
故障域定义
| 故障域 | 名称 | 说明 |
|---|---|---|
0x00 | 系统 | 参数、配置、内部状态等系统类问题 |
0x01 | 电源 | 母线电压、电源输入和母线硬件保护 |
0x02 | 驱动 | 功率驱动、驱动温度、相电流和驱动侧保护 |
0x03 | 电机 | 电机温度、电机观测和电机侧状态 |
0x04 | 传感器 | 编码器、电流采样、母线采样等传感器状态 |
0x05 | 控制 | 位置、速度、轨迹、设定点和运动控制状态 |
0x06 | 通信 | 心跳、指令流、CAN 通信等链路状态 |
0x07 | 安全 | 软件限制、限位、状态机安全保护 |
0x08 | 应用 | 标定、应用流程和应用层安全检查 |
R68LITE 示例故障表
以下列出 R68LITE 示例配置中的 0x4500 返回值与完整 32 位故障 ID,不包含具体触发阈值。不同模组或不同固件版本可能启用不同条目,应以对应产品发布资料为准。
完整 32 位故障 ID 可直接用于查询严重度;0x4500 只返回同一 ID 的低 16 位。
| 序号 | 0x4500 返回值 | 完整 32 位故障 ID | 严重度 | 故障域 | 说明 |
|---|---|---|---|---|---|
| 1 | 0x0100 | 0x02000100 | 故障 | 电源 | 母线电压过高 |
| 2 | 0x0101 | 0x02000101 | 故障 | 电源 | 母线电压过低 |
| 3 | 0x0102 | 0x03000102 | 跳闸 | 电源 | 母线硬件过压跳闸 |
| 4 | 0x0103 | 0x03000103 | 跳闸 | 电源 | 母线硬件过流跳闸 |
| 5 | 0x0200 | 0x02000200 | 故障 | 驱动 | 软件过流 |
| 6 | 0x0201 | 0x03000201 | 跳闸 | 驱动 | U 相硬件过流跳闸 |
| 7 | 0x0203 | 0x03000203 | 跳闸 | 驱动 | V 相硬件过流跳闸 |
| 8 | 0x0204 | 0x01000204 | 告警 | 驱动 | 驱动过温告警 |
| 9 | 0x0205 | 0x02000205 | 故障 | 驱动 | 驱动过温故障 |
| 10 | 0x0206 | 0x03000206 | 跳闸 | 驱动 | U 相软件过流 |
| 11 | 0x0207 | 0x03000207 | 跳闸 | 驱动 | V 相软件过流 |
| 12 | 0x0302 | 0x01000302 | 告警 | 电机 | 电机过温告警 |
| 13 | 0x0303 | 0x02000303 | 故障 | 电机 | 电机过温故障 |
| 14 | 0x0400 | 0x03000400 | 跳闸 | 传感器 | 编码器超时未更新 |
| 15 | 0x0401 | 0x01000401 | 告警 | 传感器 | 编码器读取失败 |
| 16 | 0x0406 | 0x01000406 | 告警 | 传感器 | 编码器状态告警 |
| 17 | 0x0407 | 0x02000407 | 故障 | 传感器 | 编码器状态错误 |
| 18 | 0x0408 | 0x02000408 | 故障 | 传感器 | 电流偏置校准失败 |
| 19 | 0x0500 | 0x02000500 | 故障 | 控制 | 位置跟踪误差过大 |
| 20 | 0x0507 | 0x02000507 | 故障 | 控制 | 速度跟踪误差过大 |
| 21 | 0x0508 | 0x02000508 | 故障 | 控制 | 软件堵转 |
| 22 | 0x0509 | 0x01000509 | 告警 | 控制 | 速度指令超出上限 |
| 23 | 0x050A | 0x0200050A | 故障 | 控制 | 飞车或超速保护 |
| 24 | 0x0600 | 0x02000600 | 故障 | 通信 | 通信心跳丢失 |
| 25 | 0x0603 | 0x01000603 | 告警 | 通信 | CAN 通信 BusOff |
| 26 | 0x0705 | 0x02000705 | 故障 | 安全 | 正向光电限位超出 |
| 27 | 0x0706 | 0x02000706 | 故障 | 安全 | 负向光电限位超出 |
| 28 | 0x0707 | 0x02000707 | 故障 | 安全 | 正向软件限位超出 |
| 29 | 0x0708 | 0x02000708 | 故障 | 安全 | 负向软件限位超出 |
兼容码与新版码的关系
0x603F 是兼容输出,适合旧软件继续使用。例如某些兼容协议会把多个新版故障项折叠成同一个传统分类:
新版 0x4500 示例 | 新版含义 | 0x603F 兼容分类示例 |
|---|---|---|
0x0100 | 母线电压过高 | 0x0001 母线过压 |
0x0101 | 母线电压过低 | 0x0002 母线欠压 |
0x0205 / 0x0303 | 驱动或电机过温故障 | 0x0004 过温 |
0x0508 | 软件堵转 | 0x0008 堵转 |
0x0507 | 速度跟踪误差过大 | 0x0020 速度误差 |
0x0400 / 0x0401 | 编码器相关异常 | 0x0100 编码器异常 |
0x0500 | 位置跟踪误差过大 | 0x1000 位置误差 |
兼容码的具体覆盖范围可能随客户协议或产品线调整。新项目或新软件建议优先读取 0x4500,并仅把 0x603F 作为兼容显示字段。
上位机解析建议
- 新版上位机或自研主站建议优先读取
0x4500:00。 - 若需要兼容旧版故障码或客户已有逻辑,再读取
0x603F:00。 0x0000表示当前无可读取的告警或故障;读取0x603F时也可能表示该故障未配置兼容映射。- 报文中的多字节数值均为小端,响应
LL HH需要还原为0xHHLL。 - 不建议只依赖
0x603F做精确定位;需要区分具体故障来源时,应使用0x4500。