跳到主要内容

FC0001 V2.0报错代码&SDO读取

项目信息
文档编号FC0001
文档版本Rev. 1.1
适用产品JxServo 模组
适用固件V2.0 及以上版本
语言简体中文
最后更新2026-06-24

本文说明通过 CANopen SDO 读取 JxServo 模组告警和故障信息的方法,并补充 0x80 + NodeID 紧急报文的解析方式。V2.0 版本的模组报错代码采用统一编码规则,因此同一个新版报错代码在不同模组上表示相同故障类型。不同产品或定制版本可能会根据功能配置屏蔽部分报错,或增加少量定制报错项,但已定义的报错代码含义保持一致。

本文以 R68LITE 项目故障表为例说明解析方式。该示例用于说明 V2.0 通用编码和 4 字节现场数据的解析方法,实际使用时应以对应产品发布资料为准。

定位到具体 V2.0 诊断 ID 后,如需继续确认触发条件、保护动作、清除方式和排查步骤,请参阅 FC0002 关节模组故障报警与保护逻辑教程

important

0x603F:00 读取的是当前活跃/实际发送的 CANopen 错误码。该值也会放在 0x80 + NodeID 紧急报文的 byte0..1。

0x4500:00 读取的是最近一次告警/故障的新版诊断 ID 低 16 位,也就是 [故障域][子项],更适合用于 V2.0 以后精确定位故障来源。

0x80 + NodeID 紧急报文除了错误码以外,还会携带严重度和 4 字节现场数据,可用于查看实际触发值、阈值、计数或状态标志。

1. 快速查找

1.1 读取方式对比

SDO 对象名称数据长度返回内容推荐用途
0x603F:00errorCode2 字节当前活跃/实际发送的错误码兼容旧版上位机、既有解析逻辑或只需要当前活跃故障分类的场景
0x4500:00currentErrorID2 字节最近一次告警/故障的新版诊断 ID 低 16 位 [故障域][子项]V2.0 新软件、售后诊断、日志记录和精确定位故障来源

0x603F:00 用于读取当前活跃或实际发送给主站的报错码;0x4500:00 用于读取最近一次告警/故障的新版报错码。若对应对象当前没有可读取的报错,返回值为 0x0000

1.2 推荐排查入口

目的优先使用说明
只想知道当前是否有活跃故障0x603F:00返回当前活跃/实际发送错误码,适合快速轮询
想定位最近一次具体故障来源0x4500:00返回新版诊断 ID 低 16 位,按故障域和子项定位
想查看触发现场值或阈值0x80 + NodeID 紧急报文byte4..7 携带 4 字节现场数据 context
收到旧兼容码后无法区分具体故障0x4500:00 + 产品故障表旧兼容码可能把多个新版故障折叠到同一分类
提示

如需调整故障项开关、清除覆盖或保存故障项,可通过 0x4500:01 写控制命令操作故障表。该功能不属于故障码读取流程,使用方法请参考 TN0002 CANopen 通信功能扩展说明

2. 故障码速查表

以下列出 R68LITE 示例配置中的 0x4500 返回值与完整 32 位故障 ID。不同模组或不同固件版本可能包含不同条目,应以对应产品发布资料为准。

完整 32 位故障 ID 可直接用于查询严重度;0x4500 只返回同一 ID 的低 16 位。

序号0x4500 返回值完整 32 位故障 ID严重度故障域说明
10x01000x02000100故障电源母线电压过高
20x01010x02000101故障电源母线电压过低
30x01020x03000102跳闸电源母线硬件过压跳闸
40x01030x03000103跳闸电源母线硬件过流跳闸
50x02000x02000200故障驱动软件过流
60x02010x03000201跳闸驱动U 相硬件过流跳闸
70x02030x03000203跳闸驱动V 相硬件过流跳闸
80x02040x01000204告警驱动驱动过温告警
90x02050x02000205故障驱动驱动过温故障
100x02060x03000206跳闸驱动U 相软件过流
110x02070x03000207跳闸驱动V 相软件过流
120x03020x01000302告警电机电机过温告警
130x03030x02000303故障电机电机过温故障
140x04000x03000400跳闸传感器编码器超时未更新
150x04010x01000401告警传感器编码器读取失败
160x04060x01000406告警传感器编码器状态告警
170x04070x02000407故障传感器编码器状态错误
180x04080x02000408故障传感器电流偏置校准失败
190x05000x02000500故障控制位置跟踪误差过大
200x05070x02000507故障控制速度跟踪误差过大
210x05080x02000508故障控制软件堵转
220x05090x01000509告警控制速度指令超出上限
230x050A0x0200050A故障控制飞车或超速保护
240x06000x01000600告警通信通信心跳丢失
250x06030x01000603告警通信CAN 通信 BusOff
260x07050x02000705故障安全正向光电限位超出
270x07060x02000706故障安全负向光电限位超出
280x07070x02000707故障安全正向软件限位超出
290x07080x02000708故障安全负向软件限位超出

3. SDO 查询帧格式

3.1 基本约定

以下示例以节点 ID 为 1 的设备为例:

  • 主站发送 COB-ID:0x600 + NodeID,即 0x601
  • 设备响应 COB-ID:0x580 + NodeID,即 0x581
  • SDO 读取命令字:0x40
  • 2 字节读取响应命令字:0x4B

3.2 读取当前活跃/实际发送报错码 0x603F:00

主站发送:

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

解析方式:

0x603F 当前错误码 = 0xHHLL

示例:

4B 3F 60 00 00 01 00 00

表示 0x603F = 0x0100。在 R68LITE 标准 CANopen 示例中,该值可直接按新版低 16 位解析为“母线电压过高”。部分产品线为了兼容旧上位机,可能会把多个新版故障折叠到同一个旧兼容码,具体见本文后面的兼容说明。

3.3 读取最近一次告警/故障码 0x4500:00

主站发送:

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 示例故障表解析,该值对应“驱动过温故障”。

4. 80+ID 紧急报文解析

4.1 报文格式

设备触发当前活跃的故障或跳闸时,会尝试发送一帧由 0x603F 驱动的紧急报文:

ID: 0x80 + NodeID
DLC: 8
Data: EC_L EC_H 00 SEV C0 C1 C2 C3

字段解析:

字节字段说明
byte0..1EC_L EC_H当前 0x603F 错误码,小端;EC_L 为低字节,EC_H 为高字节
byte200固定为 0x00
byte3SEV诊断严重度:0x02=故障,0x03=跳闸
byte4..7C0 C1 C2 C332 位现场数据 context,小端

4.2 现场数据 context 拆包

context 的通用拆包方式:

context = C0 + (C1 << 8) + (C2 << 16) + (C3 << 24)
low16 = C0 + (C1 << 8)
high16 = C2 + (C3 << 8)

如果某个字段按有符号 int16 解释,0x80000xFFFF 需要按二补码还原为负数。例如 0xFF38 应解析为 -200

常见缩放规则:

标记解析
x1原始整数值
x10原始整数值 ÷ 10
x100原始整数值 ÷ 100
x1000原始整数值 ÷ 1000
raw bits按位标志解释,不做数值缩放

4.3 发送规则

  1. 紧急报文只由当前活跃的 FLT/TRIP 级故障驱动,WARN 级告警不会通过该路径发送 80+ID 紧急报文。
  2. 当多个 FLT/TRIP 同时活跃时,当前时间戳最新的一条用于更新 0x603F 并尝试发送紧急报文。
  3. 同一故障在一次激活周期内最多上报一次;故障消失后再次触发,会重新具备上报条件。
  4. 若项目使用旧兼容映射且某个新版故障没有映射到 0x603F,该故障不会通过 80+ID 报文发送。

4.4 示例 1:母线过压

节点 ID 为 1,R68LITE 触发母线电压过高,实际母线电压 72.34 V,触发阈值 68.00 V。R68LITE 标准示例中 0x603F = 0x0100,严重度为 0x02

ID: 0x081
DLC: 8
Data: 00 01 00 02 42 1C 90 1A

解析:

错误码 = 0x0100 -> 母线电压过高
严重度 = 0x02 -> 故障
low16 = 0x1C42 = 7234 -> 72.34 V
high16 = 0x1A90 = 6800 -> 68.00 V

4.5 示例 2:母线硬件过流

节点 ID 为 1,触发母线硬件过流跳闸,比较器标志 bit0 置位:

ID: 0x081
DLC: 8
Data: 03 01 00 03 01 00 00 00

解析:

错误码 = 0x0103 -> 母线硬件过流跳闸
严重度 = 0x03 -> 跳闸
context = 0x00000001
bit0=1 -> IDC/母线电流比较器触发

5. V2.0 新版诊断 ID

5.1 32 位 ID 结构

设备内部使用 32 位诊断 ID:

[严重度][预留ID][故障域][子项]
1B 1B 1B 1B

0x4500:00 只返回后 2 字节:

[故障域][子项]
1B 1B

这意味着 0x4500:00 不直接返回严重度字段。需要严重度时,应优先看 80+ID 紧急报文的 byte3,或结合对应产品的诊断说明。

5.2 故障域定义

故障域名称说明
0x00系统参数、配置、内部状态等系统类问题
0x01电源母线电压、电源输入和母线硬件保护
0x02驱动功率驱动、驱动温度、相电流和驱动侧保护
0x03电机电机温度、电机观测和电机侧状态
0x04传感器编码器、电流采样、母线采样等传感器状态
0x05控制位置、速度、轨迹、设定点和运动控制状态
0x06通信心跳、指令流、CAN 通信等链路状态
0x07安全软件限制、限位、状态机安全保护
0x08应用标定、应用流程和应用层安全检查

6. R68LITE 80+ID 解析表

R68LITE 标准 CANopen 示例未使用旧兼容折叠映射,因此 80+ID 报文 byte0..1 与 0x4500 低 16 位一致,均为小端。例如新版码 0x0507 在报文中写作 07 05

6.1 会通过 80+ID 发送的 FLT/TRIP 项

新版码byte0..1byte3说明byte4..7 现场数据解析
0x010000 010x02母线电压过高low16/100=母线实际电压 V;high16/100=过压阈值 V
0x010101 010x02母线电压过低low16/100=母线实际电压 V;high16/100=欠压阈值 V
0x010202 010x03母线硬件过压跳闸事件直报项;当前参考实现未定义固定现场字段,通常按项目实现或 0 处理
0x010303 010x03母线硬件过流跳闸raw bits:bit0=IDC/母线电流比较器;bit1=V 相比较器;bit2=U 相比较器
0x020000 020x02软件过流通常按 int16 low/100=实际电流 A,high16/100=阈值 A
0x020101 020x03U 相硬件过流跳闸raw bits:bit2=U 相比较器触发;也可同时带 bit0/bit1 组合标志
0x020303 020x03V 相硬件过流跳闸raw bits:bit1=V 相比较器触发;也可同时带 bit0/bit2 组合标志
0x020505 020x02驱动过温故障low16/10=驱动温度 °C;high16/10=故障阈值 °C
0x020606 020x03U 相软件过流事件直报项;当前参考实现未定义固定现场字段,通常按项目实现或 0 处理
0x020707 020x03V 相软件过流事件直报项;当前参考实现未定义固定现场字段,通常按项目实现或 0 处理
0x030303 030x02电机过温故障low16/10=电机温度 °C;high16/10=故障阈值 °C
0x040000 040x03编码器超时未更新low16=连续错误次数;high16=接收超时计数低 16 位
0x040707 040x02编码器状态错误项目编码器状态字;当前 R68LITE 参考路径未定义固定拆包字段
0x040808 040x02电流偏置校准失败low16/1000=U 相偏置电压 V;high16/1000=V 相偏置电压 V
0x050000 050x02位置跟踪误差过大int16 low/1000=位置误差 rad;high16/1000=触发阈值 rad
0x050707 050x02速度跟踪误差过大low16/10=速度误差 rpm;high16/10=触发阈值 rpm
0x050808 050x02软件堵转low16/10=当前绝对速度 rpm;high16/10=当前绝对 Iq 电流 A
0x050A0A 050x02飞车或超速保护low16=当前绝对速度 rpm;high16=触发阈值 rpm
0x070505 070x02正向光电限位超出low16=正限位输入状态,1 表示触发;high16=0
0x070606 070x02负向光电限位超出low16=负限位输入状态,1 表示触发;high16=0
0x070707 070x02正向软件限位超出low16=原因位 reason_bitshigh16=状态位 status_bits
0x070808 070x02负向软件限位超出low16=原因位 reason_bitshigh16=状态位 status_bits

6.2 不会通过 80+ID 发送的 WARN 项

以下 R68LITE 条目严重度为 WARN,可通过 0x4500:00 或诊断日志看到故障类型,但不会由当前 0x603F 紧急报文路径发送 80+ID

新版码说明可用现场数据说明
0x0204驱动过温告警告警日志中可按 low16/10=驱动温度 °C,high16/10=告警阈值 °C 解释
0x0302电机过温告警告警日志中可按 low16/10=电机温度 °C,high16/10=告警阈值 °C 解释
0x0401编码器读取失败当前 R68LITE 参考路径未定义固定拆包字段
0x0406编码器状态告警当前 R68LITE 参考路径未定义固定拆包字段
0x0509速度指令超出上限告警日志中可按 int16 low=速度指令 rpm,high16=最大允许速度 rpm 解释
0x0600通信心跳丢失low16=距离最近 CAN 帧的时间 ms,high16=超时阈值 ms
0x0603CAN 通信 BusOffGD32 平台常用 context 记录 BusOff 次数;STM32 平台常用 low16=PSR 低 16 位,high16=ECR 低 16 位

7. 兼容码与新版码的关系

7.1 R68LITE 标准示例

0x603F 是当前活跃/实际发送的错误码。对 R68LITE 标准 CANopen 示例,0x603F 直接使用新版诊断 ID 的低 16 位,因此可按前面的故障码速查表解析。

7.2 旧兼容分类示例

部分产品线为了兼容旧上位机,会将多个新版故障折叠到同一个旧兼容分类。例如:

新版 0x4500 示例新版含义旧兼容分类示例
0x0100 / 0x0102母线电压过高 / 母线硬件过压跳闸0x0001 母线过压
0x0101母线电压过低0x0002 母线欠压
0x0205 / 0x0303驱动或电机过温故障0x0004 过温
0x0508软件堵转0x0008 堵转
0x0507速度跟踪误差过大0x0020 速度误差
0x0408电流偏置校准失败0x0400 电流采样异常
0x0500位置跟踪误差过大0x1000 位置误差

7.3 判断建议

如果收到的是旧兼容分类码,单靠 80+ID 报文 byte0..1 可能无法唯一判断具体新版故障项。此时应结合 0x4500:00、诊断日志或产品发布资料确认实际故障。

8. 上位机解析建议

  1. 需要追溯最近一次告警/故障或精确定位故障来源时,读取 0x4500:00
  2. 需要读取当前活跃/实际发送报错,或兼容旧版故障码和既有逻辑时,读取 0x603F:00
  3. 需要查看实际触发值、阈值、计数或标志位时,监听 0x80 + NodeID 紧急报文,并按本文的 byte4..7 解析 context
  4. 0x0000 表示对应对象当前无可读取的报错;读取 0x603F:00 时也可能表示该故障未配置兼容映射。
  5. 报文中的多字节数值均为小端,响应 LL HH 需要还原为 0xHHLL,现场数据 C0 C1 C2 C3 需要还原为 0xC3C2C1C0
  6. 对 R68LITE 标准示例,0x603F0x4500 的低 16 位一致;对使用旧兼容映射的产品,不建议只依赖 0x603F80+ID byte0..1 做精确定位。