北方聯(lián)創(chuàng)通信有限公司 賀曄曄
一種半雙工通信數(shù)話同傳功能的實(shí)現(xiàn)算法
北方聯(lián)創(chuàng)通信有限公司 賀曄曄
本文主要通過文字描述及流程圖的方式給讀者講述了一種在半雙工信道上實(shí)現(xiàn)全雙工通信的協(xié)議實(shí)現(xiàn)算法,該算法具有一定的實(shí)用性及通用性,適用于多種應(yīng)用方式,能夠應(yīng)用于多種需要同時(shí)進(jìn)行數(shù)據(jù)及話音通信且對(duì)實(shí)時(shí)性有一定要求的應(yīng)用場(chǎng)景。
輪詢令牌;主從節(jié)點(diǎn);半雙工總線;收發(fā)地址
受傳統(tǒng)傳輸線路及價(jià)格成本的影響,目前半雙工通信仍有較大的應(yīng)用市場(chǎng),例如:軍用電臺(tái)、工業(yè)及民用對(duì)講機(jī)等等,它們都是使用半雙工通信方式進(jìn)行工作的。如何充分利用現(xiàn)有的半雙工通信機(jī)制,在保證通信成本及價(jià)格不變的基礎(chǔ)上,實(shí)現(xiàn)半雙工通信方式中的雙向數(shù)據(jù)及話音通信改造,從而讓用戶感覺到自己在使用一個(gè)全雙工的通信方式。這對(duì)于充分利用現(xiàn)有線路,節(jié)約用戶通信成本,具有重要的意義。為此,本文提出了一種半雙工到全雙工方通信方式的協(xié)議處理方案及其實(shí)現(xiàn)方法。
本系統(tǒng)按以下連接關(guān)系示意圖為例進(jìn)行講述。
圖1 系統(tǒng)連接關(guān)系圖
圖1 所示中,各主、從節(jié)點(diǎn)分別通過RS-232異步串行接口接入半雙工通信總線,主、從節(jié)點(diǎn)內(nèi)部本身可定義為兩個(gè)層次:分別為應(yīng)用層及鏈路層,其中應(yīng)用層為用戶應(yīng)用軟件,面向用戶提供接口,而鏈路層則為底層通信提供協(xié)議及鏈路支持。
為在半雙工信道上實(shí)現(xiàn)全雙工通信,本文對(duì)各通信雙方協(xié)議規(guī)程進(jìn)行了如下規(guī)定:
主節(jié)點(diǎn)以100ms為周期定時(shí)發(fā)送數(shù)據(jù)包給從節(jié)點(diǎn)(簡(jiǎn)稱:100ms輪詢令牌),地址從1到N周而復(fù)始(N參數(shù)在上電后設(shè)置好),主節(jié)點(diǎn)在應(yīng)用層無數(shù)據(jù)發(fā)送時(shí)由鏈路層自動(dòng)發(fā)送空閑包,否則,鏈路層接收應(yīng)用層的信令包(為實(shí)現(xiàn)雙方話音通信的建立所進(jìn)行必要的信令交互)、數(shù)話同傳包(即一個(gè)報(bào)文中包含數(shù)據(jù)信息及話音信息)或純數(shù)據(jù)包,通過線路發(fā)送出去(同時(shí)通知應(yīng)用層當(dāng)前鏈路層處于忙狀態(tài));從節(jié)點(diǎn)在收到主節(jié)點(diǎn)信令包、數(shù)話同傳包、或純數(shù)據(jù)包后根據(jù)自身情況發(fā)送信令包、數(shù)話同傳包或純數(shù)據(jù)包或空閑包。
某節(jié)點(diǎn)若要發(fā)送話音,必須先發(fā)送發(fā)話請(qǐng)求消息并等待發(fā)話占用證實(shí)消息(即占用令牌),某節(jié)點(diǎn)得到令牌后由從節(jié)點(diǎn)切換成主節(jié)點(diǎn)(原來的主節(jié)點(diǎn)接收到發(fā)話請(qǐng)求消息后,則發(fā)送發(fā)話占用證實(shí)消息,并將自己由主節(jié)點(diǎn)切換成從節(jié)點(diǎn)),系統(tǒng)同一時(shí)刻只允許一個(gè)節(jié)點(diǎn)占用數(shù)據(jù)發(fā)送令牌。以下對(duì)算法的各種情況進(jìn)行分析:
2.1 系統(tǒng)中沒有數(shù)據(jù)或話音發(fā)送
主節(jié)點(diǎn)以100ms為周期發(fā)送空閑包給從節(jié)點(diǎn),其中空閑包中的接收地址從1至N遞增,某節(jié)點(diǎn)地址與報(bào)文的接收地址匹配后,回發(fā)空閑包;如果不匹配則不予響應(yīng)。
2.2 主節(jié)點(diǎn)需要發(fā)送數(shù)據(jù),從節(jié)點(diǎn)也需要發(fā)送數(shù)據(jù)
主節(jié)點(diǎn)以100ms為周期發(fā)送數(shù)據(jù)包給從節(jié)點(diǎn),其中數(shù)據(jù)包中的接收地址從1至N遞增,從節(jié)點(diǎn)接收到數(shù)據(jù)包后,如果某節(jié)點(diǎn)地址與報(bào)文的接收地址匹配,若從節(jié)點(diǎn)有數(shù)據(jù)需要回發(fā)數(shù)據(jù)給主節(jié)點(diǎn),在匹配地址成功后回發(fā)自身數(shù)據(jù);否則不回發(fā)數(shù)據(jù)。
2.3 當(dāng)主節(jié)點(diǎn)需要發(fā)送話音和數(shù)據(jù),其它節(jié)點(diǎn)也需要發(fā)送話音和數(shù)據(jù)
主節(jié)點(diǎn)以100ms為周期發(fā)送數(shù)話同傳包給從節(jié)點(diǎn),其中數(shù)話同傳包中的接收地址從1至N遞增,從節(jié)點(diǎn)接收到數(shù)據(jù)包后,如果某節(jié)點(diǎn)地址與報(bào)文的接收地址匹配,若從節(jié)點(diǎn)需要回發(fā)數(shù)據(jù)或話音給主節(jié)點(diǎn),在匹配地址成功后回發(fā)數(shù)據(jù)或話音;否則不回發(fā)數(shù)據(jù)或話音。
2.4 從節(jié)點(diǎn)需要發(fā)送話音和數(shù)據(jù),其它節(jié)點(diǎn)需要發(fā)送數(shù)據(jù)
從節(jié)點(diǎn)發(fā)送發(fā)話請(qǐng)求信令,獲得應(yīng)答后獲得100ms輪詢令牌,以100ms為周期發(fā)送數(shù)話同傳包,地址從0至N遞增(跳過自身地址),此時(shí)主節(jié)點(diǎn)的100ms輪詢令牌喪失,同其它節(jié)點(diǎn)一樣被動(dòng)響應(yīng)數(shù)話同傳包。當(dāng)從節(jié)點(diǎn)釋放發(fā)話請(qǐng)求后,100ms輪詢令牌重新歸主節(jié)點(diǎn)所有。如果主節(jié)點(diǎn)要進(jìn)行發(fā)話,發(fā)送發(fā)話占用消息,則從節(jié)點(diǎn)無條件釋放發(fā)話權(quán)(即主節(jié)點(diǎn)具有最高優(yōu)先級(jí));如果這時(shí)其它從節(jié)點(diǎn)進(jìn)行發(fā)話請(qǐng)求則不予響應(yīng)。
2.5 節(jié)點(diǎn)數(shù)據(jù)發(fā)送規(guī)則
當(dāng)主、從節(jié)點(diǎn)獲得100ms輪詢令牌時(shí),上層應(yīng)用程序定時(shí)在數(shù)據(jù)包中插入話音和數(shù)據(jù),將數(shù)據(jù)通過RS-232串口發(fā)往半雙工總線,不需做流控處理;當(dāng)主、從節(jié)點(diǎn)喪失100ms輪詢令牌時(shí),上層應(yīng)用程序必須取得半雙工總線的發(fā)送允許消息后才能發(fā)送一包數(shù)據(jù),否則將數(shù)據(jù)緩存;如果從節(jié)點(diǎn)沒有取得發(fā)話請(qǐng)求占用證實(shí)消息,則生成的話音包直接丟棄。
主、從節(jié)點(diǎn)算法實(shí)現(xiàn)的流程分別見圖2、圖3所示。
圖2 主節(jié)點(diǎn)算法實(shí)現(xiàn)流程圖
圖3 從節(jié)點(diǎn)實(shí)現(xiàn)流程圖
為配合該算法的順利實(shí)現(xiàn),上層應(yīng)用需要做以下處理:
a.設(shè)置通信鏈路層支持的最大通信節(jié)點(diǎn)數(shù);
b.設(shè)置本節(jié)點(diǎn)ID號(hào),否則鏈路層不發(fā)送空閑包;
c.發(fā)送令牌占用釋放消息;
d.若本節(jié)點(diǎn)占用輪詢令牌,當(dāng)有數(shù)據(jù)或話音發(fā)送時(shí),以100ms為周期向半雙工總線節(jié)點(diǎn)發(fā)送,無需等待報(bào)文發(fā)送使能消息;
e.若本節(jié)點(diǎn)不占用輪詢令牌,必須等待報(bào)文發(fā)送使能消息才能發(fā)送一幀;
f.其余所有控制如(空閑包的收發(fā)、鏈路層數(shù)據(jù)管理)由半雙工總線負(fù)責(zé);默認(rèn)節(jié)點(diǎn)號(hào)0為主節(jié)點(diǎn),半雙工總線動(dòng)態(tài)識(shí)別節(jié)點(diǎn)成員的變化。
主從節(jié)點(diǎn)到半雙工總線為異步串行接口。傳輸數(shù)據(jù)格式:1位起始位,8位數(shù)據(jù)位,1位停止位,無校驗(yàn)位;通信速率:115200bps。
應(yīng)用報(bào)文格式如表1所示。
表1 應(yīng)用報(bào)文格式定義
5.1 報(bào)文頭
1字節(jié),默認(rèn)為0x5E。
5.2 收發(fā)地址
共2字節(jié)。報(bào)文頭后緊跟的第1個(gè)字節(jié)表示發(fā)送地址,報(bào)文頭后緊跟的第2個(gè)字節(jié)表示接收地址。其中發(fā)送地址取值:0~127,接收地址取值:0~127。接收地址和發(fā)送地址定義如下表2。
接收地址又稱輪循地址,接收方根據(jù)該地址值進(jìn)行匹配,當(dāng)該地址與自身節(jié)點(diǎn)地址匹配時(shí),鏈路層主動(dòng)上報(bào)允許發(fā)送消息給應(yīng)用層。從而使得應(yīng)用層有機(jī)會(huì)發(fā)送本節(jié)點(diǎn)待發(fā)送的數(shù)據(jù)、話音和信令。
發(fā)送地址是發(fā)送方填充的自身節(jié)點(diǎn)地址。接收地址和發(fā)送地址定義如表2所示。
表2 收發(fā)地址編碼含義
5.3 類型
1字節(jié),格式定義見表3。