本發(fā)明涉及通訊技術(shù)領(lǐng)域,尤其涉及一種通訊系統(tǒng)及通訊方法。
背景技術(shù):
目前CAN(Controller Area Network,控制器局域網(wǎng)絡(luò))總線被廣泛應(yīng)用于汽車控制系統(tǒng)和環(huán)境溫度惡劣、電磁輻射強(qiáng)且振動(dòng)大的工業(yè)環(huán)境。大量的設(shè)備可以通過CAN總線相連并進(jìn)行通訊,但每個(gè)設(shè)備在發(fā)送數(shù)據(jù)時(shí)必須接收到至少一個(gè)確認(rèn)信號(hào),如果在預(yù)設(shè)的時(shí)間內(nèi)沒有接收到確認(rèn)信號(hào),它將重復(fù)發(fā)送數(shù)據(jù)。當(dāng)多個(gè)設(shè)備同時(shí)重復(fù)發(fā)送數(shù)據(jù)時(shí),則會(huì)出現(xiàn)網(wǎng)絡(luò)擁堵以及大量數(shù)據(jù)撞幀的現(xiàn)象。
鑒于此,實(shí)有必要提供一種通訊系統(tǒng)及通訊方法以克服以上缺陷。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種能避免網(wǎng)絡(luò)擁堵以及防止數(shù)據(jù)撞幀的通訊系統(tǒng)。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種通訊系統(tǒng),所述通訊系統(tǒng)包括主機(jī)、多個(gè)從機(jī)及控制器局域網(wǎng)絡(luò)總線,所述主機(jī)通過所述控制器局域網(wǎng)絡(luò)總線與所述多個(gè)從機(jī)相連并進(jìn)行通訊,每個(gè)從機(jī)在啟動(dòng)時(shí)將自己的地址注冊到所述主機(jī)的令牌列表中,所述主機(jī)根據(jù)所述令牌列表中每個(gè)從機(jī)的地址周期性地發(fā)放令牌給指定的從機(jī),獲取令牌的從機(jī)發(fā)送數(shù)據(jù)給所述主機(jī),并在所述數(shù)據(jù)發(fā)送完畢后發(fā)送放棄令牌的信息給所述主機(jī),所述主機(jī)接收到所述放棄令牌的信息后,在下一個(gè)周期根據(jù)所述令牌列表中每個(gè)從機(jī)的地址發(fā)放令牌給下一個(gè)從機(jī)。
進(jìn)一步地,每個(gè)從機(jī)在啟動(dòng)時(shí)發(fā)送注冊信息給所述主機(jī),每個(gè)注冊信息包括相應(yīng)的從機(jī)的地址,所述主機(jī)將接收到的注冊信息注冊到所述令牌列表中,且在注冊成功后發(fā)送注冊確認(rèn)信號(hào)給相應(yīng)的從機(jī),接收到所述注冊確認(rèn)信號(hào)的從機(jī)確認(rèn)注冊成功。
進(jìn)一步地,沒有接收到注冊確認(rèn)信號(hào)的從機(jī)重新向所述主機(jī)發(fā)送注冊信息。
進(jìn)一步地,所述主機(jī)包括計(jì)時(shí)器,所述主機(jī)根據(jù)所述計(jì)時(shí)器的計(jì)時(shí)來判斷是否到達(dá)發(fā)放令牌的周期,并在到達(dá)發(fā)放令牌的周期時(shí),根據(jù)所述令牌列表中每個(gè)從機(jī)的地址發(fā)放令牌給指定的從機(jī)。
本發(fā)明的目的是還提供一種能避免網(wǎng)絡(luò)擁堵以及防止數(shù)據(jù)撞幀的通訊方法。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種通訊方法,所述通訊方法包括:
每個(gè)從機(jī)在啟動(dòng)時(shí)將自己的地址注冊到主機(jī)的令牌列表中;
判斷計(jì)時(shí)器的計(jì)時(shí)是否到達(dá)所述主機(jī)發(fā)放令牌的周期;
當(dāng)所述計(jì)時(shí)器的計(jì)時(shí)到達(dá)所述主機(jī)發(fā)放令牌的周期時(shí),所述主機(jī)根據(jù)所述令牌列表中每個(gè)從機(jī)的地址發(fā)放令牌給指定的從機(jī);
獲取令牌的從機(jī)發(fā)送數(shù)據(jù)給所述主機(jī),并在所述數(shù)據(jù)發(fā)送完畢后發(fā)送放棄令牌的信息給所述主機(jī);
所述主機(jī)在接收到所述放棄令牌的信息后,判斷發(fā)送所述放棄令牌的信息的從機(jī)是否是所述令牌列表中的最后一個(gè)從機(jī);以及
當(dāng)發(fā)送所述放棄令牌的信息的從機(jī)是所述令牌列表中的最后一個(gè)從機(jī)時(shí),所述主機(jī)確認(rèn)已經(jīng)與每個(gè)從機(jī)進(jìn)行一次通訊。
進(jìn)一步地,所述通訊方法還包括:
當(dāng)發(fā)送所述放棄令牌的信息的從機(jī)不是所述令牌列表中的最后一個(gè)從機(jī),執(zhí)行“判斷計(jì)時(shí)器的計(jì)時(shí)是否到達(dá)所述主機(jī)發(fā)放令牌的周期”。
進(jìn)一步地,“每個(gè)從機(jī)在啟動(dòng)時(shí)將自己的地址注冊到主機(jī)的令牌列表中”包括:
每個(gè)從機(jī)在啟動(dòng)時(shí)發(fā)送注冊信息給所述主機(jī),每個(gè)注冊信息包括相應(yīng)的從機(jī)的地址;
所述主機(jī)將接收到的注冊信息注冊到所述令牌列表中,且在注冊成功后發(fā)送注冊確認(rèn)信號(hào)給相應(yīng)的從機(jī);
每個(gè)從機(jī)判斷是否接收到所述注冊確認(rèn)信號(hào);以及
接收到所述注冊確認(rèn)信號(hào)的從機(jī)確認(rèn)注冊成功。
進(jìn)一步地,“每個(gè)從機(jī)在啟動(dòng)時(shí)將自己的地址注冊到主機(jī)的令牌列表中”還包括:
沒有接收到所述注冊確認(rèn)信號(hào)的從機(jī)重新向所述主機(jī)發(fā)送注冊信息,并執(zhí)行“所述主機(jī)將接收到的注冊信息注冊到所述令牌列表中,且在注冊成功后發(fā)送注冊確認(rèn)信號(hào)給相應(yīng)的從機(jī)”。
相比于現(xiàn)有技術(shù),本發(fā)明通過每個(gè)從機(jī)在啟動(dòng)時(shí)將自己的地址注冊到所述主機(jī)的令牌列表中,并通過所述主機(jī)根據(jù)所述令牌列表中每個(gè)從機(jī)的地址周期性地發(fā)放令牌給指定的從機(jī),還通過獲取令牌的從機(jī)發(fā)送數(shù)據(jù)給所述主機(jī),并在所述數(shù)據(jù)發(fā)送完畢后發(fā)送放棄令牌的信息給所述主機(jī),以使所述主機(jī)接收到所述放棄令牌的信息后,在下一個(gè)周期根據(jù)所述令牌列表中每個(gè)從機(jī)的地址發(fā)放令牌給下一個(gè)從機(jī)。如此反復(fù),所述主機(jī)根據(jù)所述令牌列表中每個(gè)從機(jī)的地址依次將令牌在每個(gè)周期發(fā)送給對(duì)應(yīng)的從機(jī),以使每個(gè)從機(jī)在相應(yīng)地周期將數(shù)據(jù)發(fā)送給所述主機(jī),從而避免了所述多個(gè)從機(jī)同時(shí)向所述主機(jī)發(fā)送數(shù)據(jù)的狀況發(fā)生,進(jìn)而有效地避免了網(wǎng)絡(luò)擁堵并防止了數(shù)據(jù)撞幀。
【附圖說明】
圖1為本發(fā)明的實(shí)施例提供的通訊系統(tǒng)的原理框圖。
圖2為本發(fā)明的實(shí)施例提供的通訊方法的流程圖。
圖3為圖2中步驟S1的子流程圖。
【具體實(shí)施方式】
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人士在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
當(dāng)一個(gè)元件被認(rèn)為與另一個(gè)元件“相連”時(shí),它可以是直接連接到另一個(gè)元件或者可能同時(shí)存在居中元件。除非另有定義,本文所使用的所有的技術(shù)和科學(xué)術(shù)語與屬于本發(fā)明的技術(shù)領(lǐng)域的技術(shù)人士通常理解的含義相同。本文中在本發(fā)明的說明書中所使用的術(shù)語只是為了描述具體的實(shí)施例的目的,不是旨在于限制本發(fā)明。
請參閱圖1,圖1為本發(fā)明的實(shí)施例提供的通訊系統(tǒng)100的原理框圖。所述通訊系統(tǒng)100包括主機(jī)10、多個(gè)從機(jī)20及CAN(Controller Area Network,控制器局域網(wǎng)絡(luò))總線30。所述主機(jī)10通過所述CAN總線30與所述多個(gè)從機(jī)20相連并進(jìn)行通訊。每個(gè)從機(jī)20在啟動(dòng)時(shí)將自己的地址注冊到所述主機(jī)10的令牌列表中。所述主機(jī)10根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址周期性地發(fā)放令牌給指定的從機(jī)20。獲取令牌的從機(jī)20發(fā)送數(shù)據(jù)給所述主機(jī)10,并在所述數(shù)據(jù)發(fā)送完畢后發(fā)送放棄令牌的信息給所述主機(jī)10。所述主機(jī)10接收到所述放棄令牌的信息后,在下一個(gè)周期根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址發(fā)放令牌給下一個(gè)從機(jī)20。如此反復(fù),所述主機(jī)10根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址依次將令牌在每個(gè)周期發(fā)送給對(duì)應(yīng)的從機(jī)20,以使每個(gè)從機(jī)20在相應(yīng)地周期將數(shù)據(jù)發(fā)送給所述主機(jī)10,從而避免了所述多個(gè)從機(jī)20同時(shí)向所述主機(jī)10發(fā)送數(shù)據(jù)的狀況發(fā)生,進(jìn)而有效地避免了網(wǎng)絡(luò)擁堵并防止了數(shù)據(jù)撞幀。
在本實(shí)施方式中,每個(gè)從機(jī)20在啟動(dòng)時(shí)發(fā)送注冊信息給所述主機(jī)10,每個(gè)注冊信息包括相應(yīng)的從機(jī)20的地址。所述主機(jī)10將接收到的注冊信息注冊到所述令牌列表中,且在注冊成功后發(fā)送注冊確認(rèn)信號(hào)給相應(yīng)的從機(jī)20,接收到所述注冊確認(rèn)信號(hào)的從機(jī)20確認(rèn)注冊成功。沒有接收到注冊確認(rèn)信號(hào)的從機(jī)20重新向所述主機(jī)10發(fā)送注冊信息。當(dāng)每個(gè)從機(jī)20注冊成功時(shí),每個(gè)從機(jī)20的地址也被成功地注冊到所述主機(jī)10的令牌列表中。
在本實(shí)施方式中,所述主機(jī)10包括計(jì)時(shí)器12。所述主機(jī)10根據(jù)所述計(jì)時(shí)器12的計(jì)時(shí)來判斷是否到達(dá)發(fā)送令牌的周期,并在到達(dá)發(fā)送令牌的周期時(shí),根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址發(fā)放令牌給指定的從機(jī)20。所述周期的時(shí)間長短可根據(jù)實(shí)際情況進(jìn)行相應(yīng)調(diào)整,例如,所述周期可以為10毫秒,20毫秒等。
請參閱圖2,圖2為本發(fā)明的實(shí)施例提供的通訊方法的流程圖。根據(jù)不同的需求,圖2所示的流程圖中的步驟的執(zhí)行順序可以改變,某些步驟可以拆分為幾個(gè)步驟,某些步驟可以省略。
步驟S1,每個(gè)從機(jī)20在啟動(dòng)時(shí)將自己的地址注冊到主機(jī)10的令牌列表中。
步驟S2,判斷計(jì)時(shí)器12的計(jì)時(shí)是否到達(dá)所述主機(jī)10發(fā)放令牌的周期。當(dāng)所述計(jì)時(shí)器12的計(jì)時(shí)到達(dá)所述主機(jī)10發(fā)放令牌的周期時(shí),執(zhí)行步驟S3;當(dāng)所述計(jì)時(shí)器12的計(jì)時(shí)沒有到達(dá)所述主機(jī)10發(fā)放令牌的周期時(shí),執(zhí)行步驟S2。
步驟S3,所述主機(jī)10根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址發(fā)放令牌給指定的從機(jī)20。
步驟S4,獲取令牌的從機(jī)20發(fā)送數(shù)據(jù)給所述主機(jī)10,并在所述數(shù)據(jù)發(fā)送完畢后發(fā)送放棄令牌的信息給所述主機(jī)10。
步驟S5,所述主機(jī)10在接收到所述放棄令牌的信息后,判斷發(fā)送所述放棄令牌的信息的從機(jī)20是否是所述令牌列表中的最后一個(gè)從機(jī)20。當(dāng)發(fā)送所述放棄令牌的信息的從機(jī)20是所述令牌列表中的最后一個(gè)從機(jī)20時(shí),執(zhí)行步驟S6;當(dāng)發(fā)送所述放棄令牌的信息的從機(jī)20不是所述令牌列表中的最后一個(gè)從機(jī)20時(shí),執(zhí)行步驟S2。
步驟S6,所述主機(jī)10確認(rèn)已經(jīng)與每個(gè)從機(jī)20進(jìn)行一次通訊。
請參閱圖3,圖3為圖2中步驟S1的子流程圖。根據(jù)不同的需求,圖3所示的流程圖中的步驟的執(zhí)行順序可以改變,某些步驟可以拆分為幾個(gè)步驟,某些步驟可以省略。
步驟S11,每個(gè)從機(jī)20在啟動(dòng)時(shí)發(fā)送注冊信息給所述主機(jī)10,每個(gè)注冊信息包括相應(yīng)的從機(jī)20的地址。
步驟S12,所述主機(jī)10將接收到的注冊信息注冊到所述令牌列表中,且在注冊成功后發(fā)送注冊確認(rèn)信號(hào)給相應(yīng)的從機(jī)20。
步驟S13,每個(gè)從機(jī)20判斷是否接收到所述注冊確認(rèn)信號(hào)。接收到所述注冊確認(rèn)信號(hào)的從機(jī)20,執(zhí)行步驟S14;沒有接收到所述注冊確認(rèn)信號(hào)的從機(jī)20,執(zhí)行步驟S15。
步驟S14,接收到所述注冊確認(rèn)信號(hào)的從機(jī)20確認(rèn)注冊成功。
步驟S15,沒有接收到所述注冊確認(rèn)信號(hào)的從機(jī)20重新向所述主機(jī)10發(fā)送注冊信息,并執(zhí)行步驟S12。
本發(fā)明通過每個(gè)從機(jī)20在啟動(dòng)時(shí)將自己的地址注冊到所述主機(jī)10的令牌列表中,并通過所述主機(jī)10根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址周期性地發(fā)放令牌給指定的從機(jī)20,還通過獲取令牌的從機(jī)20發(fā)送數(shù)據(jù)給所述主機(jī)10,并在所述數(shù)據(jù)發(fā)送完畢后發(fā)送放棄令牌的信息給所述主機(jī)10,以使所述主機(jī)10接收到所述放棄令牌的信息后,在下一個(gè)周期根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址發(fā)放令牌給下一個(gè)從機(jī)20。如此反復(fù),所述主機(jī)10根據(jù)所述令牌列表中每個(gè)從機(jī)20的地址依次將令牌在每個(gè)周期發(fā)送給對(duì)應(yīng)的從機(jī)20,以使每個(gè)從機(jī)20在相應(yīng)地周期將數(shù)據(jù)發(fā)送給所述主機(jī)10,從而避免了所述多個(gè)從機(jī)20同時(shí)向所述主機(jī)10發(fā)送數(shù)據(jù)的狀況發(fā)生,進(jìn)而有效地避免了網(wǎng)絡(luò)擁堵并防止了數(shù)據(jù)撞幀。
本發(fā)明并不僅僅限于說明書和實(shí)施方式中所描述,因此對(duì)于熟悉領(lǐng)域的人士而言可容易地實(shí)現(xiàn)另外的優(yōu)點(diǎn)和修改,故在不背離權(quán)利要求及等同范圍所限定的一般概念的精神和范圍的情況下,本發(fā)明并不限于特定的細(xì)節(jié)、代表性的設(shè)備和這里示出與描述的圖示示例。