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-hant/n/179958.html