Python CAN总线通知

2024-09-30 18:16:55 发布

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

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

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

我使用的是pyhtoncan2.2和python3.7。在

我想在can.dlc公司. 下面的伪代码是最好的方法吗?在

^{pr2}$

编辑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)]) 

Tags: toconvertdbdataparsesavedefcar
1条回答
网友
1楼 · 发布于 2024-09-30 18:16:55

基本上,这将是一个很好的方法。在

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

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

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

相关问题 更多 >