我正试图连接到我的汽车的CAN总线上。连接正常,数据打印到终端,没有任何问题。
bus = can.interface.Bus("can0", bustype="socketcan")
notifier = can.Notifier(bus, [can.Printer()])我正在使用PythonCAN2.2和python3.7。
我想在can.dlc上添加一个新的监听器,其中包含一些开关-大小写语句。下面的伪码会是最好的方法吗?
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)]) 发布于 2018-08-13 08:51:45
从本质上说,这将是一个很好的方法来做到这一点。
然而,如果你想更清楚地表达你的意图,一本字典就会有帮助:
CAR = {"voltage": 304, "speed": 400, "tachometer": 401} # capital var name as this a constant var然后,您只需将这些值称为if SingleCanFrame.dlc == CAR["voltage"]:,这样就不那么容易出错了。
https://stackoverflow.com/questions/51818333
复制相似问题