ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一文搞懂系列——DBC数据库信号剖析规则及案例 [打印本页]

作者: 东湖之滨    时间: 2024-7-22 20:54
标题: 一文搞懂系列——DBC数据库信号剖析规则及案例

配景

迩来在项目中,同事遇到了一个dbc数据库剖析错误的题目:基于ekuiper 对can报文剖析,发实际际输出效果与预期差距较大。当时他第一反应是ekuiper的剖析规则有误,因此就没有跟踪下去了。因为之前我用过ekuiper的CAN报文剖析功能,是没有题目的。因此我更倾向于是他的dbc数据库有题目,于是研究了一下DBC文件剖析的规则,并实际验证。过程中也踩了一些坑,在此记载。盼望能资助到有必要的人。
DBC 数据库介绍

DBC是vector公司界说的can网络通讯文件格式。网上介绍的文章很多,有兴趣的朋友可以去搜索一下。本文的重要核心是剖析DBC信号部分,对于相干信息进行简略描述。
dbc文件一般包含了如下信息:
版本与新符号

这两个参数一般在文件的开头,tag为VERSION和NS_。此中VERSION可以为空或自界说,NS_一般固定,不必要修改。如下:
  1. VERSION ""
  2. NS_ :
  3.         NS_DESC_
  4.         CM_
  5.         BA_DEF_
  6.         BA_
  7.         VAL_
  8.         CAT_DEF_
  9.         CAT_
  10.         FILTER
  11.         BA_DEF_DEF_
  12.         EV_DATA_
  13.         ENVVAR_DATA_
  14.         SGTYPE_
  15.         SGTYPE_VAL_
  16.         BA_DEF_SGTYPE_
  17.         BA_SGTYPE_
  18.         SIG_TYPE_REF_
  19.         VAL_TABLE_
  20.         SIG_GROUP_
  21.         SIG_VALTYPE_
  22.         SIGTYPE_VALTYPE_
  23.         BO_TX_BU_
  24.         BA_DEF_REL_
  25.         BA_REL_
  26.         BA_DEF_DEF_REL_
  27.         BU_SG_REL_
  28.         BU_EV_REL_
  29.         BU_BO_REL_
  30.         SG_MUL_VAL_
复制代码
波特率

格式为BS_:
[baudrate:BTR1,BTR2]; 含义如下:

  1. BS_:
复制代码
网络节点的界说

格式为BU_: Nodename1 Nodename2 Nodename3 ……含义如下:。

  1. BU_:  EOCM_F_FO Dummy_FO
复制代码
报文帧的界说(重点)

格式为BO_ MessageId MessageName: MessageSize Transmitter含义如下:

  1. BO_ 1414 RVB_TVR_Debug2_FO: 7 EOCM_F_FO
复制代码
信号的界说(核心)

格式为:SG_ SignalName (SigTypeDefinition) : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver含义如下:

如下:界说了一个VBTOSLonPstn的普通讯号,它的起始值在bit7,长度为12。字节序为Motorola,有符号。因子为0.125,偏移为0。数值的范围为-256~255.875,单位是m,由Dummy_FO网络节点罗致。
  1. SG_ VBTOSLonPstn : 7|12@0- (0.125,0) [-256|255.875] "m"  Dummy_FO
复制代码
注解部分,特征部分,数值表部分在dbc文件中属于非必须部分,本文不再进一步介绍。综上所述,我们得到最小的dbc文件,后续基于该文件进行剖析。
  1. VERSION ""
  2. NS_ :
  3.         NS_DESC_
  4.         CM_
  5.         BA_DEF_
  6.         BA_
  7.         VAL_
  8.         CAT_DEF_
  9.         CAT_
  10.         FILTER
  11.         BA_DEF_DEF_
  12.         EV_DATA_
  13.         ENVVAR_DATA_
  14.         SGTYPE_
  15.         SGTYPE_VAL_
  16.         BA_DEF_SGTYPE_
  17.         BA_SGTYPE_
  18.         SIG_TYPE_REF_
  19.         VAL_TABLE_
  20.         SIG_GROUP_
  21.         SIG_VALTYPE_
  22.         SIGTYPE_VALTYPE_
  23.         BO_TX_BU_
  24.         BA_DEF_REL_
  25.         BA_REL_
  26.         BA_DEF_DEF_REL_
  27.         BU_SG_REL_
  28.         BU_EV_REL_
  29.         BU_BO_REL_
  30.         SG_MUL_VAL_
  31. BS_:
  32. BU_:  EOCM_F_FO Dummy_FO
  33. BO_ 1414 RVB_TVR_Debug2_FO: 7 EOCM_F_FO
  34. SG_ VBBrkCntlAccel : 45|12@0- (0.01,0) [-20.48|20.47] "m/s^2"  Dummy_FO SG_ VBTOSObjID : 35|6@0+ (1,0) [0|63] ""  Dummy_FO SG_ VBTOSTTC : 31|12@0+ (0.025,0) [0|102.375] "s"  Dummy_FO SG_ VBTOSLatPstn : 11|11@0- (0.125,0) [-128|127.875] "m"  Dummy_FO SG_ VBTOSLonPstn : 7|12@0- (0.125,0) [-256|255.875] "m"  Dummy_FO
复制代码
案例分析

根据上面的dbc文件,我们进行如下示例分析。向can0网卡发送数据 cansend can0 586#d465737400000000,ekuiper输出以下效果:
  1. [
  2.         {
  3.                 "VBBrkCntlAccel": 0,
  4.                 "VBTOSLatPstn": 87.125,
  5.                 "VBTOSLonPstn": -87.25,
  6.                 "VBTOSObjID": 0,
  7.                 "VBTOSTTC": 46.400000000000009
  8.         }
  9. ]
复制代码
我们实验通过对dbc数据库文件的理解进行分析,看看是否与ekuiper的盘算效果一致。在分析前,我们必要相识几点内容:
比如:二进制数11010100,若比特序为大端msb,则最高有效比特位在高位,最低有效比特位在低位,那么它代表的值为0xd4;若比特序为lsb,则最高有效比特位在低位,最低有效比特位在高位,那么它代表的值为0x2b。CAN 总线协议中规定,位序都是大端模式,即 msb

分析:




同样的dbc文件,若由CANdb++进行剖析,如下。可知Startbit与dbc文件不一致。因为CANdb++默认是Motorola_LSB表达方式

若我的内容对您有所资助,还请关注我的公众号。不定期分享干活,剖析案例,也可以一起讨论分享。
我的宗旨:
踩完您工作中的所有坑并分享给您,让你的工作无bug,人生尽是坦途。

总结

经过两天的查阅资料,以及咨询同事,算是熟悉了dbc数据库的剖析规则。盼望本篇文章,能够资助到各位小搭档。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4