CAN現場總線僅僅定義了第 1 層、 第 2 層; 實際設計中,這兩層完全由硬件實現,設計人員無需再為此開發相關軟件或固件。
同時 CAN 只定義物理層和數據鏈路層, 沒有規定應用層, 本身並不完整, 需要一個高層協議來定義CAN 報文中的 11/29 位標識符、 8 字節數據的使用。
而且, 基於 CAN 總線的工業自動化應用中, 越來越需要一個開放的、 標准化的高層協議。這個協議支持各種 CAN 廠商設備的互用性、 互換性,
能夠實現在 CAN網絡中提供標准的、統一的系統通訊模式,提供設備功能描述方式,執行網絡管理功能。
基於 CAN 的高層協議主要有CAL 協議和基於 CAL 協議擴展的 CANopen 協議。 CANopen協議是 CAN-in-Automation(CiA)定義的標准之一,
並且在發布后不久就獲得了廣泛的承認。 尤其是在歐洲,CANopen 協議被認為是在基於 CAN 的工業系統中占領導地位的標准。
大多數重要的設備類型,例如數字和模擬的輸入輸出模塊、驅動設備、操作設備、控制器、可編程控制器或編碼器,都在稱為“設備描述”的協議中進行描述;
“設備描述” 定義了不同類型的標准設備及其相應的功能。 依靠 CANopen 協議的支持,可以對不同廠商的設備通過總線進行配置。
一、can協議
CAN協議的報文傳輸主要由下面的4種幀來實現:
數據幀:從發射端攜帶數據到接收端。
一個完整的數據幀有7部分組成,依次為幀起始(SOF)、仲裁場(Arbitration Field)、控制場(Control Field)、數據場(Data Field)、CRC場、
應答場(ACK Field)、幀結尾(EOF)。
標准幀ID是11位,擴展幀ID是29位
遠程幀:總線單元發出遠程幀,請求發送具有同一識別符的數據幀。
遠程幀的主要作用是向其他的CAN節點發送數據請求,發送相同標識符的數據幀。與數據幀相比,遠程幀的RTR位是隱性的,而且沒有數據場。
錯誤幀:任何單元檢測到一總線錯誤就發出錯誤幀。
過載幀:過載幀用以在先行的和后續的數據幀(或遠程幀)之間提供一附加的延時。
同時幀間空間用來間隔數據幀/遠程幀與其他幀。
二、canopen協議
CANOpen協議是處於應用層
一個CANOpen設備從結構上可以分為3個模塊。
對象字典描述了所有的數據類型,通訊對象和應用對象。通訊模塊可以收發總線上的各種通訊對象。應用模塊提供了控制功能和處理硬件的接口。
對象字典是通訊模塊和應用模塊之間的接口。
1、對象字典
i、對象字典的結構
對象字典是CANOpen最重要的特性,它將設備的描述標准化。
對象字典中的每一個對象都由16位的索引和8位的子索引來尋址。對於單個的對象字典項子索引總是0,所以一個數據字典最多有65536項。
靜態數據類型包含標准數據類型的定義,比如BOOLEAN, INTEGER, floating, string,等。
復雜數據類型包含那些由標准數據類型構成的預定義的數據結構,他們對所有設備都是通用的。
制造商定義的復雜數據類型是由標准數據類型構成的數據結構,但是這些數據類型只是特定的設備使用。
設備子協議可能會為它們的設備定義一些額外的數據類型其中靜態數據類型存放在0060-007F,復雜數據類型存放在0080-009F。
通訊子協議區指定了CAN網絡的一些參數,它們對所有設備都是通用的。
標准設備子協議區包含了一類設備的所有數據對象。它們可以通過CAN網絡讀寫。
2、通訊對象
ANOpen協議共有6種通訊對象,分別是:PDO、SDO、SYNC、TIME、EMCY、NMT。這6種通訊對象完成了CANOpen協議的所有通訊功能。
其中我們只介紹使用較多的PDO、SDO。
i、通訊對象ID
CANOpen協議的通訊對象主要利用了CAN協議中的數據幀和遠程幀。為了區分不同的通訊對象,CANOpen協議利用數據幀/遠程幀中的ID。
其中第7位到第10位為功能代碼。第0位到第6位為節點ID,用以區分不同節點的相同功能。這樣就允許最多127個從節點與主節點通訊。
COB-ID的大小也決定了通訊對象的優先級,其中NMT的優先級最高,PDO的優先級高於SDO。
ii、PDO
CANOpen中的實時數據傳輸是由PDO來完成的。PDO的傳輸采用了生產者消費者模式。共有兩種PDO,TPDO和RPDO。
TPDO用來傳輸數據,支持TPDO的節點都是PDO數據的生產者。RPDO用來接收PDO數據,支持RPDO的節點是PDO數據的消費者。
一個節點最多支持4個TPDO(分別是180h+NodeID、280h +NodeID、380h+NodeID、480h +NodeID)
和4個RPDO(分別是200h +NodeID、300h +NodeID、400h +NodeID、500h +NodeID)。
每一個PDO都對應一些參數,包括通訊參數和映射參數。
PDO的參數包括兩部分,通訊參數和映射參數。他們占據了對象字典中從1400到1BFF之間的位置。
PDO的通訊參數定義了COB-ID,傳輸類型(同步,異步,循環,時間出發),inhibit time(兩個PDO的最小間隔)等
PDO的映射參數.一個PDO最多可以映射到64個對象。每一項的含義見圖29。最高16位是對象字典的索引,后面8位是子索引。最低8位是數據長度。
iii、SDO
SDO(Service Data Object)使用Client-Server模式建立起點到點的通訊並實現了對對象字典中條目的讀寫。其中被訪問的對象字典的所在設備作為Server,
訪問對象字典的設備作為client。SDO采用的請求應答模式,每次SDO訪問都會有2條CAN的數據幀對應。一條是請求,一條是應答。
SDO主要提供3種服務:段傳輸,塊傳輸,中止傳輸。
段傳輸---首先由client端發起,然后Server端應答。這樣一來一回。知道把數據傳輸完畢。當傳輸的數據長度小於4時,一次應答就可把數據傳輸完畢。
塊傳輸---主要目的是為了提高傳輸效率。它與段傳輸的主要區別在於:塊傳輸時,可以傳輸多次數據之后,才會有一次應答。
CANOpen將數據分為多個block,每個block又由1-127個segment組成。在傳輸完一個block的數據之后,才會有一次的應答。
中止傳輸---無論CAN設備處於段傳輸還是塊傳輸中,都可以使用中止傳輸協議來中止傳輸。