Python CAN 总线通知器

问题描述 投票:0回答:1

我正在尝试连接到我汽车的 CAN 总线。连接正常,数据正在打印到终端,没有任何问题。

bus = can.interface.Bus("can0", bustype="socketcan")
notifier = can.Notifier(bus, [can.Printer()])

我正在使用Python Can 2.2和python 3.7。

我想在 can.dlc 上添加一个带有某种 switch-case 语句的新监听器。下面的伪代码是最好的方法吗?

import can

def parse_data(can):
    SingleCanFrame = can.Message
    print(SingleCanFrame)
    if SingleCanFrame.arbitration_id == 304:    #car voltage
        #convert data 
        #save to DB table 1
    elif SingleCanFrame.arbitration_id == 400:  #car speed
        #convert data 
        #save to DB table 2
    elif SingleCanFrame.arbitration_id == 401:  #car tachometer
        #convert data 
        #save to DB table 3
    else:
        #save to DB errorlog
    
bus = can.interface.Bus("can0", bustype="socketcan")    
notifier = can.Notifier(bus, [parse_data(can)]) 
python raspberry-pi can-bus
1个回答
2
投票

从本质上讲,这是一个很好的方法。

但是,如果您想更清楚地表达您的意图,字典会很有帮助:

CAR = {"voltage": 304, "speed": 400, "tachometer": 401} # capital var name as this a constant var

然后您可以将这些值引用为

if SingleCanFrame.dlc == CAR["voltage"]:
,这样更不容易出错。

© www.soinside.com 2019 - 2024. All rights reserved.