CANopen是一種架構在控制局域網路(Controller Area Network, CAN)上的高層通信協定,包括通信子協定及設備子協定常在嵌入式系統中使用,也是工業控制經常使用到的一種現場總線。服務器
因爲CAN總線只定義了物理層和數據鏈路層,並無定義應用層,所以須要CANopen通訊協議來統一度量,把各類設備標準化。CANopen 實現了OSI模型中的網絡層以上(包括網絡層)的協定。網絡
標準的 CANopen 頁框:數據結構
CANopen 將 CANbus 的 11 位元 ID 稱爲通信對象 ID (COB-ID)。分爲 4 位元的功能碼及 7 位元的 CANopen 節點 ID。架構
7 位元的 ID 共有 128 種不一樣的組合,其中 ID 0 不使用,所以一個 CANopen 網絡上最多容許 127 臺設備。對象
應用CANopen時,須要傳遞的配置信息和應用信息都放在過程數據對象PDO(Process data object)和服務數據對象SDO(Service data object)blog
過程數據對象(PDO)服務索引
PDO分爲TPDO和RPDO事件
PDO屬於過程數據,單向傳輸,無需接收節點回應CAN報文來確認,屬於「生產消費」模型資源
一個節點分別有 4 個 TPDO 及 4 個 RPDO 。同步
PDO的觸發方式:
服務數據對象SDO
服務數據對象用於讀寫節點的對象字典,現只實現SDO下載和上傳的全速模式,不支持正常模式也不支持塊下載和上傳,由於數據量不大,實現的功能足夠用,SDO全速下載和上傳採用應答式服務,由監控終端向節點發送服務請求,由節點返回應答。
SDO屬於服務數據,「服務器客戶端」模型,輪詢式
SDO傳送機制:
加速傳送(Expedited transfer):最多傳輸4字節數據
分段傳送(Segmented transfer):傳輸數據長度大於4字節
塊傳送(Block transfer):當傳送數據長度大於4字節時,多個分段只由一個確認報文應答以增長總線吞吐量
對象字典OD
CANopen 設備都須要具有對象字典(Obiect Dictionary),用來設定設備組態及進行非即時的通信。
是一個有序的對象組,每一個對象採用一個16位的索引值來尋址,爲了容許訪問數據結構中的單個元素,同時定義了一個8位的子索引。
三個子協議:
通訊子協議描述對象字典的主要形式,以及對象字典中的通訊對象和參數。適用於全部的CANopen設備,索引值範圍爲0x1000~0x1FFF
製造商自定義子協議根據需求定義對象字典項,索引值範圍爲0x2000~0x5FFF
設備子協議爲各類不一樣類型的設備定義對象字典中的對象,其索引值範圍爲0x6000~0x9FFFF