首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python CAN总线通知器

Python CAN总线通知器
EN

Stack Overflow用户
提问于 2018-08-13 08:40:26
回答 1查看 5.4K关注 0票数 3

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

代码语言:javascript
复制
bus = can.interface.Bus("can0", bustype="socketcan")
notifier = can.Notifier(bus, [can.Printer()])

我正在使用PythonCAN2.2和python3.7。

我想在can.dlc上添加一个新的监听器,其中包含一些开关-大小写语句。下面的伪码会是最好的方法吗?

代码语言:javascript
复制
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:

新码

代码语言:javascript
复制
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)]) 
EN

回答 1

Stack Overflow用户

发布于 2018-08-13 08:51:45

从本质上说,这将是一个很好的方法来做到这一点。

然而,如果你想更清楚地表达你的意图,一本字典就会有帮助:

代码语言:javascript
复制
CAR = {"voltage": 304, "speed": 400, "tachometer": 401} # capital var name as this a constant var

然后,您只需将这些值称为if SingleCanFrame.dlc == CAR["voltage"]:,这样就不那么容易出错了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51818333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档