发表评论
我们可以使用Python-can库直接接收或者发送报文信息,下面以实车报文信息为例。通过此代码,可以实时接收整车CAN上的报文信息,用于其他需求。
import time import can from can.bit_timing import BitTimingFd def send_fd_test(): #首先基于CAN协议设置波特率,此处设置的为CANFD数据的波特率参数 timingFD = BitTimingFd( f_clock=24000000, #时钟频率 nom_brp=3, #仲裁场分频系数 nom_tseg1=13, #仲裁场TSeg1 nom_tseg2=2, #仲裁场TSeg2 nom_sjw=1, #仲裁场同步跳变宽度 data_brp=2, #数据场分频系数 data_tseg1=4, #数据场TSeg1 data_tseg2=1, #数据场TSeg2 data_sjw=1 #数据场同步跳变宽度 ) #实例化CAN总线bus1,使用PCAN接收和发送CANFD数据 bus1 = can.interface.Bus(channel='PCAN_USBBUS1',interface='pcan',fd=True,timing=timingFD) #实例化发送的报文消息 msg1 = can.Message(timestamp=0,arbitration_id=0x124,data=[1,0,15,0,1,3,1,4,9,8,8,9,10,11,12,12,15],is_extended_id=False, is_fd=True) for i in range(5): print(msg1) #打印接收的硬件报文消息 bus1.send(msg1) #发送报文消息 time.sleep(0.1)
但是因为获取到的数据没有和DBC文件相结合,所以获取到的数据是原始的十六进制数据,无法直接使用,后续可以使用cantools库解析DBC文件,以有针对性的读取和筛选自己需要的数据。
待完善