CANopen協議 學習筆記


大綱

前沿:以問題為導向學習是最高效的,本文主要講述在學習Canopen協議中的一些疑惑點,

分享一些學習心得,不講協議本身的內容。

 

 

1.主機和從機的概念?

2.PDO和SDO的區別是什么?

3.OD存在的意義是什么?

4.心跳檢測的意義?0x00、0x05、0x7f?

5.COB-ID和PDO的ID有關系嗎?SDO的ID是主機的ID還是從機的ID?

COB-ID = Function code+node_id

6. PDO,SDO  數據存在幾個字節,心跳節點 數據存在幾個字節?

7.PDO主要關系的幾點?   觸發方式+通訊參數和映射參數

8.SDO傳輸的三種方式?

9.通訊模型 : 服務器到客戶端、消費者和生產者等。

10.CANOPEN 與CAN的不同點

 

 

 

1. 通訊模型 

  (1)服務器到客戶端 :客戶端發送數據,服務器需要回傳數據      (SDO)

  (2)消費者和生產者 :生產者發送數據,消費者不需要返回數據(PDO)

  (3)主機和從機   Canopen協議中NMT模式控制節點的狀態,啟動狀態、預准備狀態、

工作狀態、停止狀態

 

2. 主機和從機的概念

        對於從站而言發送消息給主站就是TPDO模式,其中TPDO總共有4個。

        對於從站接收主站的消息就是RPDO模式,其中RPDO總共有4個。


3. PDO 和SDO、NMT區別

  • PDO:根據模式從機選擇定時發送數據或者等數據變化在發送數據給主機,以請求主機

做出一些列相應。

        模型:生產者(producter)和消費者(comsumer)模式,接收方不會返回數據值

  • SDO:通過主機發送命令(cs+主索引+子索引+4個字節數據),對對象字典進行操作改變數據

,如改變波特率,心跳的時間以及對於模式選擇的切換,通過SDO_Handle進行處理即可。

       模型:客戶端(client) 和服務器(service)模型

  •  NMT: 主機控制節點狀態 

        狀態(4個):節點上線(boot up)、預准備節點(pre-operational)、節點運行(operational)、節點停止(stoped)

        模型:主機(host)和從機(slave)


4.OD存在的意義是什么?

        作為用戶預先定義的數據庫,實現參數的賦值給函數中的一些變量。通過功能碼SDO命令修改。

通過SDO模式可以修改對象字典中的一些值。主索引,子索引相當於書的目錄,上位機通過發送CS命令讀寫

其中的數據,實現對於全局變量的修改,如對波特率的修改、心跳時間間隔的修改等


5.心跳檢測的意義?0x00、0x05、0x7f?

      1.是主機檢測從機的方式,從機發送心跳包,主機接收到心跳包后,才會向從機發送消息

否則主機就認為從機存在故障。

       0x00    boot up   節點上線

       0x7f     節點在准備狀態

       0x05    節點在工作狀態

       0x04    節點停止狀態

                         

             通過這個的設置,上位機可以通過NMT命令控制節點的狀態,其命令中運行的參數主要就是心跳報文的狀態

=========================在編寫接收函數的時候需要考慮以下設計內容============================

1.NMT mode   主機通過命令管理從機的狀態,如節點的上線,預先准備狀態,工作狀態,停止狀態,復位狀態等等

                        1.首先通過功能模式進入NMT管理模式   COB-ID=000

                        2.buf[1]節點地址buf[0]命令碼,為什么要存在buf[1],存放的是節點的ID,判斷是不是我想控制的ID即可。

                         通過switch方式,可以控制節點的工作狀態。

                                   

2.SDO mode     主機通過命令修改相關參數實現相應的功能(節點不工作在停止狀態 0x7f)(這個描述的很抽象)

                           特別的,SDO和PDO將節點地址放在COB-ID中,主機發送命令給從機,判斷是否是相同的ID,就可以操作

                         相應的功能。SDO傳輸數據是8個字節(CS(1byte)+主索引(2byte)+子索引(1byte)+數據4byte

3.RPDO mode          前提: (heartbeat.buf[ 0 ] = 0x05),

                                 1. 如果主機發送消息,下位機接收到消息

                                 2. 復制接收到的消息給一個全局變量(為了進行數據比較,不同變量之間才可以比較)

                                 2. 從站自己做出相應的命令,如通過數據對一個引腳控制另一個引腳等等作用


6.COB-ID和PDO的ID有關系嗎?SDO的ID是主機的ID還是從機的ID?

         COB-ID = 功能碼(7bit)+節點ID(4bit)

         NMT :功能碼000

         SDO   功能碼 581和601

         PDO   功能碼  181和其他總共有8個

          Heartbeat  701


7. PDO,SDO  數據存在幾個字節,心跳節點 數據存在幾個字節?

                PDO :1~8個字節長度

                SDO存在8個字節 (CS+主索引+子索引+date)

                HEARTBEAT心跳節點存在1個字節  (存放節點狀態)

                NMT模式存在2個字節 (存放控制狀態與控制從機的ID)

             


8.PDO配置主要考慮那幾點?   觸發方式+通訊參數和映射參數

      1)觸發方式:

      1.時間觸發+事件觸發

      2.同步(sync)和異步方式

      2)通訊參數  +   映射參數 : 

             

     3)同步傳輸和異步傳輸的區別:


9.SDO傳輸的三種方式?

          SDO傳輸方式主要有兩種,快速傳輸方式和普通傳輸方式

  • 快速SDO:來回一次就能搞定,讀取和寫入的值不能大於32位

10.CANOPEN 與CAN的不同點

不同點的角度:從OSI 7層網絡模型

  • CAN(controller Area Network)只規定了物理層和數據鏈層,這些都是通過硬件實現。

普通的CAN只需要關系收發以及收發的標志位即可,收發的速度(波特率)等。

  • CANopen 規定了應用層,能夠兼容不同廠商之間進行通信的方式。

     CANopen協議規范文本經過多次修改,CiA在CiA301基礎上,對各個行業退出設備子協議

    關於設備子協議,就是對不同行業的應用對象,對CANopen內部的數據含義進行重新定義,

或添加新的控制邏輯。

下圖是描述不同協議的編號:

    下圖是CANopen協議的框架

     

 

 

 

未完待續

不忘初心,放得始終。

Date:2021-11-07  20:31:43 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM