當前位置:編程學習大全網 - 源碼下載 - 怎麽用代碼實現canopen的301規範

怎麽用代碼實現canopen的301規範

1、CANopen簡介

1.1.CANopen定義了應用協議,應用層,通訊協議三部分

1.2.CANopen源代碼整體架構

其中,CANopen的基本知識就不做詳細介紹,如需要了解,關註公眾號"虹科CANopen與EtherCAT知識平臺“。

CAN driver layer:主要是CAN底層驅動相關的,不同硬件平臺的CAN驅動也不壹樣,這裏使用的是CAN driver for STM32F bxCAN-Controller

CANopen stack layer:這裏是CANopen的具體實現

CCM layer:這裏時由c寫好的壹些API函數,是中間調用層,實現各類報文和參數保存等功能。

需要註意的是壹些功能的實現,需要自己添加程序,比如對1010和1011保存和恢復默認參數這部分,需要自己寫程序。是保存那部分參數?保存在Flash還是eeprom中?需要自己選擇等

2、CANopen移植流程

壹個CNAopen的應用程序壹般都遵循下列流程圖,

2.1、初始化硬件

2.2、創建數據結構(對象字典、結構體、變量、實例)等

2.3、初始化壹些服務,包括通訊參數,穿件通訊對象

2.4、在程序中,處理CANopen協議中的內容

2.5、必要時關閉CANopen layer

註意:在進圖主函數之前,程序會先進行初始化設置,比如對系統時鐘的設置。本教程使用的系統時鐘是168M,外部晶振是8M,PLL作為時鐘源。這部分的配置主要跟F407系統時鐘配置相關,這裏就不詳細說明。

CANopen源代碼移植

2.1、初始化硬件

進入主函數後,

串口初始化:對串口進行初始化設置。當程序運行是,出現錯誤時,CANopen 層會調用壹些標準函數,通過串口輸出錯誤的壹些說明,錯誤代碼,方便調試錯誤,比如錯誤代碼0x0013,查看錯誤代碼表,發現是CAN初始化錯誤,這時候就需要檢查CAN的初始化,經檢查確認是CAN的Rx和Tx在程序移植時對應的引腳不同。這樣減少了移植差錯時間。比如0x0078,這時候就要檢查PDO映射和對象字典了。

時鐘初始化:F407配置407的滴答定時器為1ms產生壹次中斷

CAN設置:選擇單CAN或者多CAN,對Rx和Tx相關引腳進行設置

2.2、CANopen Layer初始化

CcmInitCANopen這個函數初始化CANopen layer,創建數據結構,當執行完該函數時,對象字典創建成功,默認值被些人相關的索引條目中。但是對象字典的索引條目還沒連接到應用程序中,也就是調用這些索引數據這部分程序還沒完成。此時,NMT保持在初始化狀態。

設置節點ID為0x41,波特率為125k

需要註意:

把參數分裝在結構體tCcmInitParam中,需要註意的是這裏的結構體中的成員是固定不變的,所以保存在ROM中,如果需要改變節點地址或者需要通過DIP改變節點,那麽該結構體必須保存在RAM中

2.3、CANopen Layer初始化後,開始進入NMT狀態機的切換。執行CcmConnectToNet()這個函數,從初始轉態中切換到預操作狀態。

這壹部分中,當不同的xxxNMTEvent發生時,都要調用AppCbNmtEvent這個回調函數,比如上電狀態初始化,應用層復位(0x2000-0x5FFF和0x6000-0x9FFF),通訊參數復位(0x1000-0x1FFF)

註意:當使用LSS這個功能時,在進入NMT狀態機的切換前,應該先執行LSS狀態機。根據CiA DS-305協議,CcmProcessLssInitState 的返回值如果為0xFF,就標誌無效的節點,因此壹直執行循環,知道該返回值不為0xFF。當然,不需要LSS的話,這部分可以不要。

2.4、進入操作狀態,有兩種方法:壹是設備接收到進入操作狀態的報文(0x00, kNmtCommStartRemoteNode). 後者調用了CcmBootNetwork

在主函數裏面模擬數字量輸入,Ccmprocess()是CANopen協議的處理函數,包括 PDO module,LSS module,NMT master module,NMT slave module,EMCP module,HBC module,HBP module,SDOS module,SDOC module等等。

  • 上一篇:ACM國際大學生程序設計競賽的賽事意義
  • 下一篇:我是如何逃頂與抄底的?
  • copyright 2024編程學習大全網