can的數據幀結構:
canopen在can幀基礎上詳細分配了COB_ID和數據域的用法
通常我們所指 的幀ID就是COB_ID,COB_ID(11bits)=功能碼(4bits)+Node_ID(7bit),這個也在理論上說明了can最多可以有 127 個節(jié)點。不過,在實際應用中,最大節(jié)點數量取決于所用 CAN 收發(fā)器的性能。
功能碼解釋:
剛接觸canopen時候對功能碼都不是很了解。簡單來說功能碼就是指明了每一個can幀的作用,是SDO還是PDO?是TPDO還是RPDO?,比如:
can幀ID SDO標準結構:
600h+Node_ID: 主站發(fā)往從站
580h+Node_ID: 從站回復主站
can幀ID PDO標準結構:
TPDO : 180h+Node_ID RPDO: 200h+Node_ID
280+Node_ID 300h+Node_ID
380+Node_ID 400h+Node_ID
480+Node_ID 500h+Node_ID
有了基本的SDO,PDO格式后,我們放上一張canopen對象字典結構圖:
每個 PDO 在對象字典中由兩個對象描述:通信參數和映射參數。
PDO 通信參數指明使用哪個 COB-ID,傳輸類型,禁用時間和定時時間;
PDO 映射參數用于設定 PDO報文中的數據的映射關系,確定要傳輸的數據在 CAN 報文數據域中的定位。該參數允許 PDO 的生產者和消費者知道正在傳輸什么信。
一個 PDO 最多可以映射 4 個對象。
接下來我們在量詳細說明一下通用子協(xié)議 區(qū)域 是怎樣定義的:
通用子協(xié)議 區(qū)域在對象字典中的索引為1000-1FFFh。其中
1400-15FFh 設置RPDO 通訊參數
1600-17FFh 設置RPDO映射參數
1800-19FFh 設置TPDO通訊參數
1A00-1BFFh 設置TPDO映射參數
下面我們以表格的的形式更加直觀的說明一個PDO配置需要在哪些地方操作:
表格里面的額參數對應請參考對象字典通用子協(xié)議 區(qū)域.
PDO 映射流程:
1、設置 PDO 對應映射參數(1600 h 或 1601 h 或 1A00 h 或 1A01 h)子索引 0 的內容為 0;
2、修改 PDO 對應映射參數(1600 h 或 1601 h 或 1A00 h 或 1A01 h)子索引 1~4 的內容,映射
數據;
3、設置 PDO 對應映射參數(1600 h 或 1601 h 或 1A00 h 或 1A01 h)子索引 0 的內容為合法的
數字(該 PDO 映射的對象數)。
4、 PDO 映射完成。
PDO 可以有多種傳送方式:
同步(通過接收 SYNC 對象實現同步)
周期:傳送在每 1 到 240 個 SYNC 消息后觸發(fā)
異步: 由設備子協(xié)議中規(guī)定的對象特定事件觸發(fā)傳送。
一個 PDO 可以指定一個禁止時間,即定義兩個連續(xù) PDO 傳輸的最小間隔時間,避免由于高優(yōu)先級信
息的數據量太大,始終占據總線,而使其它優(yōu)先級較低的數據無力競爭總線的問題。禁止時間由 16 位無
符號整數定義 符號整數定義,單位 100us。
一個 PDO 可以指定一個事件定時周期,當超過定時時間后,一個 PDO 傳輸可以被觸發(fā)(不需要觸發(fā)
位)。事件定時周期由 16 位無符號整數定義,單位 1ms。
接下來我們通過一個例子說明配置一個PDO的具體操作:
通過SDO配置1個 RPDO映射為 6040h,步驟如下:(假設我們的設備節(jié)點ID為10)
60A 2F 00 16 00 00 00 00 00 //RPDO1 stop
60A 23 00 16 01 10 00 40 60 //6040h,長度為16個字節(jié)
60A 2F 00 16 00 01 00 00 00 / / RPDO1 enable
設置 PDO 通訊參數
PDO1(發(fā)送)為異步周期性類型 ? transmission_type (1800 h:02 h)= FF h
60A 2F 0018 02 FF 00 00 00
禁止時間 2ms(20×100us) ? inhibit_time (1800 h:03 )=14h
60A 2F 00 18 03 14 00 00 00
周期時間 10ms(10×1ms) ? event_time (1800 h:05 h)= 0A h
60A 2F 00 18 05 0A 00 00 00
這樣我們就配置完成了一個PDO。
我們還需要為RPDO配置COB_ID映射,要不我們會不知道這一幀數據要發(fā)送給哪個節(jié)點使用:
60A 23 00 14 01 0A 02.。
PDO 配置完成后,如果要使配置的生效,需要復位通訊(Reset Communication)。NMT 管理:
00 82 0A //使節(jié)點號為 A 的驅動器通訊復位;
再啟動通訊
00 01 0A // //使能節(jié)點A
這樣我們就可以通過幀ID為20A的RPDO對電機6040(控制字)進行配置啦。比如使能電機:
601 2B 40 60 00 06 00 00 00 //設置 6040h 為 6
601 2B 40 60 00 07 00 00 00 //設置 6040h 為 7
601 2B 40 60 00 0F 00 00 00 //設置 6040h 為 F,使電機使能;