欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于can冗余的總線切換方法

文檔序號:7703330閱讀:240來源:國知局
專利名稱:基于can冗余的總線切換方法
技術(shù)領(lǐng)域
本發(fā)明屬于CAN網(wǎng)絡(luò)通訊技術(shù)領(lǐng)域,特別涉及一種基于CAN冗余的總線切換方法。
背景技術(shù)
解決CAN網(wǎng)絡(luò)可靠性通訊的一個有效的辦法就是對總線進(jìn)行不同程度的冗余。雖然 CAN冗余是解決CAN網(wǎng)絡(luò)可靠性的普遍方法,但是沒有人研究基于CAN冗余的總線切 換方法。諸多設(shè)計者是在發(fā)送失敗或者接收失敗導(dǎo)致超時的情況下,進(jìn)行切換總線。無疑 在等待超時的這段時間內(nèi),接收數(shù)據(jù)出錯的節(jié)點(diǎn)將會錯過很多有效數(shù)據(jù)幀,降低了總線利 用率。然而, 一種好的基于CAN冗余的總線切換方法應(yīng)該是可以使接收節(jié)點(diǎn)盡量少的錯 過數(shù)據(jù)幀,從而提高了總線利用率,也保證了 CAN網(wǎng)絡(luò)的數(shù)據(jù)正確穩(wěn)定傳送,增強(qiáng)了 CAN 網(wǎng)絡(luò)的實(shí)時性。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種能保證數(shù)據(jù)接收的可靠正確性和實(shí)時性的基于 CAN冗余的總線切換方法。
為了解決上述技術(shù)問題,本發(fā)明提供一種基于CAN冗余的總線切換方法,包括以下
步驟
1) 、判斷是發(fā)送節(jié)點(diǎn)還是接收節(jié)點(diǎn);當(dāng)為發(fā)送節(jié)點(diǎn)時,進(jìn)入步驟2);當(dāng)為接收節(jié)點(diǎn) 時,進(jìn)入步驟5);
2) 、判斷發(fā)送節(jié)點(diǎn)是否發(fā)送超時;當(dāng)判斷為"是"時,進(jìn)入步驟3),當(dāng)判斷為"否" 時,則進(jìn)入步驟4);
3) 、切換總線重新發(fā)送;
4) 、發(fā)送節(jié)點(diǎn)監(jiān)視總線直至超時或者接收到接收節(jié)點(diǎn)的響應(yīng)幀,表示成功發(fā)送數(shù)據(jù);
5) 、判斷接收節(jié)點(diǎn)是否接收超時;當(dāng)判斷為"是"時,進(jìn)入步驟6),當(dāng)判斷為"否" 時,則進(jìn)入步驟7),
6) 、通過廣播切換總線,告知其他節(jié)點(diǎn)切換總線重新發(fā)送數(shù)據(jù);7)、接收節(jié)點(diǎn)發(fā)送響應(yīng)幀,作為對發(fā)送節(jié)點(diǎn)的響應(yīng),表示數(shù)據(jù)發(fā)送并接收成功。
作為本發(fā)明的基于CAN冗余的總線切換方法的改進(jìn)步驟2)中判斷發(fā)送節(jié)點(diǎn)是否發(fā) 送超時的標(biāo)準(zhǔn)為發(fā)送節(jié)點(diǎn)的發(fā)送時間是否超過用戶設(shè)定的最長的發(fā)送時間,超過該值認(rèn) 為該次數(shù)據(jù)發(fā)送失敗。
作為本發(fā)明的基于CAN冗余的總線切換方法的進(jìn)一步改進(jìn)步驟5)中判斷接收節(jié)點(diǎn) 是否發(fā)送超時的標(biāo)準(zhǔn)為接收節(jié)點(diǎn)的接收錯誤是否超出設(shè)定的閾值,該閾值是用戶定義的 能夠忍受的最大接收錯誤次數(shù)。
作為本發(fā)明的基于CAN冗余的總線切換方法的進(jìn)一步改進(jìn)同一時刻只能有一條總線 發(fā)送數(shù)據(jù);使用軟件緩沖區(qū)作為用戶發(fā)送數(shù)據(jù)的緩沖池,使用開發(fā)板的三個硬件緩沖區(qū)加 速數(shù)據(jù)幀的發(fā)送;設(shè)置閾值以及超時機(jī)制用于通信出現(xiàn)故障時重啟控制器或者切換總線重 新發(fā)送或繼續(xù)接收數(shù)據(jù)幀;用節(jié)點(diǎn)指示燈提示用戶總線故障,需要及時恢復(fù)總線。
作為本發(fā)明的基于CAN冗余的總線切換方法的進(jìn)一步改進(jìn)步驟3)具體為依次進(jìn)行 以下步驟
A) 、重啟控制器重新發(fā)送;如發(fā)送成功,則進(jìn)入步驟B);如仍舊發(fā)送不成功,以至 發(fā)送超時,則進(jìn)入步驟C);
B) 、監(jiān)聽等待網(wǎng)絡(luò)上的響應(yīng)幀,當(dāng)收到接收節(jié)點(diǎn)的響應(yīng)幀時表示該次數(shù)據(jù)傳送成功;
C) 、判斷其余總線是否可用,如其余總線有任意一條(至少一條)總線可用,則采用 該總線重新發(fā)送;若其余總線均不能使用,則提示用戶,等待用戶恢復(fù)。
作為本發(fā)明的基于CAN冗余的總線切換方法的進(jìn)一步改進(jìn)步驟6)具體為依次進(jìn)行 以下步驟-
判斷其余總線是否可用,如其余總線有任意一條(至少一條)總線可用,則廣播切換 總線、重啟原控制器,(表示該節(jié)點(diǎn)在該總線上是接收不到有效數(shù)據(jù)幀的);若另一個總線 不可用,則重啟原控制器。
上述內(nèi)容如圖l所示當(dāng)切換總線時,也就是使用另一套控制器、收發(fā)器。在網(wǎng)絡(luò)傳 送開始前,控制器已經(jīng)初始化過,但是由于要初始化掉控制器的某些寄存器、或者某些軟 件計數(shù)錯誤,所以要重新初始化控制器,即是重啟控制器。
在本發(fā)明中的基于CAN冗余的總線切換方法中在每個節(jié)點(diǎn)設(shè)計一個記錄發(fā)送數(shù)據(jù)幀 的軟件緩沖區(qū)結(jié)構(gòu)數(shù)組(Buffer),使得數(shù)據(jù)幀在總線切換時無需轉(zhuǎn)移。判斷軟件緩沖區(qū)是 否是滿的條件是數(shù)據(jù)緩沖區(qū)中的有效數(shù)據(jù)是否:NUM-1。 NUM是軟件緩沖區(qū)的最大容量。之所以減掉l,是要為特殊數(shù)據(jù)幀預(yù)留一個數(shù)據(jù)緩沖區(qū);之所以為特殊幀預(yù)留一個數(shù) 據(jù)緩沖區(qū),是為了防止當(dāng)軟件緩沖區(qū)放滿數(shù)據(jù)幀時,特殊幀無法及時發(fā)送。必須保證特殊 數(shù)據(jù)幀能夠及時的發(fā)送出去。當(dāng)發(fā)送特殊幀時,將其插入到軟件緩沖區(qū)的預(yù)留位置,可以 保證其優(yōu)先發(fā)送。特殊數(shù)據(jù)幀包括發(fā)送節(jié)點(diǎn)的總線切換幀Change—Send—Frame、接收節(jié)點(diǎn) 的總線切換幀Chang^REV—Frame。 Change—SencLFrame是指發(fā)送節(jié)點(diǎn)超時時,發(fā)往各個節(jié) 點(diǎn)的切換總線幀,通知各個節(jié)點(diǎn)原通道已經(jīng)壞掉;而Chang^REV—Frame是接收節(jié)點(diǎn)在接 收錯誤超出閾值時廣播的切換總線幀,并不意味著原總線出現(xiàn)故障,只是為了盡量減少接 收節(jié)點(diǎn)丟失數(shù)據(jù)幀而采取的切換總線。
在利用CAN冗余來提高CAN網(wǎng)絡(luò)通訊的可靠性時,本發(fā)明的基于CAN冗余的總線切換方 法有利于提高總線利用率、網(wǎng)絡(luò)通訊可靠安全性以及網(wǎng)絡(luò)實(shí)時性。本發(fā)明的基于CAN冗余 的總線切換方法,用于保證發(fā)送節(jié)點(diǎn)能夠成功發(fā)送數(shù)據(jù),接收節(jié)點(diǎn)能夠接收到數(shù)據(jù),而且 盡量少的丟失數(shù)據(jù)幀,從而保證了數(shù)據(jù)接收的可靠正確性、實(shí)時性、安全性。
在本發(fā)明中,可以避免因總線硬件故障而平白一直等待到接收超時(在CAN網(wǎng)絡(luò)中, 超時周期設(shè)置肯定比錯誤數(shù)據(jù)超出閾值的時間長),在等待的這段時間里,可能錯過其他 節(jié)點(diǎn)在該故障總線上傳送的數(shù)據(jù)。簡單講,就是接收節(jié)點(diǎn)沒有設(shè)置超時時間,在接收錯誤 超出閾值時就切換總線發(fā)送數(shù)據(jù)。注意(1)接收錯誤計數(shù)值超過閾值則會切換總線,但 是不表示該條總線壞掉,而是為了盡量減少丟失數(shù)據(jù)幀,使得該節(jié)點(diǎn)能夠及時接到數(shù)據(jù)幀。 (2)發(fā)送錯誤計數(shù)值超出閾值時,就會重啟控制器,并不切換總線。畢竟切換總線的花 銷比重啟控制器要大。當(dāng)重啟后仍不能發(fā)送成功,則會發(fā)生超時中斷切換總線,重新發(fā)送。
以雙CAN網(wǎng)絡(luò)為例,本發(fā)明設(shè)置閾值以及超時機(jī)制用于通訊出現(xiàn)故障時重新啟動 CAN控制器或者切換總線,主要體現(xiàn)在
*當(dāng)發(fā)送節(jié)點(diǎn)發(fā)送錯誤計數(shù)值超過某閾值時,則重啟CAN控制器重新發(fā)送;如果 重啟控制器仍舊發(fā)送不成功,以至發(fā)送超時的時候,那么若另一總線可用則切換總線重 新發(fā)送;若另一總線不可用則兩總線均停用,并通知用戶(等待用戶恢復(fù))。
*當(dāng)接收節(jié)點(diǎn)在接收錯誤計數(shù)值超過某閾值時若另一總線可用,則重啟該節(jié)點(diǎn)正
在使用的CAN控制器、廣播切換總線,(在CAN網(wǎng)絡(luò)上廣播發(fā)送特殊數(shù)據(jù)幀,通知各個
節(jié)點(diǎn)該節(jié)點(diǎn)在該總線上是接收不到有效數(shù)據(jù)幀的,所有節(jié)點(diǎn)需要切換到另一條總線上發(fā)
送數(shù)據(jù));若另一個總線不可用,則重啟該節(jié)點(diǎn)的CAN控制器。
發(fā)送節(jié)點(diǎn)的發(fā)送計時器是利用系統(tǒng)時鐘計時的,在將數(shù)據(jù)幀放入軟件緩沖區(qū)時開始計時,將該數(shù)據(jù)幀的成員變量time值賦值為此時的系統(tǒng)時鐘tick值加上閾值周期tick數(shù)。 每當(dāng)1^±++時就會判斷軟件緩沖區(qū)首的數(shù)據(jù)幀time是否超時。CAN控制器內(nèi)部自動記錄 發(fā)送錯誤、接收錯誤次數(shù)。通過對CAN控制器的相關(guān)寄存器的設(shè)置,使發(fā)送器、接收器 在錯誤計數(shù)超過某閾值時,觸發(fā)中斷。接收錯誤計數(shù)值超過閾值則會切換總線,但是不表 示另一條總線壞掉,而是為了盡量減少丟失數(shù)據(jù)幀,不必等待到超時再切換總線。發(fā)送錯 誤計數(shù)值超出閾值時,就會重啟控制器,并不切換總線。因?yàn)榍袚Q總線的花銷比重啟控制 器要大。當(dāng)重啟后仍不能發(fā)送成功,則會發(fā)生超時中斷切換總線重新發(fā)送。
每個節(jié)點(diǎn)設(shè)計一個記錄數(shù)據(jù)幀的軟件緩沖區(qū)結(jié)構(gòu)數(shù)組(Buffer),使得數(shù)據(jù)幀在總線 切換時無需轉(zhuǎn)移。軟件緩沖區(qū)數(shù)據(jù)幀Soft—Frame的數(shù)據(jù)結(jié)構(gòu)(即數(shù)組元素的數(shù)據(jù)結(jié)構(gòu))如

typedef struct Soft—Frame { INT32Uid; 〃發(fā)送節(jié)點(diǎn)發(fā)送的總線切換幀、接收節(jié)點(diǎn)發(fā)送的總線切換幀
〃總線恢復(fù)幀的ID分別為0、 1、 2 INT8Utype; //數(shù)據(jù)幀的類型(擴(kuò)張幀、標(biāo)準(zhǔn)幀、數(shù)據(jù)幀、遠(yuǎn)程幀、) INT8U data[8]; INT8U datalen;
1^181^40;//緩沖區(qū)優(yōu)先級(即數(shù)據(jù)幀優(yōu)先級)
判斷軟件緩沖區(qū)是否是滿的條件是:緩沖區(qū)中的有效數(shù)據(jù)個數(shù)是否等于NUM-1(NUM 是軟件緩沖區(qū)的最大容量)。為了防止當(dāng)軟件緩沖區(qū)放滿數(shù)據(jù)幀時,特殊幀無法發(fā)送,我 們要為特殊幀在軟件緩沖區(qū)中預(yù)留一個數(shù)據(jù)緩沖區(qū)。當(dāng)發(fā)送切換總線幀時,我們將其插入 到軟件緩沖區(qū)的預(yù)留位置,并且優(yōu)先發(fā)送。所以,當(dāng)軟件緩沖區(qū)中的數(shù)據(jù)幀的個數(shù)為 NUM-1個時,就表示軟件緩沖區(qū)已滿。
我們按照到達(dá)軟件緩沖區(qū)的次序,遞增地為普通數(shù)據(jù)幀分配優(yōu)先級。為保證數(shù)據(jù)幀的 發(fā)送按照先到達(dá)先發(fā)送的原則,當(dāng)優(yōu)先級遞增到255時(硬件緩沖區(qū)中的優(yōu)先級寄存器為 8位,最多有256個不同優(yōu)先級),用戶繼續(xù)往軟件緩沖區(qū)中放入數(shù)據(jù)幀則會返回錯誤, 直至優(yōu)先級為255的數(shù)據(jù)幀發(fā)送完畢,軟件緩沖區(qū)才能夠再接收用戶的數(shù)據(jù)幀,而且數(shù)據(jù)幀的優(yōu)先級從l開始遞增。
特殊數(shù)據(jù)幀包括發(fā)送節(jié)點(diǎn)的總線切換幀Change—Send一Fmme、接收節(jié)點(diǎn)的總線切換幀 Change_REV—Frame以及總線恢復(fù)幀Recov_Frame。發(fā)送節(jié)點(diǎn)的總線切換幀是指發(fā)送節(jié)點(diǎn) 超時時,發(fā)往各個節(jié)點(diǎn)的切換總線幀,通知各個節(jié)點(diǎn)原通道已經(jīng)壞掉;而接收節(jié)點(diǎn)的總線 切換幀是接收節(jié)點(diǎn)在接收錯誤超出閾值時廣播的切換總線幀,并不意味著原總線出現(xiàn)故 障,只是為了盡量減少接收節(jié)點(diǎn)丟失數(shù)據(jù)幀而采取的切換總線措施;總線恢復(fù)幀是用戶通 知各個節(jié)點(diǎn)原來己壞的通道己經(jīng)可以恢復(fù)使用。其ID分別為0, 1, 2;而且 Change—REV—Frame、 Change_Send—Frame的優(yōu)先級為0 (這兩種數(shù)據(jù)幀不會同時出現(xiàn),所 以優(yōu)先級可以相同),意味著當(dāng)該類幀到達(dá)軟件緩沖區(qū)的預(yù)留位置時,將會是第一個被成 功發(fā)送的數(shù)據(jù)幀(因?yàn)楫?dāng)前軟件緩沖區(qū)的其他數(shù)據(jù)幀的發(fā)送被阻塞在另一條總線上);其 他幀的優(yōu)先級絕對不能為0; Recov一Frame的優(yōu)先級跟一般數(shù)據(jù)幀相同,否則將會影響發(fā) 送成功中斷的去除軟件緩沖區(qū)的隊(duì)首數(shù)據(jù)幀的操作,因?yàn)榘l(fā)送成功中斷總會刪除軟件緩沖 區(qū)預(yù)留位置或者首位置(如果預(yù)留位置為空),Recov—Frame是在其他數(shù)據(jù)幀正常發(fā)送的 期間到達(dá)軟件緩沖區(qū)的,如果放在特殊幀位置上,則會被成功發(fā)送ISR錯誤地刪除該特殊 幀,而實(shí)際上該數(shù)據(jù)幀還沒有發(fā)送。最好的解決辦法是將總線恢復(fù)幀放置第四幀位置,但 是開銷太大,需要把第五位置后的所有數(shù)據(jù)幀后移。本設(shè)計做如下處理切換總線幀直接 插入到軟件緩沖區(qū)的鏈?zhǔn)?,保證其優(yōu)先發(fā)送;總線恢復(fù)幀作為一般數(shù)據(jù)幀處理,插入到軟 件緩沖區(qū)數(shù)組末尾。
實(shí)驗(yàn)證明當(dāng)正在使用的總線出現(xiàn)故障,該設(shè)計能夠正常發(fā)送數(shù)據(jù)幀,并且采用了該
總線切換方法的接收節(jié)點(diǎn)丟失的數(shù)據(jù)幀比沒采用該總線切換方法的節(jié)點(diǎn)少。該方法能夠保 證發(fā)送節(jié)點(diǎn)能夠成功發(fā)送數(shù)據(jù),接收節(jié)點(diǎn)能夠正確接收數(shù)據(jù),而且盡量少的丟失數(shù)據(jù)幀, 從而保證了數(shù)據(jù)接收的可靠正確性、實(shí)時性。


下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)說明。
圖l是CAN冗余結(jié)構(gòu)圖2是圖l發(fā)送數(shù)據(jù)時的流程圖3是圖l接收數(shù)據(jù)時的流程圖4是圖1重新發(fā)送數(shù)據(jù)時的流程圖5是圖1數(shù)據(jù)發(fā)送成功時的中斷流程圖;圖6是圖l錯誤超出閾值處理的流程圖; 圖7是圖1超時切換總線的流程圖。
具體實(shí)施例方式
實(shí)施例l、如圖1所示的一個雙CAN網(wǎng)絡(luò),采用兩套總線(即總線A和總線B),每 套總線都包含完整的總線電纜、總線驅(qū)動器、總線控制器。
為了在上述雙CAN網(wǎng)絡(luò)中實(shí)現(xiàn)本發(fā)明的基于CAN冗余的總線切換方法,因此需要進(jìn) 行如下處理
當(dāng)發(fā)送節(jié)點(diǎn)發(fā)送錯誤計數(shù)值超過某閾值時,則重啟CAN控制器重新發(fā)送,重啟CAN 控制器主要是清除控制器中的某些寄存器錯誤;如果重啟控制器仍舊發(fā)送不成功,以至發(fā) 送超時時,那么若另一總線可用則切換總線重新發(fā)送;若另一總線不可用則兩總線均停 用,并用該節(jié)點(diǎn)指示燈提示用戶,等待用戶檢測該節(jié)點(diǎn)的總線通路并及時恢復(fù)。
當(dāng)接收節(jié)點(diǎn)在接收錯誤計數(shù)值超過某閾值時若另一總線可用,則重啟該節(jié)點(diǎn)正在使 用的CAN控制器、廣播切換總線(在CAN網(wǎng)絡(luò)上廣播發(fā)送特殊數(shù)據(jù)幀,通知各個節(jié)點(diǎn) 該節(jié)點(diǎn)在該總線上是接收不到有效數(shù)據(jù)幀的,所有節(jié)點(diǎn)需要切換到另一條總線上發(fā)送數(shù) 據(jù));若另一個總線不可用,則重啟該節(jié)點(diǎn)的CAN控制器,直至超時,節(jié)點(diǎn)停用并等待用 戶恢復(fù)。
實(shí)施例2、對實(shí)施例1所述的雙CAN網(wǎng)絡(luò)進(jìn)行的基于CAN冗余的總線切換方法,兩 條CAN總線同時開啟,但是某一時刻最多只有一條總線發(fā)送數(shù)據(jù),以避免不同步問題造 成的接收數(shù)據(jù)錯誤。使用軟件緩沖區(qū)作為用戶發(fā)送數(shù)據(jù)的緩沖池,當(dāng)節(jié)點(diǎn)的三個硬件緩沖 區(qū)有空閑時,就將軟件緩沖區(qū)中的數(shù)據(jù)放入硬件緩沖區(qū)中,進(jìn)行數(shù)據(jù)幀的發(fā)送;設(shè)置閾值 以及超時機(jī)制用于通信出現(xiàn)故障時重新啟動CAN控制器或者切換總線;利用每個總線節(jié) 點(diǎn)的LED燈的亮滅來提示用戶總線故障,及時恢復(fù)總線。
具體依次進(jìn)行以下步驟
1) 、判斷該節(jié)點(diǎn)是屬于發(fā)送節(jié)點(diǎn)還是接收節(jié)點(diǎn),如果屬于發(fā)送節(jié)點(diǎn)進(jìn)入步驟2),如 果屬于接收節(jié)點(diǎn)進(jìn)入步驟7);
2) 、發(fā)送節(jié)點(diǎn)發(fā)送數(shù)據(jù)的流程具體如圖2所示在數(shù)據(jù)幀發(fā)送命令開始時記錄數(shù)據(jù)的
發(fā)送超時點(diǎn)deadline,然后將數(shù)據(jù)幀放入軟件緩沖區(qū),如果硬件緩沖區(qū)有空閑的話則進(jìn)一 步放入硬件緩沖區(qū)等待發(fā)送,硬件寄存器會自動記錄發(fā)送過程中的發(fā)送錯誤數(shù)目。當(dāng)發(fā)送錯誤超出用戶設(shè)定的閾值后,就會進(jìn)入步驟3);否則當(dāng)收到接收節(jié)點(diǎn)的響應(yīng)幀時即是發(fā) 送成功,進(jìn)入步驟4)。
3) 錯誤計數(shù)超出閾值的中斷處理程序,具體如圖6:當(dāng)是發(fā)送錯誤超出閾值時,判 斷發(fā)送節(jié)點(diǎn)是否發(fā)送超時,即判斷發(fā)送節(jié)點(diǎn)的發(fā)送時間是否超過用戶設(shè)定的最長的發(fā)送時 間,超過該值則進(jìn)入步驟5),否則重啟控制器,重新發(fā)送數(shù)據(jù),進(jìn)入步驟6);當(dāng)是接收 錯誤超出閾值時,即判斷另一條總線是否可用,如另一條總線可用,則廣播切換至可用總 線,發(fā)送接收數(shù)據(jù),并重新啟動原來總線的控制器;若另一條也不可用,則重啟原控制器 并提示用戶(例如以指示燈的形式),等待用戶恢復(fù),用戶在第一條CAN總線停用時,就 應(yīng)該想辦法及時恢復(fù)總線。
4) 成功發(fā)送數(shù)據(jù)中斷處理具體如圖5所示去除軟件buffer中已發(fā)送的數(shù)據(jù)幀,并 讀取軟件緩沖區(qū),如果能夠讀取到待發(fā)送的數(shù)據(jù)幀,則將其放入產(chǎn)生該中斷的硬件buffer 中等待發(fā)送,并清除硬件buffer空標(biāo)志位;如果讀取不到數(shù)據(jù)幀,說明軟件緩沖區(qū)空,沒 有等待發(fā)送到數(shù)據(jù)幀,則禁能硬件buffer空中斷。
5) 切換總線處理流程具體如圖7所示如果另一總線可用則重新初始化原來的控制 器,并置指示燈提示用戶原總線掛掉,等待用戶及時恢復(fù),然后切換至可用總線重新發(fā)送 數(shù)據(jù)幀,即進(jìn)入步驟6);如果另一總線不可用,則重新初始化該控制器并設(shè)置通道掛掉, 點(diǎn)亮指示燈提示用戶節(jié)點(diǎn)可能掛掉,及時恢復(fù)。
6) 重新發(fā)送數(shù)據(jù)流程具體如圖4所示當(dāng)軟件緩沖區(qū)數(shù)據(jù)大小為0時,返回錯誤;
當(dāng)數(shù)據(jù)不為o時,如果存在特殊幀,則對特殊幀開始計時并將特殊幀首先放入硬件緩沖區(qū) 中等待發(fā)送;如果不存在特殊幀,則將buffer+head位置處的數(shù)據(jù)幀放入硬件緩沖區(qū)中等 待發(fā)送。
7) 接收節(jié)點(diǎn)的接收流程具體如圖3所示當(dāng)在接收錯誤計數(shù)未超出閾值時,就已經(jīng) 成功接受到數(shù)據(jù),則認(rèn)為數(shù)據(jù)接收成功,會自動向發(fā)送者發(fā)送響應(yīng)幀。接收節(jié)點(diǎn)根據(jù)數(shù)據(jù) 幀的類型處理數(shù)據(jù)或者總線狀態(tài);如果接收錯誤超出閾值后就轉(zhuǎn)向步驟3)。
為了證明本發(fā)明的方法確實(shí)能保證數(shù)據(jù)接收的可靠正確性和實(shí)時性,發(fā)明人作了如下 的對比實(shí)驗(yàn)
選用實(shí)施例1所述的CAN冗余網(wǎng)絡(luò)。然后依照實(shí)施例2所述的方法,根據(jù)CAN通訊 網(wǎng)絡(luò)系統(tǒng)可能會造成的故障(如電纜的斷線或短路、CAN總線驅(qū)動器的故障、總線控制 器甚至單片機(jī)的故障、CAN網(wǎng)絡(luò)外部磁場的干擾等),測試并對比采用了本發(fā)明提出的總線切換方法的網(wǎng)絡(luò),與不采用該方法的網(wǎng)絡(luò),在數(shù)據(jù)幀接收的穩(wěn)定性、正確性、實(shí)時性的 性能上的差別。
本方法測試的硬件環(huán)境
1. HCS12開發(fā)板三塊用作CAN節(jié)點(diǎn)(HCS12開發(fā)板將CAN控制器集成在該開發(fā) 板中)。
2. CAN總線若干條用來連接成CAN網(wǎng)絡(luò)。
3. 燒寫器用來燒寫應(yīng)用程序至HCS12開發(fā)板。
本設(shè)方法測試的軟件環(huán)境
1. CAN調(diào)試工具ZLGCANTest:用來測試CAN接收到的數(shù)據(jù)幀。
2. CodeWarriorIDE :用來編譯燒寫至HCS12中的代碼。
通過該測試可以證明,本發(fā)明的方法能夠使得發(fā)送節(jié)點(diǎn)成功發(fā)送數(shù)據(jù),接收節(jié)點(diǎn)接收 到數(shù)據(jù),而且盡量少的丟失數(shù)據(jù)幀,從而保證了數(shù)據(jù)接收的可靠正確性、實(shí)時性。
最后,還需要注意的是,以上列舉的僅是本發(fā)明的若干個具體實(shí)施例。顯然,本發(fā)明 不限于以上實(shí)施例,還可以有許多變形。本領(lǐng)域的普通技術(shù)人員能從本發(fā)明公開的內(nèi)容直 接導(dǎo)出或聯(lián)想到的所有變形,均應(yīng)認(rèn)為是本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種基于CAN冗余的總線切換方法,其特征是包括以下步驟1)、判斷是發(fā)送節(jié)點(diǎn)還是接收節(jié)點(diǎn);當(dāng)為發(fā)送節(jié)點(diǎn)時,進(jìn)入步驟2);當(dāng)為接收節(jié)點(diǎn)時,進(jìn)入步驟5);2)、判斷發(fā)送節(jié)點(diǎn)是否發(fā)送超時;當(dāng)判斷為“是”時,進(jìn)入步驟3),當(dāng)判斷為“否”時,則進(jìn)入步驟4);3)、切換總線重新發(fā)送;4)、發(fā)送節(jié)點(diǎn)監(jiān)視總線直至超時或者接收到接收節(jié)點(diǎn)的響應(yīng)幀,表示成功發(fā)送數(shù)據(jù);5)、判斷接收節(jié)點(diǎn)是否接收超時;當(dāng)判斷為“是”時,進(jìn)入步驟6),當(dāng)判斷為“否”時,則進(jìn)入步驟7),6)、通過廣播切換總線,告知其他節(jié)點(diǎn)切換總線重新發(fā)送數(shù)據(jù);7)、接收節(jié)點(diǎn)發(fā)送響應(yīng)幀,作為對發(fā)送節(jié)點(diǎn)的響應(yīng),表示數(shù)據(jù)發(fā)送并接收成功。
2、 根據(jù)權(quán)利要求1所述的一種基于CAN冗余的總線切換方法,其特征是所述步驟2)中 判斷發(fā)送節(jié)點(diǎn)是否發(fā)送超時的標(biāo)準(zhǔn)為發(fā)送節(jié)點(diǎn)的發(fā)送時間是否超過用戶設(shè)定的最長的發(fā)送 時間,超過該值認(rèn)為該次數(shù)據(jù)發(fā)送失敗。
3、 根據(jù)權(quán)利要求1所述的一種基于CAN冗余的總線切換方法,其特征是所述步驟5)中 判斷接收節(jié)點(diǎn)是否發(fā)送超時的標(biāo)準(zhǔn)為接收節(jié)點(diǎn)的接收錯誤是否超出設(shè)定的閾值,該閾值是 用戶定義的能夠忍受的最大接收錯誤次數(shù)。
4、 根據(jù)權(quán)利要求l、 2或3所述的一種基于CAN冗余的總線切換方法,其特征是同一時 刻只能有一條總線發(fā)送數(shù)據(jù);使用軟件緩沖區(qū)作為用戶發(fā)送數(shù)據(jù)的緩沖池,使用開發(fā)板的三 個硬件緩沖區(qū)加速數(shù)據(jù)幀的發(fā)送;設(shè)置閾值以及超時機(jī)制用于通信出現(xiàn)故障時重啟控制器或 者切換總線重新發(fā)送或繼續(xù)接收數(shù)據(jù)幀;用節(jié)點(diǎn)指示燈提示用戶總線故障,需要及時恢復(fù)總 線。
5、 根據(jù)權(quán)利要求4所述的一種基于CAN冗余的總線切換方法,其特征是所述步驟3)具 體為依次進(jìn)行以下步驟A) 、重啟控制器重新發(fā)送;如發(fā)送成功,則進(jìn)入步驟B);如仍舊發(fā)送不成功,以至發(fā)送 超時,則進(jìn)入步驟C);B) 、監(jiān)聽等待網(wǎng)絡(luò)上的響應(yīng)幀,當(dāng)收到接收節(jié)點(diǎn)的響應(yīng)幀時表示該次數(shù)據(jù)傳送成功;C)、判斷其余總線是否可用,如其余總線有至少一條總線可用,則采用該總線重新發(fā)送; 若其余總線均不能使用,則提示用戶,等待用戶恢復(fù)。
6、根據(jù)權(quán)利要求5所述的一種基于CAN冗余的總線切換方法,其特征是所述步驟6)具 體為依次進(jìn)行以下步驟判斷其余總線是否可用,如其余總線有至少一條總線可用,則廣播切換總線、重啟原控 制器,表示該節(jié)點(diǎn)在該總線上是接收不到有效數(shù)據(jù)幀的;若另一個總線不可用,則重啟原控 制器。
全文摘要
本發(fā)明公開了一種基于CAN冗余的總線切換方法,包括以下步驟1)判斷是發(fā)送節(jié)點(diǎn)還是接收節(jié)點(diǎn);為發(fā)送節(jié)點(diǎn),進(jìn)入步驟2);為接收節(jié)點(diǎn),進(jìn)入步驟5);2)判斷發(fā)送節(jié)點(diǎn)是否發(fā)送超時;判斷為“是”,進(jìn)入步驟3),判斷為“否”,則進(jìn)入步驟4);3)切換總線重新發(fā)送;4)發(fā)送節(jié)點(diǎn)監(jiān)視總線直至超時或者接收到接收節(jié)點(diǎn)的響應(yīng)幀;5)判斷接收節(jié)點(diǎn)是否接收超時;判斷為“是”,進(jìn)入步驟6),判斷為“否”,則進(jìn)入步驟7);6)通過廣播切換總線,告知其他節(jié)點(diǎn)切換總線重新發(fā)送數(shù)據(jù);7)接收節(jié)點(diǎn)發(fā)送響應(yīng)幀,作為對發(fā)送節(jié)點(diǎn)的響應(yīng),表示數(shù)據(jù)發(fā)送并接收成功。該方法能保證數(shù)據(jù)接收的可靠正確性和實(shí)時性。
文檔編號H04L12/24GK101582799SQ20091009983
公開日2009年11月18日 申請日期2009年6月22日 優(yōu)先權(quán)日2009年6月22日
發(fā)明者攀 呂, 吳朝暉, 麗 周, 張呂紅, 趙民德, 魏城炯 申請人:浙江大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
郴州市| 遂平县| 甘谷县| 房山区| 贵定县| 文安县| 双牌县| 云南省| 安义县| 常德市| 眉山市| 樟树市| 新沂市| 罗山县| 濉溪县| 仁化县| 新营市| 樟树市| 盐池县| 寻甸| 临邑县| 顺义区| 石泉县| 广宗县| 克什克腾旗| 南召县| 黄大仙区| 托克托县| 乌海市| 印江| 太仓市| 三原县| 邓州市| 曲水县| 浙江省| 琼海市| 册亨县| 杨浦区| 宁波市| 新源县| 泸州市|