CANOpen的幾種操作以及數據


其實3年前在21ic就准備做這篇文章了,那時,CANOpen也只是剛剛在國內推廣,所以幾乎沒有項目用到。現在有了實際的項目,完全確認了以前移植和測試的代碼,所以列舉一些CANOpen的底層操作以及數據。當然,列舉的都是一些簡單的基本的CANOpen通信,不包括其他CANOpen應用協議中的內容。

1.心跳
CANOpen節點會以一個固定的頻率發送心跳報文。用於告訴主機,偶還活着。。。心跳報文的格式很簡單,COB-ID為0x700+Node_ID,數據為一字節的狀態數據:

圖中,ID為706,表示06號節點的心跳,狀態是0x7F,表示Pre-Operational狀態(節點初始化完成后,進入Pre-Operational狀態)。查看時間,每個心跳報文時間間隔大概1秒。

2.NMT
NMT是管理報文,用於實現一些管理操作,比如,節點重啟、進入Operational狀態等等。NMT報文格式很簡單,ID為000,數據為一字節命令+一節節點號(0表示廣播)。

 

第2號報文就是讓06號節點,進入Operational狀態,運行完成后,節點心跳報文中的節點狀態也變為Operational狀態

 

同上,發送stop remote node命令,進入Stopped狀態,當然,心跳還是有的,只是節點不干活了

這個是reset node命令,用於讓節點復位。復位之后,會首先進入Initializing狀態(對於於心跳報文中的0x00),初始化完成后,進入Pre-Operational狀態(對應心跳報文中的0x7F)。

3.SDO
SDO 主要用來訪問節點的對象字典(OD),CANOpen的節點至少需要支持SDO_Server。對象字典是CANOpen節點的數據組織形式,包含了 CANOpen節點的各個參數和數據,比如,心跳報文的發送頻率、系統啟動次數、節點的通信參數等等等等。可以說,SDO是用來設置CANOpen節點的各個運行參數的。

 

圖中,1號報文0606: 40 17 10 00 00 00 00 00就是一個SDO_Read報文,告訴節點,要讀取的OD索引和子索引,包括數據長度。然后節點會發送對應的數據(后面的那個8字節報文)。第一個字節是一些命令的設定包括參數的設定,后2個字節是OD的索引,再后面一個字節是OD的子索引,最后4個字節是數據。上圖中,主機發送的是一個讀取OD中 1017:00位置的數據命令,這個位置存放的是心跳頻率,讀取的結果是0x03EB(1000ms)。

9號報文就是SDO_Write,寫OD中1017:00位置的數據,也就是修改心跳頻率。收到完成應答后,心跳頻率就變了(查看時間)。

4.PDO
PDO 是用來發送(TPDO)或者接收(RPDO)數據的,有幾種不同的觸發方式,比如:事件觸發、同步觸發等等。數據內容一般有CANOpen的各個應用協議規定,比如401文檔中的AI(Analog Input)數據等。PDO的數據內容是通過映射的方式在定義在OD中的,一個節點可以有多個PDO通道。PDO的通信參數也可以通過SDO訪問OD的方式來修改。

5.應急報文
應急報文用於返回一個節點上的錯誤,可以是CANOpen命令解析錯誤,等等。

待續。。。。。。


免責聲明!

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



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