大綱
前沿:以問題為導向學習是最高效的,本文主要講述在學習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