《九》canfestival系列教程之canopen中驅(qū)動器的配置方法(二)
上面一節(jié)講解了一下原理,如果對原理不明白的可以看第一節(jié).
下面開始操作.

第一步
首先你要查手冊,看一下驅(qū)動器的can初始波特率.如果沒有波特率,就無法進(jìn)行連接.
如果懶得去查,那就不斷去切換波特率,什么時候有數(shù)據(jù)返回,就可以了.
一般返回的是設(shè)備上線報文,例如:?0x00000705? 0x00
就說明當(dāng)前驅(qū)動器是5號節(jié)點.
有了波特率和節(jié)點號,后面就是進(jìn)行參數(shù)配置了.

第二步(原理)
?先進(jìn)行讀取,讀取驅(qū)動器的原有狀態(tài).
我們的目的是要進(jìn)行配置驅(qū)動器,讓驅(qū)動器接收速度指令.
并根據(jù)傳入的速度值進(jìn)行運動.
因為是要配置驅(qū)動器的接收,所以需要配置RPDO,
一般驅(qū)動器支持多個RPDO.
我們此次使用RPDO1.
RPDO1的通訊參數(shù)索引是1400h.(ds301上規(guī)定好的)
RPDO1的映射參數(shù)索引是1600h.(ds301上規(guī)定好的)
速度的在字典中的索引是60ffh.(ds402上規(guī)定好的)
這里都是協(xié)議上規(guī)定好的,配置好之后,驅(qū)動器接收了PDO1的數(shù)據(jù),自然會找到1400h和1600h索引.從根據(jù)里面的配置解析數(shù)據(jù).如果用的是PDO2,就是1401h和1601h索引了.
1400h是PDO的通訊參數(shù),里面有6個子索引,分別代表了PDO的6個功能.
00h子索引:里面的值表示后面的子索引個功能里面,有幾個參數(shù)是有效的.如果是1,就表示01子索引有效.
01h子索引:PDO的觸發(fā)條件.
進(jìn)行數(shù)據(jù)的讀取:

讀取?索引1400? 子索引00
0x00000605 ??? ?0x4000140000000000
返回
0x00000585 ?????0x4F00140002000000
說明有2個參數(shù)

讀取?索引1400? 子索引01? ? ? ?
?0x00000605 ???? 0x4000140100000000
返回
0x00000585 ??? ?0x4300140105020000
說明,0205代表接收的id是205(注意這里是小端模式)?

讀取?索引1400? 子索引02
0x00000605 ??? ? 0x4000140200000000
返回
0x00000585 ? ? ? 0x4F001402FF000000
說明,ff代表模式.(因為是接收PDO,所以這個參數(shù)沒有作用).

讀取?索引1600? 子索引00
0x00000605 ? ? ?0x4000160000000000
返回
0x00000585 ? ? ?0x4F00160001000000
說明,01代表有一個參數(shù).

讀取?索引1600? 子索引01
0x00000605 ? ? ?0x4000160100000000
返回
0x00000585 ? ?? 0x4300160110004060
說明,10?00?40 60,因為是小端模式,所以正確順序為:0x60 40 00 10.
6040代表索引,00代表子索引,10代表類型.

第三步(向字典中寫入數(shù)據(jù),確定PDO映射關(guān)系)
寫入數(shù)據(jù)是有一套流程的.
這一步驟非常關(guān)鍵,它是配置PDO數(shù)據(jù)含義的,配置完成之后pdo傳輸?shù)臄?shù)據(jù),就會按照配置好的意義解析.它決定了PDO這個"列車"上面載了什么樣的"貨物".通過這里,可以決定PDO傳輸速度還是位置等.
1.失能:? 先要失能PDO.把PDO的cob-id最高位置一.
2.消數(shù):? 把PDO的映射個數(shù)寫0.
3.映入:? 把PDO要傳輸?shù)臄?shù)據(jù)寫入字典中.
4.寫數(shù):? 把PDO中映射的參數(shù)個數(shù)寫到00子索引.
5.使能:? 把PDO中cob-id使能.
6.模式:? 把驅(qū)動器模式改成速度模式.
例子:
第1步? 失能
0x00000605 ??? ? 0x22 00 14 01 05 02 00 80
22? ? ?:不計長度的寫.(還有一種是按照個數(shù)的寫)
14?00:索引
01? ? ?:子索引
0205:要接收的PDO的id號
80? ??:最高位置一,代表失能
返回以60開頭,就是寫入成功,以80開頭就表示失敗.
第2步? 消數(shù)
0x00000605 ??? ? 0x22?00?16?00?00?00?00 00
22? ? ?:不計長度的寫.(還有一種是按照個數(shù)的寫)
16?00:索引
00? ? ?:子索引
00 00 00 00:要接收的PDO的id
返回以60開頭,就是寫入成功,以80開頭就表示失敗.
第3步? 映射進(jìn)入數(shù)據(jù)
0x00000605 ??? ? 0x22?00?16?01?20?00?ff?60
22? ? ?:不計長度的寫.(還有一種是按照個數(shù)的寫)
16?00,01:索引,子索引.
20?00?ff?60:?實際是0x60?ff 00 20,含義60ff是索引,00是子索引,20是32位無符號.驅(qū)動器接收到的數(shù)據(jù),會存入到60ff,00里面.存入的數(shù)據(jù)以32位無符號格式.因為字典在ds402中規(guī)定好了,不能更改,字典索引60ff,00的里面存儲的是速度值.所以改變這里面的值,就是改變驅(qū)動器的速度.
返回以60開頭,就是寫入成功,以80開頭就表示失敗.
第4步? 傳輸個數(shù)寫入
0x00000605 ??? ? 0x22?00?16?00?01?00?00?00
22? ? ?:不計長度的寫.(還有一種是按照個數(shù)的寫)
16?00,01:索引,子索引.
01?00?00?00:?數(shù)據(jù)個數(shù)是 0x00 00 00 01,就是傳輸一個數(shù)據(jù),一條PDO中可以包含多個數(shù)據(jù),但是這次我們只傳輸一個速度值,所以個數(shù)是1.
返回以60開頭,就是寫入成功,以80開頭就表示失敗.
第5步? PDO使能
0x00000605 ??? ? 0x22?00?14?01?05?02?00?00
22? ? ?:不計長度的寫.(還有一種是按照個數(shù)的寫)
14?00,01:索引,子索引.
05?02?00?00:因為是小端模式,轉(zhuǎn)換之后是0x00 00 02 05,這個也就是驅(qū)動器接收的cob-id號.因為最高位不是1,所以是有效的PDO.驅(qū)動器會接受以0x205開頭的can報文.
返回以60開頭,就是寫入成功,以80開頭就表示失敗.
第6步? 設(shè)置為速度模式
0x00000605 ??? ? 0x22?60?60?00?03?00?00?00
22? ? ?:不計長度的寫.(還有一種是按照個數(shù)的寫)
60?60,00:索引,子索引.
03?00?00?00:03代表了速度模式.
返回以60開頭,就是寫入成功,以80開頭就表示失敗.

第四步(用PDO傳輸數(shù)據(jù),驗證結(jié)果)
用PDO傳輸數(shù)據(jù),
本次實驗是電腦用PDO傳輸速度給驅(qū)動器,
驅(qū)動器接收PDO速度,以該速度進(jìn)行電機驅(qū)動.
因為驅(qū)動器配置成了5號節(jié)點.
所以,PDO的格式為:
0x00000205 ? ? ?0xe803000000000000
0x00000205:?標(biāo)識符? 或者叫做? id? 或者叫做? COB-ID.
? ? ? ? ? ? ? ? ? ? ? 這里可以拆解成兩部分200+5,
? ? ? ? ? ? ? ? ? ? ? 200代表功能碼,表示該條報文為PDO傳輸數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? 5代表節(jié)點號,因為驅(qū)動器被配制成第五節(jié)點.
?0xe803000000000000:? 數(shù)據(jù),因為是小端,所以正確順序為0x03e8,就是10進(jìn)制的1000.
綜上,該條指令的意思就是,向5號驅(qū)動器,用PDO的方式發(fā)送1000這一數(shù)據(jù).
數(shù)據(jù)"1000"代表什么含義,PDO指令并沒有說明,因為傳輸雙方,在配置字典的時候就已經(jīng)規(guī)定PDO1傳輸?shù)臄?shù)據(jù)是0x60ff里的數(shù)據(jù)(也就是ds402中規(guī)定的速度),所以傳輸雙方"心知肚明".