一種增強(qiáng)型can總線數(shù)據(jù)重發(fā)方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及CAN通信領(lǐng)域,尤其是一種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法和裝置。
【背景技術(shù)】
[0002]CAN是Controller Area Network的縮寫(以下稱為CAN),是ISO國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議,是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。CAN總線在工業(yè)控制總線中占用越來越多的比例。CAN總線采用CSMA機(jī)制,具有優(yōu)先級(jí)管理,重要數(shù)據(jù)優(yōu)先發(fā)送,保證系統(tǒng)可靠性。
[0003]目前在CAN通信過程中,如果通信失敗,不管失敗原因,根據(jù)不同策略,直接重發(fā),雖然保證了通信的可靠性,但是將大量占用總線資源,降低總線帶寬;另一種處理方式,不重發(fā)并按異常處理,則會(huì)引起誤報(bào)故障。
【發(fā)明內(nèi)容】
[0004]為了解決上述技術(shù)問題,本發(fā)明的目的是提供一種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法和裝置,其可以降低總線的資源占用率,提升總線容量以及減小數(shù)據(jù)發(fā)送的擁堵程度,對(duì)總線異常的檢測(cè)更加及時(shí)。
[0005]本發(fā)明所采用的技術(shù)方案一方面是一種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法,包括以下步驟:
51、判斷數(shù)據(jù)是否發(fā)送成功,如果發(fā)送成功,則繼續(xù)判斷數(shù)據(jù)是否發(fā)送成功,否則執(zhí)行步驟S2以進(jìn)行重發(fā)判斷;
52、根據(jù)數(shù)據(jù)發(fā)送失敗的原因進(jìn)行重發(fā)判斷并做出不同的處理。
[0006]進(jìn)一步地,所述步驟S2包括:
521、判斷是否為重要數(shù)據(jù),如果為重要數(shù)據(jù),則執(zhí)行步驟S22,否則執(zhí)行步驟SI;
522、判斷數(shù)據(jù)發(fā)送失敗的原因是否為ACK錯(cuò)誤,如果是,則統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù)并根據(jù)ACK錯(cuò)誤的個(gè)數(shù)做出相應(yīng)處理,否則執(zhí)行步驟S23;
523、判斷數(shù)據(jù)發(fā)送失敗的原因是否為仲裁失敗或者數(shù)據(jù)錯(cuò)誤,如果是,則統(tǒng)計(jì)重發(fā)次數(shù)并進(jìn)行數(shù)據(jù)重發(fā);否則,執(zhí)行步驟S24;
524、進(jìn)行不同的異常處理。
[0007]進(jìn)一步地,所述步驟S23中統(tǒng)計(jì)重發(fā)次數(shù)并進(jìn)行數(shù)據(jù)重發(fā)包括:
5231、統(tǒng)計(jì)重發(fā)次數(shù);
5232、判斷重發(fā)次數(shù)是否大于重發(fā)上限值,如果重發(fā)次數(shù)大于重發(fā)上限值,則執(zhí)行步驟S24,否則執(zhí)行步驟S233;
5233、重發(fā)數(shù)據(jù)。
[0008]進(jìn)一步地,所述步驟S22中統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù)并根據(jù)ACK錯(cuò)誤的個(gè)數(shù)做出相應(yīng)處理包括:
5221、統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù);
5222、判斷ACK錯(cuò)誤的個(gè)數(shù)是否大于ACK錯(cuò)誤的上限值,如果ACK錯(cuò)誤的個(gè)數(shù)大于ACK錯(cuò)誤的上限值,則執(zhí)行步驟S24,否則執(zhí)行步驟SI。
[0009]進(jìn)一步地,所述步驟S24包括:
5241、判斷是否為ACK錯(cuò)誤的個(gè)數(shù)大于ACK錯(cuò)誤的上限值,如果是,告警輸出:ACK錯(cuò)誤,從設(shè)備無應(yīng)答,否則執(zhí)行步驟S242;
5242、判斷是否為重發(fā)次數(shù)大于重發(fā)上限值,如果是,則告警輸出:總線錯(cuò)誤,總線繁忙,否則執(zhí)行步驟S243;
5243、告警輸出:未知通信錯(cuò)誤。
[0010]本發(fā)明的技術(shù)方案另一方面為一種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)裝置,包括:
第一模塊,用于判斷數(shù)據(jù)是否發(fā)送成功,如果數(shù)據(jù)發(fā)送成功,則繼續(xù)判斷數(shù)據(jù)是否發(fā)送成功,否則進(jìn)行重發(fā)判斷;
第二模塊,用于根據(jù)數(shù)據(jù)發(fā)送失敗的原因進(jìn)行重發(fā)判斷并做出不同的處理。
[0011]進(jìn)一步地,所述根據(jù)數(shù)據(jù)發(fā)送失敗的原因進(jìn)行重發(fā)判斷并做出不同的處理具體包括:
首先,判斷是否為重要數(shù)據(jù),如果為重要數(shù)據(jù),則繼續(xù)進(jìn)行數(shù)據(jù)發(fā)送失敗原因判斷,否則返回判斷數(shù)據(jù)是否發(fā)送成功;
接著,判斷數(shù)據(jù)發(fā)送失敗的原因是否為ACK錯(cuò)誤,如果是,則統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù)并根據(jù)ACK錯(cuò)誤的個(gè)數(shù)做出相應(yīng)處理,否則繼續(xù)進(jìn)行數(shù)據(jù)發(fā)送失敗原因判斷;
最后,判斷數(shù)據(jù)發(fā)送失敗的原因是否為仲裁失敗或者數(shù)據(jù)錯(cuò)誤,如果是,則統(tǒng)計(jì)重發(fā)次數(shù)并進(jìn)行數(shù)據(jù)重發(fā);否則,進(jìn)行不同的異常處理。
[0012]進(jìn)一步地,所述統(tǒng)計(jì)重發(fā)次數(shù)并進(jìn)行數(shù)據(jù)重發(fā)具體為:
首先,統(tǒng)計(jì)重發(fā)次數(shù);
接著,判斷重發(fā)次數(shù)是否大于重發(fā)上限值,如果重發(fā)次數(shù)大于重發(fā)上限值,則進(jìn)行不同的異常處理,否則重發(fā)數(shù)據(jù)。
[0013]進(jìn)一步地,所述統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù)并根據(jù)ACK錯(cuò)誤的個(gè)數(shù)做出相應(yīng)處理具體為: 首先,統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù);
接著,判斷ACK錯(cuò)誤的個(gè)數(shù)是否大于ACK錯(cuò)誤的上限值,如果ACK錯(cuò)誤的個(gè)數(shù)大于ACK錯(cuò)誤的上限值,則進(jìn)行不同的異常處理,否則判斷數(shù)據(jù)是否發(fā)送成功。
[0014]進(jìn)一步地,所述進(jìn)行不同的異常處理具體為:
判斷是否為ACK錯(cuò)誤的個(gè)數(shù)大于ACK錯(cuò)誤的上限值,如果是,告警輸出:ACK錯(cuò)誤,從設(shè)備無應(yīng)答,否則判斷是否為重發(fā)次數(shù)大于重發(fā)上限值,如果是,則告警輸出:總線錯(cuò)誤,總線繁忙,否則告警輸出:未知通信錯(cuò)誤。
[0015]本發(fā)明的有益效果是:本發(fā)明的增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法,通過對(duì)不同數(shù)據(jù)發(fā)送失敗的原因進(jìn)行判斷,然后做出不同處理,降低了總線的資源占用率,提升了總線容量以及減小數(shù)據(jù)發(fā)送的擁堵程度,對(duì)總線異常的檢測(cè)更加及時(shí)。
[0016]本發(fā)明的另一有益效果是:本發(fā)明的增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)裝置可以有效地提高CAN總線的資源利用率,減小數(shù)據(jù)發(fā)送的擁堵程度。
【附圖說明】
[0017]下面結(jié)合附圖對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步說明: 圖1是本發(fā)明中一種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法的整體流程圖;
圖2是本發(fā)明中一種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法的的具體流程圖;
圖3是本發(fā)明中一種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法的一具體實(shí)施例的流程圖。
【具體實(shí)施方式】
[0018]需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0019]—種增強(qiáng)型CAN總線數(shù)據(jù)重發(fā)方法,參考圖1,包括以下步驟:
51、判斷數(shù)據(jù)是否發(fā)送成功,如果發(fā)送成功,則繼續(xù)判斷數(shù)據(jù)是否發(fā)送成功,否則執(zhí)行步驟S2以進(jìn)行重發(fā)判斷;
52、根據(jù)數(shù)據(jù)發(fā)送失敗的原因進(jìn)行重發(fā)判斷并做出不同的處理。
[0020]進(jìn)一步作為優(yōu)選的實(shí)施方式,參考圖2,所述步驟S2包括:
521、判斷是否為重要數(shù)據(jù),如果為重要數(shù)據(jù),則執(zhí)行步驟S22,否則執(zhí)行步驟SI;
522、判斷數(shù)據(jù)發(fā)送失敗的原因是否為ACK錯(cuò)誤,如果是,則統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù)并根據(jù)ACK錯(cuò)誤的個(gè)數(shù)做出相應(yīng)處理,否則執(zhí)行步驟S23;
523、判斷數(shù)據(jù)發(fā)送失敗的原因是否為仲裁失敗或者數(shù)據(jù)錯(cuò)誤,如果是,則統(tǒng)計(jì)重發(fā)次數(shù)并進(jìn)行數(shù)據(jù)重發(fā);否則,執(zhí)行步驟S24;
524、進(jìn)行不同的異常處理。
[0021]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S22中統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù)并根據(jù)ACK錯(cuò)誤的個(gè)數(shù)做出相應(yīng)處理包括:
5221、統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù);
5222、判斷ACK錯(cuò)誤的個(gè)數(shù)是否大于ACK錯(cuò)誤的上限值,如果ACK錯(cuò)誤的個(gè)數(shù)大于ACK錯(cuò)誤的上限值,則執(zhí)行步驟S24,否則執(zhí)行步驟SI。
[0022]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S23中統(tǒng)計(jì)重發(fā)次數(shù)并進(jìn)行數(shù)據(jù)重發(fā)包括:
5231、統(tǒng)計(jì)重發(fā)次數(shù);
5232、判斷重發(fā)次數(shù)是否大于重發(fā)上限值,如果重發(fā)次數(shù)大于重發(fā)上限值,則執(zhí)行步驟S24,否則執(zhí)行步驟S233;
5233、重發(fā)數(shù)據(jù)。
[0023]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S24包括:
5241、判斷是否為ACK錯(cuò)誤的個(gè)數(shù)大于ACK錯(cuò)誤的上限值,如果是,告警輸出:ACK錯(cuò)誤,從設(shè)備無應(yīng)答,否則執(zhí)行步驟S242;
5242、判斷是否為重發(fā)次數(shù)大于重發(fā)上限值,如果是,則告警輸出:總線錯(cuò)誤,總線繁忙,否則執(zhí)行步驟S243;
5243、告警輸出:未知通信錯(cuò)誤。
[0024]當(dāng)利用CAN總線進(jìn)行數(shù)據(jù)傳輸失敗時(shí),首先判斷所傳輸?shù)臄?shù)據(jù)是否為重要數(shù)據(jù),如果不是重要數(shù)據(jù),則返回判斷數(shù)據(jù)是否發(fā)送成功;否則,繼續(xù)做進(jìn)一步判斷。
[0025]接著,判斷重要數(shù)據(jù)發(fā)送失敗的原因,如果重要數(shù)據(jù)發(fā)送失敗的原因是ACK錯(cuò)誤,則表示數(shù)據(jù)發(fā)送成功,接收端未接收,或者發(fā)送端未與接收端建立連接,可不用重發(fā),可直接判斷接收失敗,統(tǒng)計(jì)ACK錯(cuò)誤的個(gè)數(shù),當(dāng)ACK錯(cuò)誤的個(gè)數(shù)大于預(yù)設(shè)的ACK錯(cuò)誤上限值時(shí),進(jìn)行告警輸出:ACK錯(cuò)誤,從設(shè)備無應(yīng)答;如果重要數(shù)據(jù)發(fā)送失敗的原因?yàn)橹俨檬』蛘邤?shù)據(jù)錯(cuò)誤,重要數(shù)