CANOpen
定位:小網路,控制訊號的實時通訊
確保實時性採取的措施
-
ID域:11bit(CAN標準幀格式)
-
控制報文采用資料最小位元組數
-
採用生產消費模型(資料無需應答)
-
需要應答時,採用快速單字傳輸(一個報文最多傳輸一個32位元組引數變數)
一、協議分類
- 主從協議
- 一對多
- 無應答模式和應答模式
- 客戶端/伺服器協議(SDO)
- 單對單
- 有應答
- 生產消費協議(PDO)
- 一對多
- 推拉模式
二、通訊物件
2.1 PDO
我的觀點:一個 CANopen 裝置可以擁有最多 512 個 RPDO 和 512 個 TPDO,總共最多 1024 個 PDO。(得到GPT4o的肯定)
CiA協議棧觀點:一個只有一個邏輯裝置的 CANopen 裝置最多有 512 個 PDO。
PDO的兩種用法:
- TPDO:生產者PDO
- RPDO:消費者PDO
2.1.1 特點
小而快
2.1.2 傳輸模式
-
同步傳輸:透過(SYNC物件)來獲取同步訊號
同步TPDO的傳輸倍率:n表示經過n個同步訊號後傳送下一個訊息。(為0時,收到觸發訊號後的第一個同步訊號後進行傳送)
-
事件驅動傳輸
2.1.3 觸發模式
訊息的觸發模式
觸發方式 | 解釋 | 應用場景 |
---|---|---|
事件驅動 | 特定的事件進行驅動 | 超限報警 |
定時器驅動 | 固定的時間間隔進行傳送 | 週期性更新資料 |
遠端請求 | 其它節點透過傳送 RTR 幀來請求該裝置傳送相應的 PDO | 允許節點靈活的請求資料 |
同步觸發 | 由一定數量的Sync和內部事件觸發 | 協調多個裝置的同步操作 |
2.1.4 PDO讀寫
- 寫協議(推模式):生產者向0 ~ n個消費者寫PDO資料(參考spi寫資料)
- 讀協議(拉模式):消費者傳送RTR請求向生產者請求資料(參考spi讀資料)
PDO寫
引數 | 請求/執行 | 響應/確認 |
---|---|---|
PDO編號 | 強制 | |
資料 | 強制 |
PDO讀
引數 | 請求/執行 | 響應/確認 |
---|---|---|
PDO編號 | 強制 | |
資料 | 強制 |
2.1.5 物件描述
-
通訊引數:定義了PDO的基本特性,如COB-ID、傳輸型別、禁止時間和事件定時器等,它決定了PDO是以何種方式傳送和接收資料。
-
COB-ID:透過COB-ID可以唯一識別一個PDO訊息
- TPDO和RPDO的COB-ID是不同的
- COB-ID的最高位設定為1時,表示該PDO被禁用
-
傳輸型別(Transmission Type):PDO訊息的傳輸方式
- 同步傳輸
- 非同步傳輸
-
抑制時間(Inhibit Time):兩個PDO之間的最小時間間隔(以ms為單位)
-
事件計時器(Event Timer):定了事件觸發的週期時間,PDO在到期時傳送(表示沒有事件發生)
-
同步計數器(Sync Counter):在同步傳輸型別下使用,規定了在接收多少次同步訊號後傳送
-
-
對映引數:定義了哪些物件字典條目(變數)被包含在 PDO 訊息中,以及這些變數在訊息中的位置。
- 對映條目數:定義了一個PDO在物件字典中的條目數量,每個條目代表一個資料段
- 對映物件:每個對映物件由32位組成
- 索引(Index,16位):物件字典中的索引
- 子索引(Sub-Index, 8位):物件字典項的子索引
- 位長度(Bit Length,8位):表示對映物件的資料位數(常為位元組的整數倍)
2.1.6 PDO 傳輸例項
點我檢視
2.2 Multiplex PDO(不懂且沒看完,因資料少)
有兩種MPDO的使用方法。第一是目的地址模式(DAM)PDO,第二是源地址模式(SAM)PDO
支援接收MPDO的ANope的裝置為MPDO消費者,支援傳送MPDO的C為MPDO生產者
傳送MPDO由事件驅動,不支援定時、遠端請求和同步觸發模式
2.2.1 定址模式
- 目的地址模式(DAM):一個DAM-MPDO可以被所有該MPDO的消費者同時接收(類似於廣播),且無 應答。如果物件不存在,則生成EMCY幀。
- 源地址模式(SAM):
2.2.2 MPDO讀寫
MPDO寫
引數 | 請求/執行 | 響應/確認 |
---|---|---|
PDO編號 | 強制 | |
地址型別 | 強制 | |
Node-ID | 強制 | |
Multiplexer | 強制 | |
資料 | 強制 |
2.3 SDO
2.3.1 特點
大而慢
2.3.2 傳輸模式
傳輸模式 | 概述 | 應答模式 |
---|---|---|
快速傳輸 | 因資料小於等於4個位元組,一幀足夠傳送完,無需分段 | 一幀一答 |
段傳輸 | 把資料分割成若干個段,每一段透過單獨的幀傳送 | 每幀每答 |
塊傳輸 | 把多個段組合成一個子塊,每一子塊傳送完才接受應答訊號,所有子塊組成塊 | 每子塊每答 |
快速傳輸模式:只需要一次資料的傳送和應答就可以完成資料傳輸,效率高,但是傳輸的資料量少。
段傳輸:資料被分成多個段(segment)來傳輸,每個段最多可以包含7個位元組的資料。這種模式的實現較為簡單,適合中等長度的資料傳輸。
塊傳輸:相比段傳輸模式,塊傳輸模式能夠處理更大的資料量並且提高了傳輸效率。資料被分為多個塊(block),每個塊可以包含多個段。塊傳輸還具有校驗機制,能夠確保資料的完整性和可靠性。
協議詳解見 Or CiA301中文手冊43頁
2.4 SYNC
- 同步生產者定期廣播同步物件(SYNC)。
- SYNC提供基本的網路同步機制,遵循生產消費模型,該服務無應答。
- 傳輸1個位元組的計數器(可選)
2.5 TIME
- TIME生產者定期廣播時間戳物件(TIME)。
- TIME提供了簡單的網路時鐘。CANopen裝置透過時間戳物件來校準本地時間。
- 傳輸6個位元組的時間戳
2.6 EMCY
- 當裝置內部出現致命錯誤將觸發應急(EMCY)報文
- 由應用裝置以最高優先順序傳送到其他裝置。任何具備緊急事件監控與處理能力的從站會接收並處理緊急報文。
三、NMT
NMT主要用來管理和控制各個節點的狀態,具體協議可以分為以下四類:
- NMT protocol
- Node guard protocol
- Heartbeat protocol
- Bootup protocol
3.1 NMT protocol
該協議是CANopen中網路管理的協議,控制和管理節點的狀態,透過傳送相關報文,可以讓目標節點進入特定的工作狀態。工作狀態有以下幾種
- Initialization(初始化): 節點開始時進入初始化狀態。
- Pre-operational(預操作): 節點處於準備狀態,但不參與正常的PDO(Process Data Object)通訊。
- Operational(操作): 節點完全進入操作模式,允許PDO通訊。
- Stopped(停止): 節點停止所有的通訊。
NMT命令通常由網路管理器傳送,命令包括:
命令 | 描述 | cs值 |
---|---|---|
Start Remote Node | 將節點切換到Operational模式 | 0x01 |
Stop Remote Node | 將節點切換到Stopped模式 | 0x02 |
Enter Pre-operational | 將節點切換到Pre-operational模式 | 0x80 |
Reset Node | 重置節點,重新啟動節點 | 0x81 |
Reset Communication | 重置節點的通訊部分 | 0x82 |
其具體值為cs值(一位元組)+nodeid(一位元組)
Note : To command all the nodes, use nodeId = 00
Examples
- To put the node 0x6 in operational mode : 000 01 06
- To put all the nodes in pre-operational mode : 000 80 00
3.2 Node Guard protocol
節點監護協議(Node Guard protocol),用於主裝置監控從裝置的狀態。由主裝置定期傳送,如從節點沒在規定時間內回應,則主節點認為該節點出現了故障。(該報文中有翻轉位)
3.3 Heartbeat protocol
心跳協議(Heartbeat protocol),是節點監護協議的簡化版本,心跳協議不需要主裝置定期傳送訊息來請求從裝置回應,而是每個節點自主釋出心跳報文。(該報文中沒有翻轉位)
3.4 Bootup protocol
Bootup協議是CANopen節點在啟動時,通知主裝置其狀態的協議,在初始化進入預操作狀態時,該節點會傳送Bootup表示節點已經初始化完成,並且可以接收管理指令。