canopen部分 1 簡(jiǎn)介
1.?canopen與cia301協(xié)議
CAN報(bào)文可以分為數(shù)據(jù)部分和ID部分,因?yàn)槎嗔薎D協(xié)議的制定可以更加靈活,各個(gè)廠家可以根據(jù)自己的喜好進(jìn)行編寫協(xié)議.
所以就會(huì)出現(xiàn)各種各樣的用法,各種各樣的協(xié)議.
CANopen是一個(gè)上層的協(xié)議.目的是為了消除這種亂糟糟的場(chǎng)面.讓CAN報(bào)文有更加明確的分類和用途,結(jié)合特點(diǎn)發(fā)揮出最大優(yōu)勢(shì).所以產(chǎn)生了cia301協(xié)議.cia301基本上就等同于CANopen了.
Cia301協(xié)議是CANopen最基礎(chǔ)的協(xié)議.它規(guī)定了ID和報(bào)文的分類用法,之后大家都按照這個(gè)協(xié)議去做.
CAN通信的一個(gè)特點(diǎn)是有ID.針對(duì)ID,CANopen做了下面的功能:


Cia301協(xié)議中根據(jù)ID的不同,區(qū)分不同種類報(bào)文,主要?jiǎng)澐至讼旅鎺最?/span>:
SDO :服務(wù)器---客戶端模式,用于通信,主要用于配制參數(shù).
PDO :生產(chǎn)者---消費(fèi)者模式用于通信.
NMT :網(wǎng)絡(luò)管理.用于切換節(jié)點(diǎn)工作狀態(tài).
……
?
上面的報(bào)文就是通信的基礎(chǔ),通信是為了改變參數(shù).
傳輸過(guò)程中的數(shù)據(jù),總要有個(gè)地方進(jìn)行保存,CANopen一般把傳輸中的數(shù)據(jù)存到”字典”(即OD)里.字典是CANopen另一個(gè)重要的概念,字典里面存有參數(shù)和狀態(tài).
?字典可以看成是一個(gè)儲(chǔ)物柜.儲(chǔ)物柜里面有很多小格子.每個(gè)格子上面都有編號(hào)(編號(hào)就是索引).索引是索引,ID是ID.不能混淆.
?
舉例:
601, 40 ff 60 00 00 00 00 00
202,e8 03
000,01 00
?
上面是三種從can總線上接收的報(bào)文.
?
怎么去解讀,601, 40 ff 60 00 00 00 00 00
首先看ID,查找cia301手冊(cè),
可以知道601h是可以拆分成600+1.
1代表向1號(hào)驅(qū)動(dòng)器發(fā)送的數(shù)據(jù).
600h代表了它是一條SDO,然后后面的8字節(jié)的數(shù)據(jù),就要按照SDO的格式去解析.并不能按照其他的報(bào)文解析.
SDO格式在cia301中也有規(guī)定,后面的數(shù)據(jù),40 ff 60 00 00 00 00 00.可以拆分:
40代表讀指令.
Ff 60是小端,正確順序是60ffh 代表索引是60ff
00是自索引
00 00 00 00是真正的數(shù)據(jù),因?yàn)檫@條指令是讀指令,所以數(shù)據(jù)默認(rèn)填0即可.
至于60ff索引00自索引里面存的是什么數(shù)據(jù),就要查看cia402協(xié)議了.
這個(gè)是字典的東西.所以查看cia402協(xié)議,這里存的是驅(qū)動(dòng)器設(shè)置的速度值.
?
怎么去解讀,202,e8 03
這里通過(guò)查詢cia301,可以知道202h拆分為200+2,
2代表向2好驅(qū)動(dòng)器發(fā)送的數(shù)據(jù).
200是PDO的ID.所以后面的數(shù)據(jù)e8 03要按照PDO的格式去拆分.
?
怎么去解讀,000,01 00
這里通過(guò)查詢cia301協(xié)議可以知道000是NMT的ID.
所以這條報(bào)文是NMT指令,需要按照NMT格式解析.
01 00 可以拆分成:
01:節(jié)點(diǎn)進(jìn)入操作模式.
00:廣播模式,通知所有節(jié)點(diǎn).
也即是讓所有驅(qū)動(dòng)器進(jìn)入操作模式.
?
ID為0x601,等于600+1,其中600就是功能碼,1就是節(jié)點(diǎn)號(hào).
功能碼600代表的是SDO的ID(沒(méi)有理由,協(xié)議規(guī)定好的,需要根據(jù)協(xié)議,記住一些常用的ID),
通過(guò)這個(gè)0x601的ID我們就可以獲得一些信息: (SDO協(xié)議的格式)
這個(gè)can報(bào)文是SDO類型的,并且是發(fā)送給1號(hào)節(jié)點(diǎn)的.
至于發(fā)送到1號(hào)節(jié)點(diǎn)的哪個(gè)索引,就需要根據(jù)CAN報(bào)文后面的數(shù)據(jù)了.
CAN除了ID,還會(huì)有8個(gè)字節(jié)數(shù)據(jù),
按照SDO格式:其中前4個(gè)字節(jié)被用作命令碼,索引和子索引,后面的4個(gè)字節(jié)才是真正的數(shù)據(jù).
?
如果ID為0x201,則201=200+1;
200是功能碼,代表PDO.
1是節(jié)點(diǎn)號(hào),代表這條報(bào)文是發(fā)送給1號(hào)節(jié)點(diǎn)的.
那么按照PDO的規(guī)則,CAN報(bào)文后面的8個(gè)數(shù)據(jù)字節(jié)(可根據(jù)情況減少,最多8個(gè)字節(jié)),都是表示數(shù)據(jù)的.
?
至于為什么600是SDO的功能碼,200是PDO的功能碼,是因?yàn)?/span>cia301協(xié)議規(guī)定好的.大家都會(huì)按照cia301協(xié)議去做.(需要記住一些常用的報(bào)文ID和字典中常用的索引)