CANopen基本理論

目錄

一、CANopen簡介

二、OD對象字典

2.1 OD對象字典簡介

2.2 CANopen預定義連接集

三、PDO過程數據對象

四、SDO過程數據對象

五、特殊協議

5.1 同步協議

5.2 時間戳協議

5.3 緊急報文協議

六、NMT網絡管理

6.1 NMT節點狀態

6.2 NMT節點上線報文

6.3 NMT心跳報文

6.4 NMT模塊控制報文


一、CANopen簡介

本文對CANopen基本理論進行總結性的簡單描述,面向初學者;

閱讀本文須先掌握CAN基本知識,本文不再贅述。

CANopen基于CAN。在OSI的7層網絡模型中,CAN僅規定了物理層和數據鏈路層,而CANopen作為其擴展,在此之上規定了應用層。


二、OD對象字典

2.1 OD對象字典簡介

對象字典(Object Dictionary)是一個有序的對象組,舉例具象化來說,每個對象就類似于一份身份信息表,記載著其具體信息:

每個對象采用一個16位索引值以尋址,類似于公民身份證。而每個公民都有其具體信息,如生日住址等,為了訪問對象數據結構的單個元素,又采用了一個8位子索引值

下表為對象字典索引區域定義,其中通訊對象子協議區及其通用通訊對象為需要關注的區域:

Index RangeDescription

0000h

保留
0001h - 025Fh數據類型
0260h - 0FFFh保留
1000h - 1FFFh通訊對象子協議區
2000h - 5FFFh制造商特定子協議區
6000h - 9FFFh標準化設備子協議區
A000h - AFFFh網絡變量
B000h - BFFFh路由網關系統變量
C000h - FFFFh保留

通訊對象子協議區:

通用通訊對象:

CANopen(NMT)主站在啟動時,通常需要讀取所有從站中通用通訊對象中的索引,所以所有的通用通訊對象都必須在CANopen從站中實現。

?

2.2 CANopen預定義連接集

對于PDO和SDO的報文ID分配,CANopen基于11位CAN-ID的標準幀格式,預定義了缺省標識符分配表:

CAN-ID / COB-ID

Function-ID

Node-ID

10

9

8

7

6

5

4

3

2

1

0

Node-ID:范圍1~127(0不允許被使用)。

預定義的連接集定義表如下所示:

SDO服務器指CANopen從節點,SDO客戶指CANopen主節點。

PDO分為TXPDO(發送PDO)和RXPDO(接收PDO),這里的發送和接收都以CANopen從節點為參考;而NMT錯誤控制包括節點守護報文,心跳報文和Boot-up協議。


三、PDO過程數據對象

PDO采用”生產者/消費者“模式,PDO數據傳送以一對一/多的方式進行。每條PDO包含了TXPDO和RXPDO,其傳送方式定義在PDO通訊參數對象字典索引:

所有的PDO傳送數據須透過對象字典映像到對應的索引區上,如圖(OD取值為舉例需要,不具備實際意義):

PDO DLC為1-8 Bytes,其傳輸方式分為:

  • 同步傳輸(通過同步報文讓所有節點同時互發);
  • 異步傳輸(通過特定事件觸發)。

四、SDO過程數據對象

SDO特點為“服務確認”,對于每個“問”都會生成一個“答”。其DLC均為8 Bytes,通訊原則為:

  • SDO客戶端發送(問)數據:COB-ID為580h+服務器Node-ID;
  • SDO服務器發送(答)數據:COB-ID為600h+服務器Node-ID。

快速SDO協議:

若讀寫數據不大于32位,可采用快速SDO,即一次問答完成數據發送:

若讀寫值超過32位,則須使用普通SDO協議進行分幀傳輸。


五、特殊協議

對于主站對從站的方便管理,CANopen中預定義了特殊報文,主要為:

  • 同步協議;
  • 時間戳協議;
  • 緊急報文協議。
5.1 同步協議

該報文對象主要實現整個網絡的同步傳輸。

DLC

CAN-ID

0-1

80h(在OD索引1006h和1007h中分別約束同步幀循環周期和同步幀發送后從節點發送PDO的時效)

5.2 時間戳協議

NMT主機發送自身時鐘,為各節點提供公共時間參考網絡對時。

DLC

CAN-ID

6

100h(存于OD索引1012h中)

5.3 緊急報文協議

設備內部發生錯誤觸發,以提示NMT主站,但不影響CANopen通訊。

DLC

CAN-ID

8

80h+Node-ID

(存于OD索引1014h中)

0 - 1

2

3 - 7

EEC(緊急錯誤代碼)

ER(錯誤寄存器)

MEF(廠商自定義錯誤代碼)


六、NMT網絡管理

6.1 NMT節點狀態

一主多從,每個CANopen從節點的CANopen協議棧中必須具備NMT網絡管理的相應代碼。

NMT網絡管理涉及CANopen節點的六種狀態:

  1. 初始化(CAN控制器初始化);
  2. 應用層復位(對象字典索引范圍2000h - FFFFh復位);
  3. 通訊復位(對象字典索引范圍1000h - 1FFFh復位);
  4. 預操作狀態(該節點CANopen通訊就緒,可通過SDO參數配置和NMT網絡管理操作,但不能PDO通信);
  5. 操作狀態(可通過SDO參數配置和NMT網絡管理操作,也可根據OD規定進行PDO通信);
  6. 停止狀態(PDO通信停止,但能SDO參數配置和NMT網絡管理操作)。

NMT網絡中的任一CANopen節點的狀態可自行切換,亦可接收NMT主機發送的NMT命令切換。

6.2 NMT節點上線報文

NMT從節點上線時必須發布NMT節點上線報文以通知NMT主節點,表示自身狀態已從初始化進入預操作。

COB-ID

DLC

Byte0

0x700 + Node-ID

1

0

6.3 NMT心跳報文

NMT從節點可通過向主站發送NMT心跳報文以確認自身是否在線和自身目前的節點狀態。

COB-ID

DLC

Byte0

Description

0x700 + Node-ID

1

04h

停止狀態

05h

操作狀態

7Fh

預操作狀態

NMT節點守護報文:NMT主站通過輪詢模式監視從站狀態,主從一應一答, 與心跳報文模式二者不能并存。

由于遠程幀在CAN發展中逐漸被淘汰,而節點守護由于需要更多的主站開銷與增加網絡負載,CiA協會已經不建議使用,被心跳報文所取代。

6.4 NMT模塊控制報文

只有NMT主節點能發送NMT模塊控制報文以切換NMT從節點狀態。

COB-ID

DLC

Byte0

Byte1

Description

0x000

2

0x01

Node-ID

啟動命令(進入操作狀態)

0x02

停止命令(進入停止狀態)

0x80

進入預操作狀態

0x81

復位節點應用層

0x82

復位CANopen通訊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73696.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73696.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73696.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Zookeeper搭建】Zookeeper分布式集群搭建完整指南

Zookeeper分布式集群搭建 (一)克隆前準備工作 一、時鐘同步 步驟: 1、輸入date命令可以查看當前系統時間,可以看到此時系統時間為PDT(部分機器或許為EST),并非中國標準時間。我們在中國地區…

MVC基礎概念及相應代碼示例

(舊的)代碼實現方法 一個功能模塊的代碼邏輯(顯示處理,數據處理,邏輯判定)都寫在一起(耦合) (新的)代碼MVC分層實現方法 顯示部分實現(View視圖) 數據處理實…

nginx優化(持續更新!!!)

1.調整文件描述符 # 查看當前系統文件描述符限制 ulimit -n# 永久修改文件描述符限制 # 編輯 /etc/security/limits.conf 文件,添加以下內容 * soft nofile 65535 * hard nofile 65535# 編輯 /etc/sysctl.conf 文件,添加以下內容 fs.file-max 655352.調…

apache連接池機制討論

apache連接池的連接有效性 server一般會配置keep-alive超時時間,過了這個時間還沒新請求到來,則關閉連接。客戶端從連接池里拿出連接時,會檢查一下連接是否已關閉,如已關閉,會丟棄掉該連接,并嘗試從連接池…

【QT5 多線程示例】條件變量

文章目錄 條件變量使用 wakeOne()使用 wakeAll() 條件變量 QT的條件變量類是QWaitCondition,有wakeOne() 和 wakeAll() 兩個方法 wakeOne():僅喚醒一個等待的線程。wakeAll():喚醒所有等待的線程。 使用 wakeOne() https://github.com/Bi…

備賽藍橋杯之第十六屆模擬賽第1期職業院校組第四題:世紀危機(人口增長推算)

提示:本篇文章僅僅是作者自己目前在備賽藍橋杯中,自己學習與刷題的學習筆記,寫的不好,歡迎大家批評與建議 由于個別題目代碼量與題目量偏大,請大家自己去藍橋杯官網【連接高校和企業 - 藍橋云課】去尋找原題&#xff0…

從零構建大語言模型全棧開發指南:第三部分:訓練與優化技術-3.2.3預訓練任務設計:掩碼語言建模(MLM)與下一句預測(NSP)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 3.2.3 預訓練任務設計:`掩碼語言建模(MLM)`與下一句預測(NSP)1. 掩碼語言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理與數學形式1.2 高級掩碼優化技術1.2.1 `Span Masking(SpanBER…

OpenBMC:BmcWeb 生效路由2 Trie字典樹

OpenBMC:BmcWeb 生效路由1 基于method分類路由_openbmc web-CSDN博客 可以看到,在internalAdd中: std::vector<BaseRule*> rules; rules.emplace_back(ruleObject); trie.add(rule, static_cast<unsigned>(rules.size() - 1U)); ruleObject首先被放入了每個meth…

Appium中元素定位之一組元素定位API

應用場景 和定位一個元素相同&#xff0c;但如果想要批量的獲取某個相同特征的元素&#xff0c;使用定位一組元素的方式更加方便 在 Appium 中定位一組元素的 API 與定位單個元素的 API 類似&#xff0c;但它們返回的是一個元素列表&#xff08;List<MobileElement>&am…

第五周日志-重新學匯編(2)

機器語言 匯編語言(直接在硬件上工作——硬件系統結構&#xff09;&#xff1a; 1.機器語言 每一種微處理器硬件設計和內部結構不同&#xff08;決定了電信號不同&#xff0c;進而需要不同的機器指令&#xff09; #早期通過紙帶機/卡片機輸入計算機&#xff0c;進行運算 2…

【9】Strongswan collections —— enumerator

//以目錄枚舉為例子&#xff0c;說明enumerator&#xff0c;從源碼剝離可運行 #include <stdio.h> #include <stdbool.h> #include <dirent.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h&…

談談對spring IOC的理解,原理和實現

一、IoC 核心概念 1. 控制反轉&#xff08;Inversion of Control&#xff09; 傳統編程中對象自行管理依賴&#xff08;主動創建&#xff09;&#xff0c;而IoC將控制權轉移給容器&#xff0c;由容器負責對象的創建、裝配和管理&#xff0c;實現依賴關系的反向控制。 2. 依賴…

【Hugging Face 開源庫】Diffusers 庫 —— 擴散模型

Diffusers 的三個主要組件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函數callback_on_step_end 管道回調函數 2. 預訓練模型架構和模塊UNetVAE&#xff08;Variational AutoEncoder&#xff09;圖像尺寸與 UNet 和 VAE 的關系EMA&#xff08;Exponential Moving…

甘肅旅游服務平臺+論文源碼視頻演示

4 系統設計 4.1系統概要設計 甘肅旅游服務平臺并沒有使用C/S結構&#xff0c;而是基于網絡瀏覽器的方式去訪問服務器&#xff0c;進而獲取需要的數據信息&#xff0c;這種依靠瀏覽器進行數據訪問的模式就是現在用得比較廣泛的適用于廣域網并且沒有網速限制要求的小程序結構&am…

路由選型終極對決:直連/靜態/動態三大類型+華為華三思科配置差異,一張表徹底講透!

路由選型終極對決&#xff1a;直連/靜態/動態三大類型華為華三思科配置差異&#xff0c;一張表徹底講透&#xff01; 一、路由&#xff1a;互聯網世界的導航系統二、路由類型深度解析三者的本質區別 三、 解密路由表——網絡設備的GPS華為&#xff08;Huawei&#xff09;華三&a…

【RAG綜述系列】之 RAG 相關背景和基本原理

系列文章&#xff1a; 【RAG綜述系列】之 RAG 相關背景和基本原理 【RAG綜述系列】之 RAG 特點與挑戰以及方法與評估 【RAG綜述系列】之 RAG 先進方法與綜合評估 【RAG綜述系列】之 RAG 應用和未來方向 正文&#xff1a; 檢索增強生成&#xff08;Retrieval-Augmented Gen…

CMake 構建的Qt 項目中的構建套件的配置

在Qt 框架中&#xff0c;使用CMake 構建工具時&#xff0c;需要自己給構建套件添加相關配置&#xff0c;否則已經添加的構建套件將不可選擇使用。 創建CMake 項目后&#xff0c;如果打開項目配置時&#xff0c;出現如下構建套件不可選的情況&#xff0c; 需要先確認是否安裝…

本地化智能運維助手:基于 LangChain 數據增強 和 DeepSeek-R1 的K8s運維文檔檢索與問答系統 Demo

寫在前面 博文內容為基于 LangChain 數據增強 和 Ollams 本地部署 DeepSeek-R1實現 K8s運維文檔檢索與問答系統 Demo通過 Demo 對 LEDVR 工作流&#xff0c; 語義檢索有基本認知理解不足小伙伴幫忙指正 &#x1f603;,生活加油 我看遠山&#xff0c;遠山悲憫 持續分享技術干貨…

Kotlin when 表達式完全指南:從基礎到高級的12種實戰用法

掌握 when 的靈活運用&#xff0c;告別繁瑣的 if-else 鏈 以下是 Kotlin 中 when 表達式的 12種核心用法 的全面總結&#xff0c;涵蓋基礎到高級場景&#xff0c;并附帶實用示例&#xff1a; 一、基礎用法 1. 替代 Java 的 switch-case when (x) {1 -> println("一&qu…

新加坡 PSB 認證:安全標準、證書特點及申請注意事項

目錄 什么是PSB認證&#xff1f; 涉及產品范圍 強制性認證產品類別 自愿性認證產品 認證項目與測試標準 1. 安全測試 2. 電磁兼容性&#xff08;EMC&#xff09;測試 3. 能效測試&#xff08;特定產品&#xff09; 認證流程詳解 第一步&#xff1a;準備階段 第二步&a…