CAN总线:传输的数据已损坏

2024-04-29 09:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过can总线传输各种车身信号,以监控驾驶员的睡意。 现在我遇到了以下问题:

  1. 消息的信号似乎被0填满,它们应该是空的

例如:发送消息时,在dbc文件中定义如下

BO_ 515 C_Light: 8 Vector__XXX
 SG_ C_Lightmode : 4|3@1+ (1,0) [0|7] "" Vector__XXX
 SG_ C_Blinker : 1|2@1+ (1,0) [0|3] "" Vector__XXX

对于值4(100)和3(11),传输值为70(110 0 11 0),这导致了下一个问题

  1. 一条消息的不同信号被合并成一个信号

添加0的结果似乎忽略了信号的起始位

  1. 超过8位的信号被分割

在其他情况下,我需要发送大于255的值,因此使用10位信号长度。这将导致8个正确发送但值错误的位和2个位被切断并作为分离信号处理。例如,360(101101000)被转换为104(1101000),随后是(前两个截止位)2(10)

有没有人曾经遇到过类似的问题,并且知道如何解决它们


我正在使用以下代码发送数据:

can_telematics_bus = can.interface.Bus()
db1 = cantools.db.load_file('../dbc/AGL_Candb.dbc')

def write_Light(Lightmode, Blinker ):
    Light = db1.get_message_by_name('C_Light')
    Light_data = Light.encode({'C_Lightmode': Lightmode, 'C_Blinker': Blinker})
    Light_message = can.Message(arbitration_id=Light.frame_id, Light_data, is_extended_id= False)
    can_telematics_bus.send(Light_message)

我的配置:
使用Python 3.6的Nvidia Jetson Nano
python can 3.3.4
cantools 31.1.0
阿杜伊诺乌诺
CAN总线屏蔽1.0.0


Tags: id消息message信号sgcanxxxlight