我正在尝试连接到我汽车的 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)])
从本质上讲,这是一个很好的方法。
但是,如果您想更清楚地表达您的意图,字典会很有帮助:
CAR = {"voltage": 304, "speed": 400, "tachometer": 401} # capital var name as this a constant var
然后您可以将这些值引用为
if SingleCanFrame.dlc == CAR["voltage"]:
,这样更不容易出错。