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

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


我正在使用Pyhton 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)])


编辑1:

忘记参数:def parse_data(can)

编辑2:

新密码

import can

CAR = {"voltage": 304, "speed": 400, "tachometer": 401}

def cellvoltage(SingleCanFrame, MyDB):
    #convert data
    #save to DB table 1
def packcurrent(SingleCanFrame, MyDB):
    #convert data
    #save to DB table 2
def tachometer(SingleCanFrame, MyDB):
    #convert data
    #save to DB table 3

def parse_data(can):
    SingleCanFrame = can.Message
    MyDB = SomeDB.Connect()
    print(SingleCanFrame)
    if SingleCanFrame.arbitration_id == CAR["voltage"]: #car voltage
        cellvoltage(SingleCanFrame, MyDB)
    elif SingleCanFrame.arbitration_id == CAR["speed"]: #car speed
        packcurrent(SingleCanFrame, MyDB)
    elif SingleCanFrame.arbitration_id == CAR["tachometer"]:    #car tachometer
        tachometer(SingleCanFrame, MyDB)
    else:
        #save to DB errorlog

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

最佳答案

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

但是,如果您想更清楚地表达自己的意图,那么字典会有所帮助:

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


然后,您可以仅将这些值称为if SingleCanFrame.dlc == CAR["voltage"]:,这样不容易出错。

关于python - Python CAN总线通知程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51818333/

10-13 06:59
查看更多