從OSI 網絡模型的角度來看,CAN總線只定義了OSI網絡模型的第一層(物理層) 和第二層(數據鏈路層),而在實際設計中,這兩層徹底由硬件實現,設計人員無需再爲此開發相關軟件或固件。編程
同時,CAN只定義物理層和數據鏈路層,沒有規定應用層,自己並不完整,所以須要一個高層協議來定義CAN報文中的11/29位標識符和8字節數據的使用。並且,基於CAN總線的工業自動化應用中,愈來愈須要一個開放的、標準化的高層協議:這個協議支持各類CAN廠商設備的互用性、互換性,可以實如今CAN網絡中提供標準的、統一的系統通信模式,提供設備功能描述方式,執行網絡管理功能。服務器
CANopen協議是CAN-in-Automation(CiA) 定義的標準之一,而且在發佈後不久就得到了普遍的認可。尤爲是在歐洲, CANopen 協議被認爲是在基於CAN 的工業系統中佔領導地位的標準。大多數重要的設備類型,例如數字和模擬的輸入輸出模塊、驅動設備、操做設備、控制器、可編程控制器或編碼器,都在稱爲「設備描述」的協議中進行描述;「設備描述」定義了不一樣類型的標準設備及其相應的功能。依靠CANopen協議的支持,能夠對不一樣廠商的設備經過總線進行配置。網絡
在OSI 模型中, CAN標準、CANopen協議之間的關係如圖 1‑1所示。數據結構
圖1‑1 CAN標準、CANopen協議在OSI網絡模型中的位置框圖異步
CANopen和CAN報文的關係如圖 1‑2所示。編碼
圖1‑2 CANopen和CAN報文的關係如所示。spa
CAN 報文由7個不一樣的位域組成,而CANopen就是規定其中的仲裁域(11 位標識符) 和數據域(8 字節數據) 的使用狀況。.net
CANopen是一個基於CAN串行總線系統和CAL(CAN應用層)的高層協議。 CANopen的核心概念是設備對象字典(OD: ObjectDictionary),CANopen通信經過對象字典(OD)可以訪問驅動器的全部參數。CANopen設備結構如圖 2‑1所示。設計
圖2‑1 CANopen設備結構對象
CANopen對象字典(Object Dictionary,OD)是CANopen協議最爲核心的概念。所謂的「對象字典」,就是一個有序的對象組;每一個對象採用一個16位的索引值來尋址。爲了訪問數據結構中的元素,同時定義了一個8位的子索引,對象字典的結構如表 2‑1所示。
表2‑1 對象字典結構
CANopen網絡中每一個節點都有一個對象字典。對象字典包含了描述這個設備和它的網絡行爲的全部參數。
CANopen對象字典中的項由一系列子協議來描述。子協議描述對象字典中每一個對象的功能、名字、索引、子索引、數據類型、讀/寫屬性,以及這個對象是否必需等,從而保證不一樣廠商的同類型設備兼容。
CANopen協議的核心描述子協議是DS301,包括CANopen協議應用層及通訊結構描述,其餘子協議都是對DS301協議描述文本的補充與擴展。
CANopen協議包含許多子協議,其主要劃分爲如下3類:
1. 通訊子協議
通訊子協議(Communication Profile)描述對象字典的主要形式,以及對象字典中的通訊對象和參數。這個子協議適用於全部的CANopen設備,其索引值範圍爲0x1000~0x1FFF。
2. 製造商自定義子協議
對於在設備子協議中未定義的特殊功能,製造商能夠在製造商自定義子協議(Manufacturer-specific Profile)中根據需求定義對象字典項。所以,這個區域對不一樣廠商來講,相同的對象字典項的定義不必定相同,其索引值範圍爲0x2000~0x5FFF。
3. 設備子協議
設備子協議(Device Profile)爲各類不一樣類型設備定義對象字典中的對象,其索引值範圍爲0x6000~0x9FFF。
在CANopen協議中主要定義網絡管理對象(NMT)、服務數據對象(SDO)、過程數據對象(PDO)、預約義報文或特殊功能對象4種對象。
2.2.1 網絡管理對象
網絡管理對象負責層管理、網絡管理和ID分配服務,例如,初始化、配置和網絡管理。網絡管理中,同一個網絡中只容許有一個主節點、一個或多個從節點,並遵循主/從模式。
2.2.2 服務數據對象
服務數據對象主要用於主節點對從節點的參數配置。服務確認是SDO最大的特色,爲每一個消息都生成一個應答,以確保數據傳輸的準確性。在一個CANopen系統中,一般CANopen從節點做爲SDO服務器,CANopen主節點做爲客戶端。客戶端經過索引和子索引可以訪問數據服務器上的對象字典,因此CANopen主節點能夠訪問從節點的任意對象字典項的參數,而且SDO能夠傳輸任何長度的數據(當數據長度超過4字節時,拆分紅多個報文來傳輸)。
過程數據對象用來傳輸實時數據,其傳輸模型爲生產者-消費者模型,數據長度被限制爲1~8字節。
PDO通訊對象具備以下特色:
1) PDO通訊參數:定義該設備所使用的COB-ID、傳輸類型、定時週期。
2) PDO映射參數:包含一個對象字典中的對象列表,這些對象映射到相應的PDO,其中包括數據的長度。對於生產者和消費者,只有知道這個映射參數,纔可以正確地解釋PDO的內容。PDO內容是預約義的,若是PDO支持可變PDO映射,那麼能夠經過SDO進行配置。
1) 同步傳輸:經過接收同步對象實現同步,按觸發方式又可分爲非週期傳輸和週期傳輸。非週期傳輸由遠程幀預觸發,或者由設備子協議中規定的對象特定事件預觸發。週期傳輸則經過接收同步對象來實現,能夠設置1~240個同步對象觸發。
2) 異步傳輸:由特定事件觸發。按觸發方式又可分爲2種:一種經過發送與PDO的COB-ID相同的遠程幀來觸發;另外一種由設備子協議中規定的對象特定事件來觸發(如定時傳輸、數據變化傳輸等)。
預約義報文或特殊功能對象爲CANopen設備提供特定的功能,以方便CANopen主站對從站的管理。在CANopen協議中,已經爲特殊的功能預約義了COB-ID。主要有如下幾種特殊報文:
主要實現整個網絡的同步傳輸,每一個節點都以該同步報文做爲PDO觸發參數,所以該同步報文的COB-ID具備比較高的優先級以及最短的傳輸時間。
爲每一個節點提供公共的時間參考。
當設備內部發生錯誤時觸發該對象,即發送設備內部錯誤碼。
主節點可經過節點保護方式獲取從節點的狀態,從節點可經過壽命保護方式獲取主節點的狀態。
從節點初始化完成後向網絡中發送該對象,並進入預操做狀態。
2.3 CANopen預約義鏈接集
爲了減少簡單網絡的組態工做量,CANopen定義了強制性的缺省標識符(CAN-ID)分配表。這些標識符在預操做狀態下可用,經過動態分配能夠修改它們。CANopen設備必須向它所支持的通信對象提供相應的標識符。
CAN-ID分配表是基於11位CAN-ID的標準幀格式,劃分爲4位功能碼和7位節點號,如圖 2‑2所示。
圖2‑2 預約義鏈接集ID
Node-ID由系統集成商定義,每一個CANopen設備都須要分配一個節點號,節點號的範圍是1~127(0不容許被使用)。
預約義鏈接集定義了4個接收PDO,4個發送PDO,1個SDO(佔用2個CAN-ID),1個緊急對象和1個節點錯誤控制。支持無需確認的NMT模塊控制服務、同步和時間標識對象報文。缺省ID分配表如表 2‑2所示。
表2‑2 CANopen預約義主/從鏈接集CAN標識符分配表
注意:
1) PDO/SDO 發送/接收是由(slave)CAN節點方觀察的。
2) NMT 錯誤控制包括節點保護(NodeGuarding),心跳報文(Heartbeat)和Boot-up協議。
3.參考資料
《CANopen:high-level protocol for CAN-bus》
《項目驅動—CAN-bus現場總線基礎教程》