|
其實(shí)3年前在21ic就準(zhǔn)備做這篇文章了,那時(shí),CANOpen也只是剛剛在國內(nèi)推廣,所以幾乎沒有項(xiàng)目用到?,F(xiàn)在有了實(shí)際的項(xiàng)目,完全確認(rèn)了以前移植和測試的代碼,所以列舉一些CANOpen的底層操作以及數(shù)據(jù)。當(dāng)然,列舉的都是一些簡單的基本的CANOpen通信,不包括其他CANOpen應(yīng)用協(xié)議中的內(nèi)容。 圖中,ID為706,表示06號(hào)節(jié)點(diǎn)的心跳,狀態(tài)是0x7F,表示Pre-Operational狀態(tài)(節(jié)點(diǎn)初始化完成后,進(jìn)入Pre-Operational狀態(tài))。查看時(shí)間,每個(gè)心跳報(bào)文時(shí)間間隔大概1秒。 第2號(hào)報(bào)文就是讓06號(hào)節(jié)點(diǎn),進(jìn)入Operational狀態(tài),運(yùn)行完成后,節(jié)點(diǎn)心跳報(bào)文中的節(jié)點(diǎn)狀態(tài)也變?yōu)镺perational狀態(tài)
同上,發(fā)送stop remote node命令,進(jìn)入Stopped狀態(tài),當(dāng)然,心跳還是有的,只是節(jié)點(diǎn)不干活了
這個(gè)是reset node命令,用于讓節(jié)點(diǎn)復(fù)位。復(fù)位之后,會(huì)首先進(jìn)入Initializing狀態(tài)(對于于心跳報(bào)文中的0x00),初始化完成后,進(jìn)入Pre-Operational狀態(tài)(對應(yīng)心跳報(bào)文中的0x7F)。
圖中,1號(hào)報(bào)文0606: 40 17 10 00 00 00 00 00就是一個(gè)SDO_Read報(bào)文,告訴節(jié)點(diǎn),要讀取的OD索引和子索引,包括數(shù)據(jù)長度。然后節(jié)點(diǎn)會(huì)發(fā)送對應(yīng)的數(shù)據(jù)(后面的那個(gè)8字節(jié)報(bào)文)。第一個(gè)字節(jié)是一些命令的設(shè)定包括參數(shù)的設(shè)定,后2個(gè)字節(jié)是OD的索引,再后面一個(gè)字節(jié)是OD的子索引,最后4個(gè)字節(jié)是數(shù)據(jù)。上圖中,主機(jī)發(fā)送的是一個(gè)讀取OD中 1017:00位置的數(shù)據(jù)命令,這個(gè)位置存放的是心跳頻率,讀取的結(jié)果是0x03EB(1000ms)。 4.PDO PDO 是用來發(fā)送(TPDO)或者接收(RPDO)數(shù)據(jù)的,有幾種不同的觸發(fā)方式,比如:事件觸發(fā)、同步觸發(fā)等等。數(shù)據(jù)內(nèi)容一般有CANOpen的各個(gè)應(yīng)用協(xié)議規(guī)定,比如401文檔中的AI(Analog Input)數(shù)據(jù)等。PDO的數(shù)據(jù)內(nèi)容是通過映射的方式在定義在OD中的,一個(gè)節(jié)點(diǎn)可以有多個(gè)PDO通道。PDO的通信參數(shù)也可以通過SDO訪問OD的方式來修改。 5.應(yīng)急報(bào)文 應(yīng)急報(bào)文用于返回一個(gè)節(jié)點(diǎn)上的錯(cuò)誤,可以是CANOpen命令解析錯(cuò)誤,等等。 待續(xù)。。。。。。 |
|
|