舊文備份:簡單CANOpen 協議說明

(十年前的舊文,不捨等扔)git

建立日期:2005-11-17網絡

修改日期:2005-11-17spa

文件名稱:簡單CANOpen 協議說明.doc設計

做者:winshtonhtm

版本:V1.0對象

(注:本文以24in 24out I/O模塊爲例說明,對在單片機下實現簡單的CANopen簡單功能做分析設計,文檔中全部功能均已在AVR上實現)blog

本說明是CAN上層協議CANOpen協議的嵌入式簡化,較原始CANOpen版本簡單易用,且更適應嵌入式模塊通信的須要,而且兼容CANOpen協議。索引

下面按照協議支持的功能分別進行說明:文檔

  1. NMT網絡管理服務

    網絡管理狀態表:get

    終端主節點→從節點

    COB-ID

    0-字節

    1-字節

    0

    命令說明符

    節點ID

    (16#000)

    (CS)

    (1)

    說明:通常終端主節點是指上位機,如上位用於網絡管理和監控的PC機,從節點是指被管理的各模塊。

    若是節點ID0表示命令會被廣播至全部從節點,從節點必須執行相應的命令。

    命令說明符功能見下表:

    命令說明符(CS)

    意義

    1(16#01) 

    啓動節點進入可操做狀態

    2(16#02) 

    中止遠程節點

    128(16#80) 

    使節點進入預操做狀態

    129(16#81) 

    復位節點

    130(16#82) 

    復位通信

    例:啓動節點1進入可操做狀態,

    16#000

     

    16#80

    16#04

    網絡管理狀態表:

    狀態轉換

    說明

    (1) 

    通電後自動初始化

    (2) 

    完成初始化自動進入預操做狀態

    (3),(6) 

    啓動遠程節點

    (4),(7) 

    進入預操做狀態

    (5)(8) 

    中止遠程節點

    (9),(10),(11) 

    復位節點

    (12),(13),(14) 

    復位通信

    根據節點的狀態提供如下服務:

     

    初始化

    預操做

    可操做

    停機

    PDO 

       

     

    SDO 

     

     

    啓動引導

     

     

    網絡管理

     

    錯誤控制

     

     

     

  2. 過程數據對象(PDO)服務

    過程數據對象用於在節點之間傳送過程數據,如I/O模塊I/O狀態讀取和設定,模擬量採集和模擬量輸出等等,本協議考慮從機硬件限制最多支持4組PDO,每組包含一個RPDO和一個TPDO,現已I/O模塊爲例進行說明:

    設I/O模塊有24輸入,24輸出,24輸入經過TPDO傳給監控終端或其餘節點,24輸出經過RPDO由控制節點對其進行設定,採用發送和接收PDO1組,即標識符TPDO:0x180+NODE_ID,RPDO:0x200+NODE_ID,用3個字節就能夠表示24個I/O量,所以發送和接收PDO能夠表示以下(假設NODE_ID=1):

    1. I/O節點→監控終端(TPDO)

    COB-ID

    0字節

    1字節

    2字節

    385(0x181) 

    Data:輸入I/O狀態量

    Input_Digital_1

    Input_Digital_2

    Input_Digital_3

     

    1. I/O節點←監控終端(RPDO)

    COB-ID

    0字節

    1字節

    2字節

    513(0x201)

    Data:輸出I/O狀態量

    Output_Digital_1

    Output_Digital_2

    Output_Digital_3

    若是是8通道的模擬量採集模塊則須要兩個TPDO來傳送採集的數據,不須要RPDO,由於每一個通道產生一個16位數據,一共是16字節,每一個TPDO只可以傳送8字節。兩個TPDO標識符分別爲:0x180+NODE_ID,0x280+NODE_ID。

    每幀數據格式以下表(設NODE_ID=2):

    TPDO1

    COB-ID

    0-1字節

    2-3字節

    4-5字節

    6-7字節

    385(0x182)

    Data:輸入模擬量

    Output_Anolog_1 

    Output_Anolog_2 

    Output_Anolog_3 

    Output_Anolog_4 

     

    TPDO2

    COB-ID

    0-1字節

    2-3字節

    4-5字節

    6-7字節

    385(0x182) 

    Data:輸入模擬量

    Output_Anolog_5 

    Output_Anolog_6 

    Output_Anolog_7 

    Output_Anolog_8 

     

  3. 服務數據對象(SDO)服務

    服務數據對象用於讀寫節點的對象字典,現 只實現SDO下載和上傳的全速模式,不支持正常模式也不支持塊下載和上傳,由於數據量不大,實現的功能足夠用,SDO全速下載和上傳採用應答式服務,由監控終端向節點發送服務請求,由節點返回應答。

    現假設某節點NODE_ID=3,協議報文以下:

    讀節點OD

    假設,讀SDO index = 0x1018 subindex = 0x00,返回的是1字節data=0x04

    監控終端→節點(終端請求)

    COB-ID

    0字節

    1字節

    2字節

    3字節

    4字節

    5字節

    6字節

    7字節

    1539(0x603) 

    命令

    index

    subindex 

    Reserved(保留)

    0x40 

    0x18 

    0x10 

    0x00 

    0x00 

    0x00 

    0x00 

    0x00 

    監控終端←節點(節點應答)

    COB-ID

    0字節

    1字節

    2字節

    3字節

    4字節

    5字節

    6字節

    7字節

    1411(0x583) 

    命令

    index 

    subindex 

    數據

    湊夠8個字節

    0x4F

    0x18 

    0x10 

    0x00 

    0x04 

    0x00 

    0x00 

    0x00 

    寫節點OD

    假設,寫SDO index=0x1017,subindex=0x00,寫數據爲0x07D0

    監控終端→節點(終端請求)

    COB-ID

    0字節

    1字節

    2字節

    3字節

    4字節

    5字節

    6字節

    7字節

    1539(0x603) 

    命令

    index 

    subindex 

    要寫入的數據

    8個字節

    0x2B

    0x17

    0x10 

    0x00 

    0xD0

    0x07

    0x00 

    0x00 

    監控終端←節點(節點應答)

    COB-ID

    0字節

    1字節

    2字節

    3字節

    4字節

    5字節

    6字節

    7字節

    1411(0x583) 

    命令

    index 

    subindex 

    湊夠8個字節

    0x60 

    0x18 

    0x10 

    0x00 

    0x00 

    0x00 

    0x00 

    0x00 

    若是監控終端發送的請求,節點處理出錯,將返回SDO停止報文,報文以下:

    COB-ID

    0字節

    1字節

    2字節

    3字節

    4字節

    5字節

    6字節

    7字節

    1411(0x583) 

    命令

    index 

    subindex 

    錯誤代碼

    0x80 

    0x18 

    0x10 

    0x00 

    0-7

    8-15

    16-23

    24-31

    節點返回的錯誤代碼以下:

    SDO_ABORT_UNSUPPORTED 0x06010000UL 不支持該功能

    SDO_ABORT_NOT_EXISTS 0x06020000UL 不存在的索引

    SDO_ABORT_READONLY 0x06010002UL 只讀,不可寫

    SDO_ABORT_TYPEMISMATCH 0x06070010UL 類型不匹配

    SDO_ABORT_UNKNOWN_COMMAND 0x05040001UL 未知命令

    SDO_ABORT_UNKNOWNSUB 0x06090011UL 未知子索引

    注:命令字節含義請參考CANOpen協議文件DS301。

  4. 錯誤控制——心跳(或者叫脈動)協議(heatbeat)

    錯誤控制用於瞭解總線上各節點的狀態,本文只實現心跳協議,由各節點向監控終端按期發送心跳報文,報告本節點的狀態,報文以下:

    設節點NODE_ID=2

    節點→監控終端

    COB-ID

    0字節

    1794(0x702) 

    節點狀態

    0x00

    返回狀態以下:

    狀態代碼

    狀態含義

    0x00

    BOOTUP啓動狀態

    0x04

    STOPPED中止

    0x05

    OPERATIONAL可操做

    0x7F 

    PRE-OPERATIONAL預操做

    節點在啓動以後發出BOOTUP心跳,而後按固定頻率發出脈動消息幀,監控終端接收該報文用以檢測該節點狀態。

    參考文獻:

    1. CiA Draft Standard 401 <Device Profile for Generic I/O Modules> CAN in Automation
    2. CiA Draft Standard 301 <Application Layer and Communication Profile> CAN in Automation
    3. 周立功 <CANopen 協議介紹>
    4. 史久根 等《CAN 現場總線系統設計技術》
    5. www.microcanopen.comMicroCANopen Atmel 89C51CC01 Application Examples
相關文章
相關標籤/搜索