新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > CANopen從站協議的設計與實現

        CANopen從站協議的設計與實現

        作者: 時間:2013-05-31 來源:網絡 收藏

        2.3.1 PDO模塊
        PDO服務主要用來實現實時數據的傳輸,基于生產者和消費者模式,它的通信行為由通信參數決定,傳送的數據由映射參數來決定。本文實現的PDO模塊包含了三個子模塊,如圖3所示。

        本文引用地址:http://www.104case.com/article/153471.htm

        c.jpg


        建立PDO報文模塊被其他兩個模塊調用,他的任務是根據映射參數表把對象字典中對象的數據復制進PDO報文中,交由其他模塊處理,建立過程中需注意PDO報文的剩余容量。接收PDO模塊的任務是完成PDO數據的解析,將數據放入指定對象中;發送模塊負責根據協議規范,依據PDO通信參數,實現各種PDO傳輸方式,包括同步周期、同步事件預觸發、異步事件觸發等方式。
        2.3.2 SDO模塊
        SDO模塊是對象字典的遠程訪問接口,一般被用來進行節點參數配置和獲取。它基于客戶端服務器模式,每個訪問請求都必須應答,實現了可靠的點對點數據傳輸。為SDO服務設計了5個請求/應答子協議,分別是:啟動域下載/上傳、域分段下載\上傳、中止域傳送。
        本文設計的SDO模塊包含了訪問發起模塊和應答模塊。訪問發起模塊的任務是根據上層的調用發起SDO通信,實現了5個訪問子協議中的請求部分;應答模塊則解析收到的SDO報文中攜帶的命令字,實現了5個訪問子協議中的應答部分。
        2.3.3 NMT模塊
        每個節點內都運行著一個狀態機,狀態轉換由主節點控制,不同的狀態對應不同的節點任務,也對應了不同的模塊可用性。狀態轉換如圖4所示。

        d.jpg


        本文實現的從節點NMT模塊的任務是響應主站的NMT控制命令,并反饋自身狀態,匯報錯誤信息。狀態轉換模塊的流程:接收到NMT命令后,首先解析NMT命令字,檢查狀態轉換合法性,然后設置節點狀態,啟停各功能模塊:狀態反饋模塊采用了CiA組織推薦使用的心跳模式,即從節點周期性地向網絡上發送包含自身狀態信息的心跳報文,供主站和其他節點監視。
        2.3.4 總體流程
        借助于狀態機,設計了如圖5的程序運行總體流程。

        e.jpg


        從節點上電啟動后,先進行必要的硬件初始化,如系統時鐘、port、CAN接口、定時器、AD等,完成后設置節點狀態為initialization,進入狀態機,軟件在狀態機內循環運行。通信初始化函數主要負責初始化從節點的對象字典,節點初始化函數則負責將節點的輸出置為上電值,設置完成后設置節點狀態為pre-operational,軟件運行至preoperational函數,這個函數的功能是協助主站完成對從節點的通信配置。當從節點收到start remote node命令后,進入operational狀態,此狀態包含了從節點的控制程序,即從節點開始正常運行,執行指定的底層任務,如數據采集、控制輸出等。若節點接收到主站的stop remote node命令,則進入stopped函數,在此狀態下從節點停止執行底層任務,等待主節點的啟動命令。

        3 實驗
        3.1 測試實驗平臺的搭建
        為了測試本文的CANopen從節點協議,搭建了基于USB-CAN模塊的測試平臺,結構如圖6所示。主站是裝有ZLGCANTest的計算機,以USB-CAN通信模塊作為CAN網絡接口,實現與從站的連接。示波器監視總線波形,通信波特率設置為500kb/s。

        f.jpg



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 蓬安县| 安图县| 新建县| 鄱阳县| 道孚县| 繁峙县| 崇义县| 中牟县| 咸宁市| 巢湖市| 德安县| 木兰县| 张掖市| 扶绥县| 松原市| 牟定县| 威海市| 哈巴河县| 乃东县| 蓬莱市| 镇原县| 连州市| 安西县| 苍南县| 名山县| 杭锦旗| 兴国县| 黄平县| 平利县| 大田县| 通山县| 屏山县| 密云县| 阜宁县| 庆元县| 康平县| 潞城市| 班玛县| 宾川县| 娄底市| 扬中市|