CAN總線的高可靠性、高性能等優點使其在工業測控以及工業自動化等領域中被大量廣泛使用。本文基于EsDA開發平台,為您簡單介紹如何用5分鐘快速建立CAN通信。
簡介
CAN是ISO國際标準化的串行通信協定。由于性能高,可靠性高現被廣泛應用在汽車,醫療,船舶,工業自動化等其他方面。因為隻需要兩根線就可在多個裝置間進行資料通信是以被廣泛使用。本文基于EsDA開發平台,為您簡單介紹如何用5分鐘快速建立CAN通信。
基本工作原理:通過USBCANFD-200U接口卡實作主機闆與PC實作CAN(FD)通信。
本應用選用 EPC6450-AWI開發闆,USBCANFD-200U接口卡與PC連接配接,使其能與接入CAN(FD)網絡的開發闆進行資料收發,USBCANFD不同系列産品支援1~8路CAN(FD)通信,可根據不同需求進行選擇,本文采用的200U系列僅支援2路通信。該實驗用到了timer,fscript,canfd_out,canfd_in,fscript和log節點。
前期準備
若是剛開始接觸EsDA,可先閱讀EsDA其他系列文章,從零開始搭建環境和掌握基本開發流程,已有基礎的可以跳過:
- EsDA MPC-ZC1 入門(一)—— 軟體安裝
- EsDA MPC-ZC1入門(二)—— LED控制
- 【EsDA應用】5分鐘實作一個序列槽通信業務
1. 硬體準備
1.1 準備一個USBCANFD-200U接口卡,并在PC上下載下傳并安裝ZCANPRO的上位機軟體。
1.2 準備EPC6450-AWI開發闆,并按照下圖所示連接配接好硬體。
将EPC6450-AWI開發闆上的CAN_0與USBCANFD-200U随機一路進行連接配接,并将USBCANFD-200U接口卡的USB2.0連接配接到PC上,建立好硬體連接配接。
2. 節點介紹
實作CAN(FD)總線通信,需要使用到canfd相關的AWFlow節點,包括canfd_out,canfd_in和canfd三個節點。
2.1 canfd
CANFD通信協定配置節點,屬于隐式節點,不會顯示在畫布中,需要配套相應功能節點一起使用。
2.1.1 屬性
- 端口(port):裝置端口路徑,用于系統打開裝置;
- CAN控制器類型(can_type):設定CAN控制器類型。值為0表示CAN;值為1表示CANFD;
- 非标準ISO模式(non_iso_mode):開啟/關閉非标準ISO模式。值為0表示關閉;值為1表示開啟;
- 仲裁域波特率(nominal_bps):設定仲裁域波特率,機關是bps,值域是0~1000000;
- 仲裁域采樣點精确的分子值(nominal_spf):設定仲裁域采樣點精确的分子值,采樣點用分數來表示,如需要将采樣點設定為87.5%,則設定采樣點的分母為1000,分子為875即可。因硬體原因可能導緻不能精确地配置采樣點,增加了兩個分子值來表示範圍。值域是0~10240;
- 仲裁域采樣點最小的分子值(nominal_spf_min):設定仲裁域采樣點最小分子值,值域是0~10240;
- 仲裁域采樣點最大的分子值(nominal_spf_max):設定仲裁域采樣點最大分子值,值域是0~10240;
- 仲裁域采樣點分母值(nominal_spd):設定仲裁域采樣點分母值,值域是0~10240資料域波特率(data_bps):設定資料域波特率,值域是0~5000000;
- 資料域采樣點精确的分子值(data_spf):設定資料域采樣點精确的分子值,采樣點用分數來表示,如需要将采樣點設定為87.5%,則設定采樣點的分母為1000,分子為875即可。因硬體原因可能導緻不能精确地配置采樣點,增加了兩個分子值來表示範圍。值域是0~10240;
- 資料域采樣點最小的分子值(data_spf_min):設定資料域采樣點最小的分子值。值域是0~10240;
- 資料域采樣點最大的分子值(data_spf_max):設定資料域采樣點最大的分子值。值域是0~10240;
- 資料域采樣點分母值(data_spd):資料域采樣點分母值。值域是0~10240;
- 濾波器使能(filter_enable):開啟/關閉濾波器。值為0表示關閉;值為1表示開啟;
- 濾波表(filter_table):濾波表,濾波表采用json數組的形式設定,最大支援32條,符合濾波表條件的封包将被接收,不符合的封包會被過濾,但錯誤封包不會被過濾。濾波表格式如下:id表示封包ID;msk表示ID掩碼,ID掩碼部分相同的封包将被接收;recv_std表示是否接收标準幀;recv_ext表示是否接收擴充幀;recv_data表示是否接收資料幀;recv_rmt:是否接收遠端幀。
* 配置節點(config類型)隻存在節點屬性,不具備輸入輸出功能。
2.2 canfd_in
2.2.1 屬性
- 名稱(name):節點名稱,用于索引查找本節點;
- 顯示名稱(displayName):用于畫布上顯示的名稱;
- 關聯配置(config):綁定一個canfd的配置節點。
2.2.2 輸出
- payload:CAN封包,1-8位元組為時間戳,9-12位元組為ID,13-14位元組為封包标志位【位0:發送幀标志(單次發送)。位1:CANFD幀标志,位2:遠端幀标志,位3:擴充幀标志,位4:錯誤幀标志,位5:轉換可變速率,位6:錯誤狀态訓示(0:被動錯誤,1:主動錯誤)】,15-16位元組為通道号(低5位)和資料長度(高11位),17位元組到末尾為封包資料;
- payloadLength:負載長度。
* pump類型節點通常不具備資料輸入。
2.3 canfd_out
2.3.1 屬性
- 名稱(name):節點名稱,用于索引查找本節點;
- 顯示名稱(displayName):用于畫布上顯示的名稱;
- 關聯配置(config):綁定一個canfd的配置節點。
2.3.2 輸入
- payload:CAN封包,1-8位元組為時間戳,9-12位元組為ID,13-14位元組為封包标志位【位0:發送幀标志(單次發送),位1:CANFD幀标志,位2:遠端幀标志,位3:擴充幀标志,位4:錯誤幀标志,位5:轉換可變速率,位6:錯誤狀态訓示(0:被動錯誤,1:主動錯誤)】,15-16位元組為通道号(低5位)和資料長度(高11位),17位元組到末尾為封包資料;
- payloadLength:負載長度。
* sink類型節點通常不具備資料輸出。
業務處理
本應用主要通過USBCANFD-200U接口卡将PC與接入CAN網絡的EPC6450-AWI開發闆進行資料收發,具體實作如下:
1. 添加節點并連線
本實驗主要執行兩個步驟:
- EPC6450-AWI開發闆上的CAN_0通過CAN通信協定,canfd_out節點定時向USBCANFD-200U接口卡發送0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,八個位元組的資料,發送資料可在PC上的工具ZCANPRO上檢視。
- PC上的工具ZCANPRO通過CAN總線通信協定定時發送0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77八個位元組的資料,EPC6450-AWI開發闆上通過canfd_in這個節點去接收資料,并通過log最終列印可檢視。
采用的節點有timer,fscript,canfd_out,canfd_in,fscript和log節點。
2. 配置節點
輕按兩下timer節點,設定canfd_out節點發送資料的定時時間。
輕按兩下canfd_out節點的前驅節點fscript,結合2.2關于canfd_out節點的介紹可知canfd_out節點有兩個輸入參數:payload;payloadLength。一個傳遞通信資料内容,一個傳遞通信資料長度,内容如下:
buf = wbuffer_create()
wbuffer_write_int8(buf, 202)
wbuffer_write_int8(buf, 150)
wbuffer_write_int8(buf, 9)
wbuffer_write_int8(buf, 124)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 17)
wbuffer_write_int8(buf, 1)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 1)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 1)
wbuffer_write_int8(buf, 2)
wbuffer_write_int8(buf, 3)
wbuffer_write_int8(buf, 4)
wbuffer_write_int8(buf, 5)
wbuffer_write_int8(buf, 6)
wbuffer_write_int8(buf, 7)
msg.payload = wbuffer_get_data(buf)msg.payloadLength = str(24)
輕按兩下canfd_out和canfd_in節點,并點選配置節點名旁邊的鉛筆圖示去配置canfd的屬性。
因為canfd_in和canfd_out節點的配置節點都是同一個,是以配置資訊一緻。根據2.2中對配置節點canfd的屬性介紹,配置如下:
輕按兩下canfd_in的消費者節點fscript,根據2.2節點介紹中對canfd_in的輸出參數描述,fscript的内容如下:
data_str = "data:"
len = msg.payloadLength
rbuf = rbuffer_create(msg.payload, msg.payloadLength)
for (var i = 0; i < len; i = i + 1) {
data = rbuffer_read_uint8(rbuf);
//print("data:" + data)
data_str = data_str + data
if (i < (len - 1)) {
data_str = data_str + ","
}
}
output.payload = data_str
3. 下載下傳驗證
因為EPC6450-AWI開發闆是通過網口去下載下傳流圖,是以打開AWFlow_Designer後需要配置目标闆IP和端口号。點選流圖下載下傳,顯示下載下傳流圖成功即可。
打開上位機ZCANPRO并開啟對應的通道号,将波特率等參數選擇與流圖上的canfd配置節點參數同步一緻。上位機CAN視圖可以檢視從上位機發送出去的資料和接收到的資料如下。
根據流圖中log節點的列印資訊可知:資料内容和長度與上位機發送的資料是一緻的。
綜上測試結果可知:實驗效果已達成。
ZLG官方商城:https://sale.zlg.cn/
ZLG開發者社群:https://z.zlg.cn/
更多詳細産品資訊、技術幹貨,可關注微信公衆号“ZLG緻遠電子”