CANopen的相關學習

2022-07-27 23:33:27 字數 1765 閱讀 4944

由於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)

過程資料物件(pdo)服務

pdo分為tpdo和rpdo

pdo屬於過程資料,單向傳輸,無需接收節點回應can報文來確認,屬於「生產消費」模型

乙個節點分別有 4 個 tpdo 及 4 個 rpdo 。

pdo的觸發方式:

當資料變化時,立刻傳送出去,不需要等待主機輪訓才傳送,所以實時性好,而且避免重複資料占用大量匯流排占用資源,就像資料壓縮了一樣。事件驅動型別的rpdo可立即處理收到的資料。

此方式就像485通訊一樣,主控主動遠端請求或者輪詢,子裝置才傳送pdo。因為市面上有一些不支援遠端幀的can控制器,不建議使用。

can匯流排上有乙個裝置作為sync訊號的生產者,其他裝置作為消費者。生產者和消費者都又sync計數功能,消費者計數到一定時(1~240),自動傳送pdo。

顧名思義,不僅滿足定時還滿足事件觸發,才傳送pdo。

服務資料物件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

CANOpen學習筆記(一)

canopen官方介紹 學習canopen協議主要需要了解五大部分 物件字典,pdo,sdo,nmt,特殊協議。同時需要了解cob id的概念 在sdo和pdo中cob id前四位代表功能碼,後7位是node id.功能碼例如 600h表示問,580h表示答 物件字典是乙個描述了節點所有引數的有序列...

CANopen協議學習筆記一

最近在學習canopen協議,遇到一些小知識點,查閱後作為補充,記錄在此,方便以後查詢,算是讀書筆記吧。一 canopen協議中sync功能和使用 在canopen網路中應用sync要注意以下幾點 1.sync並不是主節點必須的功能,不一定要和nmt放在同一節點上,實際網路應用中可以在網路中找乙個任...

CANOpen的幾種操作以及資料

其實3年前在21ic就準備做這篇文章了,那時,canopen也只是剛剛在國內推廣,所以幾乎沒有專案用到。現在有了實際的專案,完全確認了以前移植和測試的 所以列舉一些canopen的底層操作以及資料。當然,列舉的都是一些簡單的基本的canopen通訊,不包括其他canopen應用協議中的內容。1 心跳...