CANopen從站協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
摘要:CANopcn作為一種開(kāi)放性好、標(biāo)準(zhǔn)化、低成本的基于CAN總線的應(yīng)用層協(xié)議,目前已經(jīng)廣泛地應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域。文章根據(jù)CANop-en DS301應(yīng)用層協(xié)議規(guī)范,在以C8051F500單片機(jī)為控制核心的開(kāi)發(fā)平臺(tái)上建立了CANopen從節(jié)點(diǎn)協(xié)議??偪蚣?,并實(shí)現(xiàn)了其中的各種功能模塊,整合成完整的協(xié)議棧,在搭建的實(shí)驗(yàn)平臺(tái)上進(jìn)行了協(xié)議棧的測(cè)試,實(shí)驗(yàn)表明:該協(xié)議棧功能完整,實(shí)時(shí)性滿足使用要求。
關(guān)鍵詞:CANopen;C8051F500;從站協(xié)議
0 引言
隨著現(xiàn)代工業(yè)的發(fā)展,控制系統(tǒng)的規(guī)模與復(fù)雜度成倍增長(zhǎng),數(shù)據(jù)傳輸?shù)耐掏铝亢涂煽啃砸笠搽S之提升,現(xiàn)場(chǎng)總線技術(shù)就是在這種情況下被提出并迅速發(fā)展起來(lái)的。CAN總線是現(xiàn)場(chǎng)總線國(guó)際標(biāo)準(zhǔn)之一,它具有可靠性好、實(shí)時(shí)性高、抗干擾能力較強(qiáng)等優(yōu)點(diǎn),廣泛應(yīng)用于汽車和工業(yè)控制領(lǐng)域。但由于其只定義了物理層和數(shù)據(jù)鏈路層,并非一個(gè)完整的協(xié)議,在高級(jí)應(yīng)用中需要應(yīng)用層的支持,于是CANopen標(biāo)準(zhǔn)應(yīng)運(yùn)而生。
CANopen是自動(dòng)化CAN用戶和制造商協(xié)會(huì)(CiA,CAN-in-Automation)定義的CAN總線應(yīng)用層協(xié)議。它采用面向?qū)ο蟮乃枷朐O(shè)計(jì),具有很好的模塊化特性和很高的適應(yīng)性。CANopcn不僅定義了應(yīng)用層和通信子協(xié)議,還為大多數(shù)重要的設(shè)備類型定義了大量的規(guī)范,不同廠商遵循這些規(guī)范開(kāi)發(fā)出的設(shè)備之間能夠輕易實(shí)現(xiàn)互操作。
CANopen作為基于CAN總線的高層協(xié)議標(biāo)準(zhǔn),在發(fā)布后不久就獲得了廣泛的承認(rèn)。尤其是在歐洲,CANopcn協(xié)議被認(rèn)為是在基于CAN的工業(yè)系統(tǒng)中占據(jù)領(lǐng)導(dǎo)地位的標(biāo)準(zhǔn)。
1 CANopen協(xié)議總體框架
CANopen協(xié)議棧主要包含了兩部分,一部分是通信規(guī)范,另一部分是設(shè)備規(guī)范。通信規(guī)范(CiA:DS-3011定義了基本的數(shù)據(jù)通信方式和特性,設(shè)備規(guī)范(CiA DSP 401-DSP4XX)則針對(duì)不同的設(shè)備類型進(jìn)行了報(bào)文ID的分配和設(shè)備特征數(shù)據(jù)的定義,規(guī)范了設(shè)備的行為規(guī)范。其中通信規(guī)范是通用的,本文設(shè)計(jì)與實(shí)現(xiàn)的就是這一部分。
在通信規(guī)范中,為了互操作性和兼容性,CANopcn設(shè)備都必須遵從標(biāo)準(zhǔn)的CANopen設(shè)備模型來(lái)進(jìn)行軟件設(shè)計(jì),如圖1所示。
CAN通信接口通過(guò)操作CAN控制器,在總線上收發(fā)各種通信對(duì)象,來(lái)實(shí)現(xiàn)與其他CANopen節(jié)點(diǎn)基于協(xié)議規(guī)范的數(shù)據(jù)交互;對(duì)象字典是CANop-cn設(shè)備的核心,存儲(chǔ)節(jié)點(diǎn)所有的信息,并向應(yīng)用程序和通信對(duì)象提供訪問(wèn)接口;通信部分通過(guò)對(duì)對(duì)象字典進(jìn)行操作,與其他節(jié)點(diǎn)交換各種通信對(duì)象實(shí)現(xiàn)CANopen操作;應(yīng)用程序由用戶根據(jù)應(yīng)用要求和設(shè)備的具體任務(wù)自己實(shí)現(xiàn)。
2 CANopen功能模塊實(shí)現(xiàn)
2.1 CAN驅(qū)動(dòng)程序?qū)崿F(xiàn)
針對(duì)C8051F500單片機(jī),實(shí)現(xiàn)了CAN驅(qū)動(dòng)程序。CAN驅(qū)動(dòng)程序負(fù)責(zé)完成CAN控制器的操作、報(bào)文收發(fā)、CAN錯(cuò)誤處理等任務(wù),由以下部分組成:1)CAN控制器的初始化,主要對(duì)CAN控制器的相關(guān)寄存器進(jìn)行配置,包括波特率的設(shè)置,消息對(duì)象的配置,接收、發(fā)送屏蔽寄存器的設(shè)置;2)CAN發(fā)送程序,任務(wù)是將打包好的數(shù)據(jù)根據(jù)幀標(biāo)識(shí)符,通過(guò)接口寄存器分發(fā)到相應(yīng)的郵箱里,然后啟動(dòng)發(fā)送;3)CAN接收程序,由CAN中斷處理程序來(lái)完成,負(fù)責(zé)將報(bào)文分配給各個(gè)通信模塊處理。
2.2 對(duì)象字典實(shí)現(xiàn)
對(duì)象字典OD(Object Dictionary)是一個(gè)有序的對(duì)象組:每個(gè)對(duì)象采用一個(gè)16位的索引值來(lái)尋址,同時(shí)定義了一個(gè)8位的子索引用于訪問(wèn)數(shù)據(jù)結(jié)構(gòu)中的單個(gè)元素。每個(gè)CANopen設(shè)備中都必須包含一個(gè)對(duì)象字典。對(duì)象字典分為了兩部分,通用的通信子協(xié)議區(qū)域和特定的設(shè)備子協(xié)議區(qū)域,前者包含了描述這個(gè)設(shè)備通信行為的所有參數(shù),后者包含了設(shè)備任務(wù)相關(guān)的所有數(shù)據(jù)。
本文設(shè)計(jì)的對(duì)象字典結(jié)構(gòu)如圖2所示。
針對(duì)單片機(jī)計(jì)算資源緊缺的特點(diǎn),對(duì)象字典實(shí)體采用二維靜態(tài)結(jié)構(gòu)體來(lái)實(shí)現(xiàn),它具有結(jié)構(gòu)簡(jiǎn)單、訪問(wèn)效率高等優(yōu)點(diǎn)。讀寫(xiě)函數(shù)與對(duì)象字典實(shí)體配套使用,目的是將對(duì)象字典封閉起來(lái),有效地杜絕非法訪問(wèn)的情況,保障對(duì)象字典的數(shù)據(jù)安全。
2.3 通信對(duì)象的實(shí)現(xiàn)
CANopcn協(xié)議規(guī)定了4類通訊對(duì)象:SDO(Service Data Objeet,服務(wù)數(shù)據(jù)對(duì)象)、過(guò)程數(shù)據(jù)對(duì)象)、NMT(NetworkManagement,網(wǎng)絡(luò)管理對(duì)象)以及特殊功能對(duì)象。
評(píng)論