拖拉機控制關鍵協議 ISO-11783 協議解析
快速開始
應用層關注的主要內容是如何讀寫資料,對於ISOBUS,讀寫資料,即是如何控制車輛動作和獲取車輛資訊。
ISOBUS的實現讀寫資料的機制是“訊息”。一切皆為訊息(message)。一般的,每個訊息的核心為一個引數組(parametergroup),引數組主要分為幾類:指令類、資料類和輔助類。
指令類:可以被執行,如控制開關、控制轉向。
資料類:用來讀取和寫入的關鍵資料,如感測器值,元件ID等。
輔助類:輔助完成請求資料,應答資料、廣播宣告、分包傳輸管理等功能。
具體通訊的細節請參照後續章節的介紹。
注:標準文件將引數組的型別定義了5種(Command、Request、Broadcast/Request、Acknowledgement和Group Function)。這裡為了便於理解分為3類。
協議關鍵要素定義
PDU | protocol data unit | 一個完整的CAN資料幀 |
PGN | Parameter group number | 由PDU中定義的DataPage、Format和Specific共同決定的,用以確定具體message 的種類。 |
Message | 由相同PGN組成的一個或多個CAN資料幀 | |
Packet | 組成multi-packet message 的單個CAN資料幀 | |
multi-packet message | 當單個CAN資料幀不能完整傳輸完Message的全部資料時,採用多個含相同PGN的CAN資料完成資料傳輸。 | |
SA | Source Address | 定義訊息從哪裡傳送 |
DA | Destination Address | 定義訊息傳送到哪裡 |
概述
ISOBUS協議是基於CAN2.0B協議的一個拓展。幀結構如所示。
PDU結構
PDU由七部分組成PRIO,Reserved,DP,PF,PS,SA,Data,
訊息通訊
訊息(Message)是ISOBUS定義的一種在CAN資料幀基礎上,更高層的資料鏈路層通訊資料結構。訊息支援傳輸高達1785(255包*7位元組每包)個位元組的應用程式資料。
由於CAN資料幀每一幀最大傳輸的資料量為8個位元組,遠遠不能滿足訊息定義的最大傳輸容量,所以ISOBUS協議使用多個CAN資料幀分次傳送的方法,逐步完成全部應用層資料的傳輸。
需要特別注意的是,傳送拆分的資料包的過程中,有可能會有其他ISOBUS裝置傳送相同的訊息幀,為了避免資料幀遭到插入造成資料破壞,接收端必須要能識別不同傳送端傳送的Messsage包,並分別合併成正確的Message。
訊息的型別
訊息型別有5大類
型別 | 英文名 | PGN | |
指令 | Command | ||
請求 | Request | 59904 | |
廣播/ 響應 | Broadcast/Response | ||
應答 | Acknowledge | 59392 | ACK和NACK |
組功能 | Group Funtion |
應答類訊息
應答類訊息分為積極應答ACK(Positive Acknowledge)和消極應答NACK(negative Acknowledge)。
引數組
ISOBUS 主要通過PDU中的DP,PF和PS這3個域來定義訊息的型別,並且為了方便描述,又將這三個域合稱為PGN。
ISOBUS規定,根據PF的不同,PS的含義有2種,
PF | PS |
0~239 | 目標地址 |
240~255 | 拓展引數 |
由此,當PF值為0~239時,稱之為PDU1,由此PGN如下定義
PGN | ||
最高位 | 最低位 | |
DP | PF | 0 |
當PF值為240~255時,此時的PDU稱為PDU2,PGN如下定義
PGN | ||
最高位 | 最低位 | |
DP | PF | PS |
傳輸協議功能
大量資料分包傳輸
當有大量資料構成的訊息需要傳輸的時候,標準的CAN幀已經不能滿足傳輸需求。ISO11738定義了一種分包傳送大量資料的機制——多包訊息(multi-packet message).
每個包的結構如下
CAN幀的資料域 | ||
位元組 | byte1 | byte2-byte8 |
內容 | 包序號 | 7個位元組的資料塊 |
- 包序號從1開始到255為止,用來標識多個包,方便接收端合併包。
- 廣播模式傳送包,兩包之間的延時要在50ms~200ms之間。
- 非廣播模式傳送包,兩包之間的傳送延時要小於200ms。
- 每一包的DLC值都固定為8,即使所需要傳輸的資料不足8個,也應將未用到的資料設定為0xFF。
連線管理
初始化連線
請求端傳送RequesttoSend(TP.CM_RTS)訊息,此訊息中包含了接下來傳輸資料的總大小。目標接受連線請求需要回應CleartoSend(TP.CM_CTS) 訊息,目標若不接受連線請求需要回應ConnectionAbort(TP.CM_CA)訊息。
傳輸資料
請求傳輸資料端在收到CleartoSend(TP.CM_CTS) 訊息後,開始DataTransfer(TP.DT)流程.流控制由接收端負責,當傳送端傳輸過快,接收端可能來不及處理接收的資料時,接收端通過傳送CleartoSend(TP.CM_CTS)訊息,並將該訊息的
結束連線
接收端接收完最後一個包後,回發一個結束連線訊息end-of-messageack,用以通知傳輸完成,釋放連線。
當傳輸出現異常時,傳送端負責中止連線通過傳送ConnectionAbort訊息來完成。需要注意的時,接收端無權中止連線。
如圖1正常傳輸流程,一般可導致中止連線的情況如下幾種:
- T1,在傳輸完資料之前,兩包資料之間的時間間隔超過了250ms。
- T2,發出CleartoSend(TP.CM_CTS) 訊息到接收到資料包的時間間隔超過1250ms。
- T3,兩次CleartoSend(TP.CM_CTS) 訊息間隔超過1250ms。
- T4,發出CleartoSend(TP.CM_CTS) 訊息用以暫停資料傳輸到下一個CleartoSend(TP.CM_CTS) 訊息之間的時間間隔超過550ms。
訊息定義
連線管理
引數組名:ConnectionManagement連線管理
PGN定義:
PGN | DLC | ||
DP | PF | PS | |
0 | 236 | 目標地址 | 8 |
60416 |
資料傳送請求Request To Send(TP.CM_RTS)
Data Field | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
控制字:16 | 總位元組數 | 總包數 | 保留: 0xFF | 所傳輸內容的PGN |
資料過程管理Clear To Send (TP.CM_CTS)
Data Field | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
控制字:17 | 傳送包數 | 下一包序號 | 保留: 0xFF | 保留: 0xFF | 所傳輸內容的PGN |
結束訊息傳輸End of Message Acknowledgement (TP.CM_EndofMsgACK)
Data Field | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
控制字:19 | 總位元組數 | 總包數 | 保留: 0xFF | 所傳輸內容的PGN |
終止連線Connection Abort (TP.Conn_Abort)
Data Field | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
控制字:255 | 保留: 0xFF | 保留: 0xFF | 保留: 0xFF | 保留: 0xFF | 所傳輸內容的PGN |
廣播發送Broadcast Announce Message (TP.CM_BAM)
Data Field | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
控制字:32 | 總位元組數 | 總包數 | 保留: 0xFF | 所傳輸內容的PGN |
資料傳輸DataTransfer
引數組名:DataTransfer資料傳輸(TP.DT)
PGN定義:
PGN | DLC | ||
DP | PF | PS | |
0 | 235 | 目標地址 | 8 |
60160 |
Data Field | |||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
包序號 | 傳輸的資料內容 |
請求Request
PGN | DLC | ||
DP | PF | PS | |
0 | 234 | 目標地址 (廣播255) | 3 |
60160 |
Data Field | |||||||
1 | 2 | 3 | |||||
請求內容的PGN |
注:由於有些請求的資料可能超過8位元組,對於超過8位元組容量的資料,將會分多個包應答回來。
響應請求
應答Acknowledgement
PGN定義:
PGN | DLC | ||
DP | PF | PS | |
0 | 232 | 目標地址 (廣播255) | 8 |
59392 |
Data Field | |||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
ACK:0 NACK:1 | 保留: 0xFF | 請求的PGN |
通訊場景
點對點通訊
傳送端發起依次傳輸元件ID的資料通訊流程如下圖所示。
廣播通訊
廣播通訊不同於點對點的通訊模式,廣播通訊每一包的傳送間隔為50ms到200ms之間,超過或少於均會產生錯誤。接收廣播資料無需進行應答,也不能進行流量控制。
請求資料
當需要獲取指定資料時,請求端需要嚮應答端傳送請求資料訊息。應答端會根據請求的內容選擇應答所請求的資料,如圖 2 請求-應答所示的內容,或做出NACK的迴應,如圖 3 請求-不應答所示的流程。
廣播資料
在某些應用場景中,一臺是被需要不斷向總線上廣播資料,通訊流程如圖 4 廣播資料所示。
回饋指令(Command)的執行結果
為了執行某些特定動作,比如控制輪子轉向,執行端必須給出某些反饋,這些反饋可以是ACK,當動作執行成功或完成;也可以反饋NACK,提醒指令執行失敗,或直接通過讀取某些資料來自行判斷指令的執行狀況。
常見問題彙總
Q:本協議是否支援超過8位元組的資料傳輸?
A:通過資料傳輸協議支援單次最高傳輸1785位元組應用層資料。
Q:什麼是PDU?
A:PDU是ISOBUS 通訊的基本單元,是對CAN幀的具體定義。一個can幀有且只有一個PDU。