Python 解析CAN报文数据
Can报文数据如果不借助Vector或者一些市面上其他的CAN工具来导入DBC文件去看的话,很难去知道对应的信号值是怎样,下面这个函数能根据DBC信息解析出一些相关的信号值,以便于我们来查看。
函数:def com_extract_signal(endian, bit_pos, bit_size, src_buf)
-
函数名:
com_extract_signal
-
参数:
endian
: 大小端
bit_pos
: 起始bit位
bit_size
: bit长度
src_buf
: 数据buffer -
返回值:信号值
函数实现:
def com_extract_signal(endian, bit_pos, bit_size, src_buf):
a_data = 0x00
byte_no = bit_pos // 8
if (((byte_no * 8) + 8) - bit_pos) <= bit_size:
total_bits_copied = ((byte_no * 8) + 8) - bit_pos
a_data = src_buf[byte_no] >> (bit_pos - (byte_no * 8))
else:
a_data = src_buf[byte_no] >> (bit_pos - (byte_no * 8))
a_data = a_data & (~(0xFF << bit_size))
total_bits_copied = bit_size
while total_bits_copied < bit_size:
bits_left = bit_size - total_bits_copied
if endian != big_endian:
byte_no += 1
else:
byte_no -= 1
if bits_left >= 8:
a_data = (src_buf[byte_no] << total_bits_copied) | a_data
total_bits_copied = total_bits_copied + 8
else:
a_data = ((src_buf[byte_no] & (0xFF >> (8 - bits_left))) << total_bits_copied) | a_data
total_bits_copied = total_bits_copied + bits_left
return a_data