CANopen從站協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
2.3.1 PDO模塊
PDO服務(wù)主要用來實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)的傳輸,基于生產(chǎn)者和消費(fèi)者模式,它的通信行為由通信參數(shù)決定,傳送的數(shù)據(jù)由映射參數(shù)來決定。本文實(shí)現(xiàn)的PDO模塊包含了三個(gè)子模塊,如圖3所示。本文引用地址:http://butianyuan.cn/article/153471.htm
建立PDO報(bào)文模塊被其他兩個(gè)模塊調(diào)用,他的任務(wù)是根據(jù)映射參數(shù)表把對(duì)象字典中對(duì)象的數(shù)據(jù)復(fù)制進(jìn)PDO報(bào)文中,交由其他模塊處理,建立過程中需注意PDO報(bào)文的剩余容量。接收PDO模塊的任務(wù)是完成PDO數(shù)據(jù)的解析,將數(shù)據(jù)放入指定對(duì)象中;發(fā)送模塊負(fù)責(zé)根據(jù)CANopen協(xié)議規(guī)范,依據(jù)PDO通信參數(shù),實(shí)現(xiàn)各種PDO傳輸方式,包括同步周期、同步事件預(yù)觸發(fā)、異步事件觸發(fā)等方式。
2.3.2 SDO模塊
SDO模塊是對(duì)象字典的遠(yuǎn)程訪問接口,一般被用來進(jìn)行節(jié)點(diǎn)參數(shù)配置和獲取。它基于客戶端服務(wù)器模式,每個(gè)訪問請(qǐng)求都必須應(yīng)答,實(shí)現(xiàn)了可靠的點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸。CANopen為SDO服務(wù)設(shè)計(jì)了5個(gè)請(qǐng)求/應(yīng)答子協(xié)議,分別是:?jiǎn)?dòng)域下載/上傳、域分段下載\上傳、中止域傳送。
本文設(shè)計(jì)的SDO模塊包含了訪問發(fā)起模塊和應(yīng)答模塊。訪問發(fā)起模塊的任務(wù)是根據(jù)上層的調(diào)用發(fā)起SDO通信,實(shí)現(xiàn)了5個(gè)訪問子協(xié)議中的請(qǐng)求部分;應(yīng)答模塊則解析收到的SDO報(bào)文中攜帶的命令字,實(shí)現(xiàn)了5個(gè)訪問子協(xié)議中的應(yīng)答部分。
2.3.3 NMT模塊
每個(gè)CANopen節(jié)點(diǎn)內(nèi)都運(yùn)行著一個(gè)狀態(tài)機(jī),狀態(tài)轉(zhuǎn)換由主節(jié)點(diǎn)控制,不同的狀態(tài)對(duì)應(yīng)不同的節(jié)點(diǎn)任務(wù),也對(duì)應(yīng)了不同的模塊可用性。狀態(tài)轉(zhuǎn)換如圖4所示。
本文實(shí)現(xiàn)的從節(jié)點(diǎn)NMT模塊的任務(wù)是響應(yīng)主站的NMT控制命令,并反饋?zhàn)陨頎顟B(tài),匯報(bào)錯(cuò)誤信息。狀態(tài)轉(zhuǎn)換模塊的流程:接收到NMT命令后,首先解析NMT命令字,檢查狀態(tài)轉(zhuǎn)換合法性,然后設(shè)置節(jié)點(diǎn)狀態(tài),啟停各功能模塊:狀態(tài)反饋模塊采用了CiA組織推薦使用的心跳模式,即從節(jié)點(diǎn)周期性地向網(wǎng)絡(luò)上發(fā)送包含自身狀態(tài)信息的心跳報(bào)文,供主站和其他節(jié)點(diǎn)監(jiān)視。
2.3.4 總體流程
借助于狀態(tài)機(jī),設(shè)計(jì)了如圖5的程序運(yùn)行總體流程。
從節(jié)點(diǎn)上電啟動(dòng)后,先進(jìn)行必要的硬件初始化,如系統(tǒng)時(shí)鐘、port、CAN接口、定時(shí)器、AD等,完成后設(shè)置節(jié)點(diǎn)狀態(tài)為initialization,進(jìn)入狀態(tài)機(jī),軟件在狀態(tài)機(jī)內(nèi)循環(huán)運(yùn)行。通信初始化函數(shù)主要負(fù)責(zé)初始化從節(jié)點(diǎn)的對(duì)象字典,節(jié)點(diǎn)初始化函數(shù)則負(fù)責(zé)將節(jié)點(diǎn)的輸出置為上電值,設(shè)置完成后設(shè)置節(jié)點(diǎn)狀態(tài)為pre-operational,軟件運(yùn)行至preoperational函數(shù),這個(gè)函數(shù)的功能是協(xié)助主站完成對(duì)從節(jié)點(diǎn)的通信配置。當(dāng)從節(jié)點(diǎn)收到start remote node命令后,進(jìn)入operational狀態(tài),此狀態(tài)包含了從節(jié)點(diǎn)的控制程序,即從節(jié)點(diǎn)開始正常運(yùn)行,執(zhí)行指定的底層任務(wù),如數(shù)據(jù)采集、控制輸出等。若節(jié)點(diǎn)接收到主站的stop remote node命令,則進(jìn)入stopped函數(shù),在此狀態(tài)下從節(jié)點(diǎn)停止執(zhí)行底層任務(wù),等待主節(jié)點(diǎn)的啟動(dòng)命令。
3 實(shí)驗(yàn)
3.1 測(cè)試實(shí)驗(yàn)平臺(tái)的搭建
為了測(cè)試本文的CANopen從節(jié)點(diǎn)協(xié)議,搭建了基于USB-CAN模塊的測(cè)試平臺(tái),結(jié)構(gòu)如圖6所示。主站是裝有ZLGCANTest的計(jì)算機(jī),以USB-CAN通信模塊作為CAN網(wǎng)絡(luò)接口,實(shí)現(xiàn)與從站的連接。示波器監(jiān)視總線波形,通信波特率設(shè)置為500kb/s。
評(píng)論