gpt4 book ai didi

Python CAN总线通知器

转载 作者:行者123 更新时间:2023-12-01 09:09:01 24 4
gpt4 key购买 nike

我正在尝试连接到我汽车的 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)])

编辑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 CAN总线通知器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51818333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com