dbc或can协议里面Intel&Motorola格式

参考来源:https://blog.csdn.net/2301_79031315/article/details/134891935

1. CAN报文是Intel格式还是Motorola格式,只在单个信号跨字节时,解析才有区别。

​当一个信号的数据长度不跨字节的时候(相当于在一个字节内,或者说是can矩阵列表的一行,没有跨越两行),Intel 与 Motorola 两种格式的编码结果完全一样。

当一个信号的数据长度跨字节的时候(相当于在两个字节及以上,或者说是can矩阵列表的两行及以上,并没有说一定要把两行都占满),两者的编码结果出现了明显的不同。 Intel 实施的是信号数据的高位在can矩阵列表的高字节的高位,信号数据的低位在can矩阵列表的低字节的低位。而Motorolla格式相反,实施的是信号数据的高位在can矩阵列表低字节的高位,信号数据的低位在can矩阵列表的高字节低位。

CAN dbc 的编码格式有两种,Intel和Motorola,两者的区别仅仅在于数据的排序上。

CAN信号若是包含8个字节,Byte0到Byte7,每个字节有8个bit,也是0到7。从单个字节来讲,都是左边是高位MSB,右边是低位LSB。
LSB(Least Significant Bit)–最低有效位,LSB是一个二进制数字中的第0位(即最低位)
MSB(Most Significant Bit)–最高有效位,MSB是一个n位二进制数字中的n-1位(即最高位)
在这里插入图片描述

2. Intel 格式的数据,四个信号,layout如下图。

A_len_4 (startbit为 0,长度 4), 它的范围就是bit 0到bit3,
B_len_8 (startbit为 8,长度 8), 它的范围就是bit 8到bit15,
C_len_14 (startbit是16,长度14),它的范围就是bit16到bit29,
D_len_16 (startbit是32,长度16),它的范围就是bit32到bit47,

在这里插入图片描述
在这里插入图片描述

3. Motorola 格式的数据,四个信号,layout如下图。

A_len_4 (startbit为 0,长度 4), 它的范围就是bit 0到bit3,
B_len_8 (startbit为 8,长度 8), 它的范围就是bit 8到bit15,
C_len_14 (startbit是24,长度14),它的范围就是bit24到bit21,
D_len_16 (startbit是40,长度16),它的范围就是bit40到bit39,
在这里插入图片描述
在这里插入图片描述

4. 总结:

4.1 当一个信号的数据长度不跨can矩阵的行时候(也就是,一个信号的数据在can矩阵列表里面,能用一行装载的时候),Intel 与 Motorola 两种格式的编码结果完全一样。
单字节时,程序中结构体的定义都是从字节的低位到字节的高位。

4.2 当一个信号的数据长度跨can矩阵的行时候(也就是,一个信号的数据在can矩阵列表里面,需要用两行装载的时候),两者的编码结果出现了明显的不同:
跨字节时,Intel格式,消息里面的信号数据定义:信号的数据低字节放在can矩阵列表里面的低字节,信号的数据高字节放在can矩阵列表里面的高字节。
跨字节时,Motorola格式,消息里面的信号数据定义:信号的数据低字节放在can矩阵列表里面的高字节,信号的数据高字节放在can矩阵列表里面的低字节。

无论跨不跨字节,在can矩阵列表一行中,信号的数据低位放在can矩阵列表一行的低位,信号的数据高位放在can矩阵列表一行的高位。

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBC文件是CAN协议中常用的一种描述文件,用于描述CAN总线上的消息ID、信号、信号位等信息。解析DBC文件后,可以将其转换为可视化图片或表格,方便查看和分析CAN总线上的数据。以下是将DBC文件解析为可视化图片或表格的方法: 1. 使用CAN工具软件:市面上有很多支持解析DBC文件并生成可视化图片或表格的CAN工具软件,如CANoe、CANalyzer、Vector CANdb++等。这些软件可以将DBC文件导入到软件中,并且可以根据DBC文件中的定义生成相应的可视化界面,如信号的波形图、信号的状态表格等。 2. 使用脚本解析:可以使用Python等脚本语言读取DBC文件,并将其解析为可视化图片或表格。例如,使用Python可以使用cantools库读取DBC文件,并使用matplotlib库生成信号的波形图。 下面是使用Python将DBC文件解析为可视化图片的示例: ```python import cantools import matplotlib.pyplot as plt # 读取DBC文件 db = cantools.database.load_file('example.dbc') # 获取指定消息和信号的数据 msg = db.get_message_by_name('ExampleMessage') signal = msg.get_signal_by_name('ExampleSignal') data = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07] # 解析信号值 value = signal.decode(data) # 绘制信号的波形图 plt.plot(value) plt.xlabel('Time (s)') plt.ylabel('Value') plt.title('ExampleSignal waveform') plt.show() ``` 上述代码将读取名为`example.dbc`的DBC文件,获取名为`ExampleMessage`的消息和名为`ExampleSignal`的信号,并使用matplotlib库生成信号的波形图。 如果要将DBC文件解析为表格形式,可以使用Python或其他脚本语言读取DBC文件,并使用pandas等库生成相应的表格。例如,使用Python的pandas库可以将DBC文件中的消息和信号信息转换为表格形式: ```python import cantools import pandas as pd # 读取DBC文件 db = cantools.database.load_file('example.dbc') # 将DBC文件中的消息和信号信息转换为表格形式 msg_table = pd.DataFrame([msg.to_dict() for msg in db.messages]) signal_table = pd.DataFrame([signal.to_dict() for signal in db.signals]) # 输出表格 print(msg_table) print(signal_table) ``` 上述代码将读取名为`example.dbc`的DBC文件,将文件中的消息信息转换为一个名为`msg_table`的表格,将文件中的信号信息转换为一个名为`signal_table`的表格,并使用print函数输出这两个表格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值