本文主要介紹在英創(chuàng)Linux工控主板(ESM8000、ESM7000和ESM6800H)上,采用Python和C#編程,實(shí)現(xiàn)對(duì)CAN總線接口的訪問。Python和C#實(shí)例,均采用Visual Studio Code作為基本的編程工具,其代碼可在主板 + ESMARC評(píng)估底板上運(yùn)行,其基本的硬件環(huán)境采用采用ESM8000工控主板 + 評(píng)估底板構(gòu)成,如下圖所示:
在Linux平臺(tái),CAN總線接口設(shè)備已納入網(wǎng)絡(luò)的socket架構(gòu)。英創(chuàng)的Linux主板有兩路CAN接口,網(wǎng)絡(luò)名稱為”can0”和”can1”。在本文后面的實(shí)例代碼中使用can0接口,評(píng)估底板上有相應(yīng)的CAN驅(qū)動(dòng)電路,與開發(fā)主機(jī)的CAN適配器連接,就可進(jìn)行測(cè)試了。
可選擇任何一款CAN調(diào)試模塊,如PCAN,作為CAN總線測(cè)試的對(duì)端,通過其APP可看到CAN數(shù)據(jù)幀的收發(fā)情況。
Python應(yīng)用實(shí)例
Python支持can接口操作庫文件Python-CAN已經(jīng)安裝在ESM8000板卡文件系統(tǒng)中,調(diào)用import can 即可調(diào)用API函數(shù)對(duì)于can接口進(jìn)行讀寫操作。對(duì)于socketcan的操作模式,一般需要調(diào)用ip 命令來激活can接口,并設(shè)置相應(yīng)的波特率。
#>ip link set can0 type can bitrate 2500000
#>ip link set can0 up
Python CAN實(shí)例代碼如下:
C#應(yīng)用實(shí)例
C#的實(shí)例是來自第三方的開源案例:https://github.com/jormenjanssen/netcore-can-example。實(shí)例通過C#的InteropServices機(jī)制,直接調(diào)用Linux socket相關(guān)函數(shù),并不依賴于libsocketcan庫。目前還只有.NETCore3.1能支持該實(shí)例的正常運(yùn)行,.NET5.0的預(yù)發(fā)行版都還不能正常工作,希望在計(jì)劃的2020年11月的正式發(fā)布版中,微軟能解決System.Net.Sockets庫中的相關(guān)問題。
運(yùn)行程序前,需要通過Linux的ip link命令,讓can0接口up。具體操作參考Python實(shí)例中的說明。
鑒于本程序代碼較多(包含6個(gè)C#文件),僅例出main函數(shù)。感興趣的客戶可與英創(chuàng)技術(shù)部門聯(lián)系,獲取完整代碼。
成都英創(chuàng)信息技術(shù)有限公司 028-8618 0660