如何解码 CANbus 的 DBC 定义?

How to decode this DBC definition of CANbus?

我写了一个 .DBC 文件解码器,效果很好。

但是当我添加一个新的硬件 D​​BC 时,对于以下消息,我的代码没有正确解码这些信号。这是 DBC 部分:

BO_ 2566852816 ERROR_INFO: 8 Vector__XXX
 SG_ Slot4_Error_Reserved : 62|7@0+ (1,0) [0|127] "" Vector__XXX
 SG_ Slot3_Error_Reserved : 46|7@0+ (1,0) [0|127] "" Vector__XXX
 SG_ Slot2_Error_Reserved : 30|7@0+ (1,0) [0|127] "" Vector__XXX
 SG_ Slot1_Error_Reserved : 14|7@0+ (1,0) [0|127] "" Vector__XXX
 SG_ Slot4_Error_State : 49|3@0+ (1,0) [0|7] "#" Vector__XXX
 SG_ Slot3_Error_State : 33|3@0+ (1,0) [0|7] "#" Vector__XXX
 SG_ Slot2_Error_State : 17|3@0+ (1,0) [0|7] "#" Vector__XXX
 SG_ Slot4_Error_Id : 55|6@0+ (1,0) [0|63] "#" Vector__XXX
 SG_ Slot3_Error_Id : 39|6@0+ (1,0) [0|63] "#" Vector__XXX
 SG_ Slot2_Error_Id : 23|6@0+ (1,0) [0|63] "#" Vector__XXX
 SG_ Slot1_Error_State : 1|3@0+ (1,0) [0|7] "#" Vector__XXX
 SG_ Slot1_Error_Id : 7|6@0+ (1,0) [0|63] "#" Vector__XXX

这是我收到的 ERROR_INFO 帧的字节:

04 00 08 00 0D 00 10 00

BMS大师这样解码,我觉得还不错:

Signal Decoded value
Slot2_Error_Reserved 0
Slot3_Error_Id 3
Slot4_Error_State 0
Slot3_Error_Reserved 0
Slot2_Error_State 0
Slot4_Error_Id 4
Slot4_Error_Reserved 0
Slot2_Error_Id 2
Slot1_Error_Reserved 0
Slot3_Error_State 2
Slot1_Error_Id 1
Slot1_Error_State 0

如果我们关注 Slot1_Error_State 的定义——又名 1|3@0+——这意味着:

按照我对DBC格式的理解,从第1位开始3位是无稽之谈。但这证明我错了。

我尝试解码这些值,我成功了,如下:

正如您在我的绘图上看到的,我得到的 ID 和状态与 bmsMaster 找到的相同。

但是,我费尽心思想了解这如何依赖于 DBC 包含的定义。

任何人都可以逐步解释如何应用我在问题开头谈到的两个规则,请问?

混淆来自于您的信号被定义为 big-endian。 当大端和小端混合时,我经常感到困惑。

如果您尝试可视化 Slot1_Error_State,它实际上应该从 Byte0 最低有效位开始(1,然后是 0)并在 Byte1 最高有效位结束:

我希望这样更有意义!