《電子技術應用》
您所在的位置:首頁 > 嵌入式技术 > 设计应用 > 【广州致远】嵌入式CANopen协议栈开发模块——TinyARM
【广州致远】嵌入式CANopen协议栈开发模块——TinyARM
广州致远
摘要: 介绍一种支持二次开发的CANopen从站模块的使用方法。CANopen协议作为CAN总线的应用层协议,拥有复杂的网络管理(Network Management)、实时过程数据对象(Process Data Object)、服务数据对象(Service Data Object)、预定义连接和特殊功能对象等基本功能,另外CANopen协议还定义了指示灯规范、通信安全架构、在线配置、EDS文件规范、标准设备规范等一系列的协议规范。因此开发基于CANopen协议的设备有着非常高的难度以及较长的开发周期。
Abstract:
Key words :

1 引言
  在上期文章中我們了解了一種嵌入式CANopen協(xié)議轉換模塊及其使用方法,本期文章將介紹一種支持二次開發(fā)的CANopen從站模塊的使用方法。
  CANopen協(xié)議作為CAN總線的應用層協(xié)議,擁有復雜的網絡管理(Network Management)、實時過程數(shù)據(jù)對象(Process Data Object)、服務數(shù)據(jù)對象(Service Data Object)、預定義連接和特殊功能對象等基本功能,另外CANopen協(xié)議還定義了指示燈規(guī)范、通信安全架構、在線配置、EDS文件規(guī)范、標準設備規(guī)范等一系列的協(xié)議規(guī)范。因此開發(fā)基于CANopen協(xié)議的設備有著非常高的難度以及較長的開發(fā)周期。
2 TinyARM簡介
  TinyARM模塊內置了CANopen從站協(xié)議,為用戶靈活快速設計CANopen從站,構建符合國際標準的工業(yè)現(xiàn)場總線及分布式網絡提供了更多、更好的選擇。TinyARM模塊外觀如圖1所示。


  TinyARM CANopen從站模塊提供了網絡管理(NMT)、實時數(shù)據(jù)發(fā)送(TPDO)、實時數(shù)據(jù)接收(RPDO)、服務數(shù)據(jù)對象(SDO/Server)、同步報文(SYNC)、緊急事件(EMCY)等支持,同時還能夠根據(jù)需求支持不同的協(xié)議描述規(guī)范。使用Tiny-
ARM CANopen從站模塊可快速開發(fā)基于CANopen協(xié)議的控制設備、數(shù)據(jù)采集設備等,配合CANopen系列主站設備組建CANopen網絡,迅速搭建工業(yè)現(xiàn)場總線分布式監(jiān)控系統(tǒng)。
3 TinyARM CANopen協(xié)議棧配置
  TinyARM是一款可二次開發(fā)的嵌入式模塊,提供API函數(shù)庫。CANopen協(xié)議棧也是以API函數(shù)庫形式提供,使開發(fā)者在開發(fā)CANopen設備的時候使用起來非常方便。由于CANopen協(xié)議棧會使用到相應的硬件資源,因此開發(fā)者首先需要配置CANopen協(xié)議棧硬件資源,例如CANopen RUN和ERROR指示燈所對應的I/O端口等,正確的硬件配置可使協(xié)議棧穩(wěn)定可靠地運行。
3.1 CANopen協(xié)議棧硬件資源配置
  (1)指示燈端口配置
  按照CANopen協(xié)議DS303-3的定義,CANopen從站需要使用兩種顏色的LED指示燈來指示運行和錯誤狀態(tài),運行指示燈使用綠色,錯誤指示燈使用紅色,根據(jù)實際硬件來設置LED控制端口。協(xié)議棧通過調用如表1所示的3個函數(shù)來實現(xiàn),配置文件與協(xié)議棧結構如圖2所示。


  (2)參數(shù)存儲函數(shù)
  參數(shù)存儲相對來說更復雜一些,需要根據(jù)實際硬件條件來修改相應的實現(xiàn)函數(shù),其中的_TgtCavInit、_TgtCavOpen、_TgtCavClose、_TgtCavDelete、_TgtCavCreate、_TgtCavShutDown等函數(shù)執(zhí)行對存儲器進行初始化或關閉存儲器等操作,在協(xié)議棧初始化或關閉時被調用。函數(shù)_TgtCavStore、_TgtCavRestore主要負責參數(shù)的存儲與讀取,CANopen協(xié)議棧的參數(shù)存儲以對象字典為最小單位,每存儲或恢復一次對象字典的參數(shù)都會調用存儲或恢復參數(shù)函數(shù),存儲、恢復函數(shù)與協(xié)議棧的關系如圖2所示。
3.2 設計對象字典
  設計CANopen的對象字典主要分為以下兩個步驟,其與協(xié)議棧結構關系如圖2所示。
  (1)生成對象字典
  對象字典是CANopen的核心,不同的設備描述規(guī)范或不同的應用就有不同的對象字典,因此對于一款能支持二次開發(fā)的模塊來說,根據(jù)具體需求生成相應的對象字典也是必不可少。TinyARM 中的CANopen對象字典可以通過ODBuilder軟件來生成,生成的對象字典為3個標準C文件,文件名分別為:obdcfg.h,、objdict.c、objdict.h,把工程中的同名文件覆蓋即可將CANopen的對象字典項目更改為新設定的對象字典項目,CANopen所支持的設備規(guī)范也可隨之改變。
  (2)對象字典的變量定義
  對于對象字典索引在0x1000~0x1FFF范圍內的對象字典,其變量存儲地址已經在協(xié)議棧中預定義,不需要開發(fā)者再次定義。索引在0x2000~0x9FFF之間的索引,需要重新映射變量地址,否則對象字典無法正確存儲數(shù)據(jù)。在TinyARM CANopen中,為了使開發(fā)者方便映射對象字典變量,在文件名為usrcoppardef.c的文件中定義了一個參數(shù)數(shù)組__VarTabg,將需要定義的對象字典變量地址添加到該表格中即可,其格式與使用示例如圖3所示。


3.3 預定義連接設置
  在CANopen運行時通常采用DS301所建議的預定義連接COB-ID(通信對象標識),其中預定義連接集包括PDO、SDO、NMT、SYNC以及EMCY等服務。協(xié)議棧在啟動時已經將(除RPDO和TPDO以外)一些服務的COB-ID設定為預定義連接,開發(fā)者只需要重新設定RPDO和TPDO的預定義連接即可。同樣開發(fā)者只需要在PDO預定義表格中添加項目即可,實現(xiàn)示例如圖4所示。


4 TinyARM CANopen API函數(shù)編程
  如圖5所示為CANopen協(xié)議棧工作流程圖,其中CopInit為初始化CANopen協(xié)議棧,CopBootUp發(fā)送CANopen啟動信息并且進入預操作狀態(tài),CopThread 為CANopen協(xié)議棧線程函數(shù),需要應用程序循環(huán)調用。開發(fā)者可以通過CopODRead和CopODWrite對對象字典進行讀寫操作。


      實現(xiàn)實例:圖6展示了如何啟動CANopen協(xié)議棧并使之處于運行狀態(tài)。


  開發(fā)者利用TinyARM CANopen可完全自主進行二次開發(fā),方便地實現(xiàn)各種標準CANopen從站設備。例如,數(shù)字量輸入輸出設備、電機控制設備、數(shù)字傳感器設備、織布機設備、充電設備等各種設備。使開發(fā)者在最短的時間內開發(fā)出CANopen從站設備,搶占市場先機。
      廣州致遠電子有限公司提供各種接口的CANopen接口卡、CANopen終端設備(包括數(shù)據(jù)采集,電機控制等)、CANopen分析儀、網關及網橋、OPC服務器以及基于CANopen協(xié)議的整套組網方案及應用開發(fā)。

此內容為AET網站原創(chuàng),未經授權禁止轉載。

相關內容