python-can詳解

python-can是一個Python庫,提供了數十個協議和接口,可以幫助Python開發人員處理CAN(控制器局域網絡)總線數據。CAN總線是一種廣泛用於車輛和工業應用的通信協議。python-can可以讓您輕鬆讀取和編寫CAN消息。以下是幾個必不可少的部分以及如何使用Python編程處理該部分。

一、Python處理CAN消息中的殘留部分即殘差

CAN總線可以同時傳輸多個數據消息。這組數據可以稱作『幀』。幀包括標識符、幀類型和數據。CAN幀也可以被傳輸到不同的物理環境中。CAN總線有着一個特殊的控制器來處理CAN數據消息。CAN數據消息被發送到物理介質上,當接收器看到CAN 數據它會觸發一個中斷,自動轉到接收模式,嘗試解釋收到的數據。但是這些數據不能被完美地解釋,有時會發生殘留。殘留是指在多個位元組傳輸之間,CAN幀被分層的情況。

import can
can_interface = "vcan0"
can_bus = can.interface.Bus(can_interface, bustype="socketcan")
message = can_bus.recv()
frame_data = message.data

使用python-can讀取CAN幀數據是非常直接的。如上所述,我們會從CAN總線上接收一個幀消息,然後將幀數據存儲在frame_data變量里。如果幀消息包括殘留,則Python中的CAN工具將其自動處理。

二、Python無法打開CAN文件,應如何處理?

當Python工具無法正常調用CAN接口時,通常表示Python運行環境中缺少必要的驅動程序。可以手動安裝,或者使用工具來安裝。下面是解決方法:

1.檢查CAN接口及配置文件是否已正確地安裝在系統中。

2.可以使用Python的『cantools』庫,它可以解析和編碼CAN數據庫文件。

3.在Python環境中使用Python-can library。以管理員身份運行python,運行pip install python-can指令即可下載。

4.使用CanBerry Pi運行Raspberry Pi와Python的輕量級CAN-Bus接口。Canberry Pi是一款基於Raspberry Pi的CAN總線、串口、GPIO、SPI和WiFi擴展板。

三、Python-CAN參考文獻

以下列出幾篇關於Python-CAN的參考文獻:

Python CAN(Takuya, 2021):https://python-can.readthedocs.io/en/master/

Python for CAN(CanQueenie, 2016):http://canqueenbee.blogspot.com/2016/07/python-for-can.html

CAN模塊ipython(kvaser):http://www.kvaser.com/software/7330130154024/V5_9-R6/library/docs/python-candriver/html/index.htm

四、Python-CAN參數

1. Python-CAN參數傳遞

下面是python-can用來打開CAN接口的參數傳遞方法:

import can
can_interface = "vcan0"
can_bus = can.interface.Bus(can_interface, bustype='socketcan_native')

Python-can支持多種現成的數據傳輸協議,這是通過參數傳遞方式完成的。在上面的例子中,我們指定了可以使用的總線類型為socketcan_native。

2. Python-CAN參數類型選取

python-can支持的CAN協議類型包括CANopen(使用ODVA控制),通過J1939發送以及將ISO15765報文轉換為XCP報文。以下參數類型可以作為您的Python-CAN程序中的總線類型:

  • socketcan_native
  • socketcan_ctypes
  • kvaser
  • pcan
  • ixxat

3. Python-CAN參數是幹什麼的

參數允許您通過Python原生應用程序接收和發送CAN幀。可以控制CAN messages的多個方面,例如循環發送、處理錯誤、接口速度和多信道傳輸等。此外,參數還可以用於監視CAN總線,並調試傳輸。

五、Python-CAN實現餐廳服務評價

在下面的例子中,我們將使用python-can演示計算餐廳的服務評分。假設我們有兩個CAN節點:180和181,分別代表餐廳服務員和顧客。餐廳服務員會在CAN總線上發送三種不同的消息,用於評估顧客的服務滿意度。根據餐廳服務員發送的消息,這個程序將計算出服務質量,準確性和員工禮貌指數。以下是代碼:

import can
import time

bus = can.interface.Bus(channel='can0', bustype='socketcan_native') # 第1個參數是通道,第2個參數是總線類型

#這裡模擬的餐廳是服務質量評分標準,其中180是服務員,181是客戶的ID;
#服務員會分別通過CAN總線發送三種不同的消息,表示三種不同的服務質量
#餐廳基於此消息計算每個服務員的服務質量得分
def quality_evaluation_worker(bus):
    serving_quality_ranking = dict()
    for msg in bus:
        if msg.arbitration_id == 0x88:
            if msg.data[0] == 0x01:
                serving_quality_ranking[str(msg.arbitration_id)] = "unacceptable"
            elif msg.data[0] == 0x02:
                serving_quality_ranking[str(msg.arbitration_id)] = "adequate"
            elif msg.data[0] == 0x03:
                serving_quality_ranking[str(msg.arbitration_id)] = "excellent"
    return serving_quality_ranking

#以下是顧客看到的評價,他們會看到平均服務評分和總體評分。
#使用180和181發送的數據,則可以計算出餐廳所有服務員的服務評價平均值
def quality_evaluation_customer(bus, quality_survey):
    service_quality_sum = 0
    for msg in bus:
        if msg.arbitration_id == 0x88:
            service_quality_sum += quality_survey[str(msg.arbitration_id)]
        else:
            pass
    average_quality = round(service_quality_sum / len(quality_survey), 2)
    print("The average quality score was: ", str(average_quality))

#主函數
if __name__ == "__main__":
    evaluation_results = quality_evaluation_worker(bus)
    quality_evaluation_customer(bus, evaluation_results)
    bus.shutdown()

在這個餐廳服務評價的例子中,我們使用socketcan_native作為總線類型,它有兩個參數:通道和總線類型。

六、Python-CAN接口編程

下面以python-can通過USB連接到PCAN接口的例子來說明接口編程:

import can

print("Demo: USB-Adapter with Channel 1")
bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1')

def receive_usb():
    msg = bus.recv()
    id = "{0:x}".format(msg.arbitration_id)
    data = "{0}".format(msg.data)
    print("Received message on bus1 with ID {0}: {1}".format(id, data))

print("Please send a message on USB-BUS1 (an open CAN channel)")
while True:
    receive_usb()

在這個例子中,我們開始連接到帶有Python的PCAN-USB擴展的PCAN總線。然後,我們編寫了一個函數來接收使用USB適配器發送的任何消息。

七、Python-CAN的用途

Python-can的應用場景非常廣泛,這裡列出了其中的幾個:

  • 通過Python控制CAN總線以便進行數據交換、物聯網集成。
  • 實現汽車業界標準的CAN網絡通信。
  • 通過Python編程,進行工業自動化過程監控和相關數據分析。
  • 開發生產工藝監控和控制系統。

總之,python-can是一個非常強大且廣泛使用的工具,可以讓Python開發人員處理各種CAN網絡通信協議。我希望在討論了Python-CAN的這些方面之後,你可以使用python-can這個庫接收和編寫CAN消息,解決您各種相關的需求。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/179958.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-22 05:09
下一篇 2024-11-22 05:09

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論