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