專利名稱:一種主從設(shè)備通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信,尤指一種主從設(shè)備之間的數(shù)據(jù)通信方法。
背景技術(shù):
一般情況下,設(shè)備之間的通信協(xié)議有很多種,比如TCP等,這些通信協(xié)議比較復(fù)雜,而且還有誤碼、校驗(yàn)、重發(fā)等等機(jī)制,系統(tǒng)非常龐大,在通信信道容易被干擾的環(huán)境是這種通信協(xié)議最佳的應(yīng)用場(chǎng)合。
其實(shí),對(duì)于距離很近的設(shè)備之間進(jìn)行通信時(shí),由于兩個(gè)通信設(shè)備相隔很近(一般在2米以內(nèi)),通信信道穩(wěn)定,很難受到外界干擾而造成誤碼,因此,并不需要校驗(yàn)、重發(fā)等復(fù)雜的通信機(jī)制來保障通信的可靠性和正確性。特別是對(duì)于主從設(shè)備之間的通信,由于主設(shè)備固定為命令發(fā)起者,從設(shè)備只是被動(dòng)接收命令或數(shù)據(jù),主從設(shè)備之間很少或沒有信令的交互,在這樣的應(yīng)用中使用TCP等通信協(xié)議進(jìn)行通信并不能為系統(tǒng)帶來性能上的極大提高,而且使系統(tǒng)變得復(fù)雜龐大,為此,可以尋求一種相對(duì)較簡(jiǎn)單的通信機(jī)制來實(shí)現(xiàn)近距離的主從設(shè)備之間的數(shù)據(jù)通信。
在這種通信信道比較可靠的設(shè)備之間的通信時(shí),往往會(huì)采用以下類似的通信協(xié)議,這種通信協(xié)議一般是在每個(gè)數(shù)據(jù)包的前面增加一個(gè)信令頭(一般這個(gè)信令頭的長(zhǎng)度為4個(gè)字節(jié)),然后跟著這個(gè)信令的長(zhǎng)度信息(一般也是4個(gè)字節(jié)),表示這個(gè)數(shù)據(jù)包的長(zhǎng)度,最后還會(huì)用一個(gè)信令來表示數(shù)據(jù)包結(jié)束,如圖1所示。類似的通信協(xié)議有以下的一些缺點(diǎn)1、加上信令頭的目的,是為了表示數(shù)據(jù)包的開始,因?yàn)樗鶄鬏數(shù)臄?shù)據(jù)里出現(xiàn)與信令頭相同的4字節(jié)數(shù)據(jù)的概率很低,因此這種通信機(jī)制還是不能在根本上避免通信出錯(cuò)的情況發(fā)生;
2、當(dāng)出現(xiàn)一次通信錯(cuò)誤,由于長(zhǎng)度信息的存在,可能會(huì)造成比較困難的通信恢復(fù);3、這種通信協(xié)議對(duì)少量有效數(shù)據(jù)的通信效率比較低。
發(fā)明內(nèi)容
本發(fā)明提供一種主從設(shè)備通信方法,以解決現(xiàn)有技術(shù)中通信機(jī)制復(fù)雜的問題。
本發(fā)明提供的主從設(shè)備通信方法,包括下列步驟A、主設(shè)備將需要發(fā)送給從設(shè)備的數(shù)據(jù)轉(zhuǎn)換成字符串,并發(fā)送給從設(shè)備;B、從設(shè)備將接收的字符串轉(zhuǎn)換成主設(shè)備發(fā)送的數(shù)據(jù)。
所述字符串是以ASCII碼定義的字符串。
根據(jù)本發(fā)明的上述方法,所述主設(shè)備將字符串打成數(shù)據(jù)包發(fā)送,每個(gè)數(shù)據(jù)包帶有數(shù)據(jù)包結(jié)束標(biāo)識(shí);所述從設(shè)備根據(jù)接收到的數(shù)據(jù)包結(jié)束標(biāo)識(shí),接收一個(gè)完整的數(shù)據(jù)包后進(jìn)行數(shù)據(jù)轉(zhuǎn)換。
根據(jù)本發(fā)明的上述方法,所述主設(shè)備在發(fā)送的數(shù)據(jù)包中插入分隔符,用以區(qū)分不同的數(shù)據(jù)組;所述從設(shè)備分析接收的數(shù)據(jù)包中是否有約定的分隔符,若有,則將分隔符前后的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
所述分隔符為空格。
所述數(shù)據(jù)包結(jié)束標(biāo)識(shí)為回車符。
所述從設(shè)備中設(shè)有一個(gè)字符串?dāng)?shù)組,將接收的字符串存入該字符串?dāng)?shù)組中;當(dāng)收到一回車符時(shí),讀出該字符串?dāng)?shù)組中存儲(chǔ)的字符串進(jìn)行轉(zhuǎn)換,并清空該字符串?dāng)?shù)組。
所述數(shù)據(jù)包為長(zhǎng)度相同或不同的數(shù)據(jù)包。
采用本發(fā)明的方法,能夠簡(jiǎn)單實(shí)現(xiàn)主從設(shè)備之間的通信,相對(duì)于現(xiàn)有技術(shù),本發(fā)明方法的優(yōu)點(diǎn)如下1、回車符保證了每個(gè)數(shù)據(jù)包的正確開始;
2、如果在某個(gè)數(shù)據(jù)包出現(xiàn)錯(cuò)誤,其下一個(gè)數(shù)據(jù)包就已經(jīng)正確的恢復(fù)通信;3、在少量數(shù)據(jù)通信時(shí),其效率比較高。
圖1為現(xiàn)有技術(shù)數(shù)據(jù)包格式示意圖;圖2為本發(fā)明實(shí)施例中主設(shè)備數(shù)據(jù)轉(zhuǎn)換流程圖;圖3為本發(fā)明實(shí)施例中從設(shè)備接收數(shù)據(jù)流程圖;圖4為本發(fā)明實(shí)施例中從設(shè)備數(shù)據(jù)轉(zhuǎn)換流程圖。
具體實(shí)施例方式
本發(fā)明方法適用于相隔很近的兩個(gè)主從設(shè)備,它們之間通過通信接口(串口或并口)相連接。假設(shè)主設(shè)備要向從設(shè)備發(fā)送16進(jìn)制數(shù)據(jù)0x112233,其攜帶參數(shù)0x44,則在主設(shè)備需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將16進(jìn)制數(shù)據(jù)0x112233轉(zhuǎn)換成ASCII碼字符串再發(fā)送出去。為了使從設(shè)備能正確地將接收的字符串還原成主設(shè)備所發(fā)送的原始數(shù)據(jù),需要預(yù)先在主從設(shè)備中約定表示信令結(jié)束的標(biāo)識(shí)符,本實(shí)施例中采用回車符來代表一個(gè)信令的數(shù)據(jù)包結(jié)束;由于信令有可能帶有一個(gè)或多個(gè)參數(shù),參數(shù)與信令之間或參數(shù)之間需要加以分隔,因此,需要預(yù)先約定參數(shù)分隔符,本實(shí)施例中采用空格來進(jìn)行分隔。根據(jù)上述約定,主設(shè)備將需要傳送的數(shù)據(jù)轉(zhuǎn)換成字符串的具體流程如圖2所示,包括下列步驟首先將16進(jìn)制數(shù)據(jù)0x112233轉(zhuǎn)換成字符串,得到“112233”;增加空格,并將參數(shù)0x44轉(zhuǎn)換為參數(shù)字符串,得到“112233 44”;增加回車符,表示該信令數(shù)據(jù)包結(jié)束,得到“112233 44\n”,其中“\n”表示回車符;將該轉(zhuǎn)換后的數(shù)據(jù)通過主設(shè)備與從設(shè)備之間的通信接口發(fā)送給從設(shè)備。
從設(shè)備接收數(shù)據(jù)流程圖如圖3所示,包括下列步驟S31從設(shè)備不斷檢測(cè)與主設(shè)備的通信接口;
S32若檢測(cè)到有新的數(shù)據(jù)到來,則執(zhí)行步驟S33;否則,返回步驟S31,繼續(xù)等待主設(shè)備發(fā)來新數(shù)據(jù);S33讀取接收的數(shù)據(jù)信息;S34判斷當(dāng)前接收的數(shù)據(jù)是否為表示一個(gè)數(shù)據(jù)包結(jié)束的回車符,若否,執(zhí)行步驟S35;若是,執(zhí)行步驟S36;S35將當(dāng)前接收的數(shù)據(jù)存儲(chǔ)到一個(gè)在從設(shè)備中開辟的字符串?dāng)?shù)組中加以保存,返回步驟S31,等待數(shù)據(jù)包的下一個(gè)字符串從接口傳送到從設(shè)備中;S36讀取字符串?dāng)?shù)組中保存的數(shù)據(jù),即當(dāng)前數(shù)據(jù)包的全部字符串,準(zhǔn)備進(jìn)入字符串轉(zhuǎn)換流程,將接收的字符串轉(zhuǎn)換成16進(jìn)制數(shù)據(jù)。
具體轉(zhuǎn)換方法如圖4所示,包括下列步驟S41從字符串?dāng)?shù)組中讀取一個(gè)數(shù)據(jù)包的數(shù)據(jù);本實(shí)施例中,讀到的數(shù)據(jù)為字符串“112233 44”,字符串長(zhǎng)度為9(包括空格);S42判斷該數(shù)據(jù)包各字符串之間是否存在空格,若有,則執(zhí)行步驟S43,否則,轉(zhuǎn)至步驟S44;S43以空格為分界,將接收的字符串分成若干串彼此分隔的字符串;本實(shí)施例中,得到兩串字符串,第一串字符串為“112233”;第二串字符串為“44”;S44將各字符串轉(zhuǎn)換成16進(jìn)制數(shù)據(jù),即可得到主設(shè)備發(fā)送的信令數(shù)據(jù)0x112233和0x44。
以上實(shí)施例中,數(shù)據(jù)包結(jié)束標(biāo)識(shí)符可以在主從設(shè)備中預(yù)先約定為任意字符。字符串之間的分隔符也可以在主從設(shè)備中預(yù)先約定為任意字符。
本發(fā)明中,主設(shè)備需要發(fā)送的數(shù)據(jù)不局限于實(shí)施例中的16進(jìn)制數(shù)據(jù),可以為任意進(jìn)制數(shù)據(jù)。
本發(fā)明轉(zhuǎn)換后的字符串可以是ASCII碼定義的字符串,但并不局限于此。
權(quán)利要求
1.一種主從設(shè)備通信方法,其特征在于包括下列步驟A、主設(shè)備將需要發(fā)送給從設(shè)備的數(shù)據(jù)轉(zhuǎn)換成字符串,并發(fā)送給從設(shè)備;B、從設(shè)備將接收的字符串轉(zhuǎn)換成主設(shè)備發(fā)送的數(shù)據(jù)。
2.如權(quán)利要求1所述的主從設(shè)備通信方法,其特征在于,所述字符串是以ASCII碼定義的字符串。
3.如權(quán)利要求2所述的主從設(shè)備通信方法,其特征在于,所述主設(shè)備將字符串打成數(shù)據(jù)包發(fā)送,每個(gè)數(shù)據(jù)包帶有數(shù)據(jù)包結(jié)束標(biāo)識(shí);所述從設(shè)備根據(jù)接收到的數(shù)據(jù)包結(jié)束標(biāo)識(shí),接收一個(gè)完整的數(shù)據(jù)包后進(jìn)行數(shù)據(jù)轉(zhuǎn)換。
4.如權(quán)利要求3所述的主從設(shè)備通信方法,其特征在于,所述主設(shè)備在發(fā)送的數(shù)據(jù)包中插入分隔符,用以區(qū)分不同的數(shù)據(jù)組;所述從設(shè)備分析接收的數(shù)據(jù)包中是否有約定的分隔符,若有,則將分隔符前后的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
5.如權(quán)利要求4所述的主從設(shè)備通信方法,其特征在于,所述分隔符為空格。
6.如權(quán)利要求5所述的主從設(shè)備通信方法,其特征在于,所述數(shù)據(jù)包結(jié)束標(biāo)識(shí)為回車符。
7.如權(quán)利要求6所述的主從設(shè)備通信方法,其特征在于,所述從設(shè)備中設(shè)有一個(gè)字符串?dāng)?shù)組,將接收的字符串存入該字符串?dāng)?shù)組中;當(dāng)收到一回車符時(shí),讀出該字符串?dāng)?shù)組中存儲(chǔ)的字符串進(jìn)行轉(zhuǎn)換,并清空該字符串?dāng)?shù)組。
8.如權(quán)利要求3所述的主從設(shè)備通信方法,其特征在于,所述數(shù)據(jù)包為長(zhǎng)度相同或不同的數(shù)據(jù)包。
全文摘要
本發(fā)明提供一種主從設(shè)備通信方法,以解決現(xiàn)有技術(shù)中通信機(jī)制復(fù)雜的問題。包括步驟A.主設(shè)備將需要發(fā)送給從設(shè)備的數(shù)據(jù)轉(zhuǎn)換成字符串,并發(fā)送給從設(shè)備;B.從設(shè)備將接收的字符串轉(zhuǎn)換成主設(shè)備發(fā)送的數(shù)據(jù)。采用本發(fā)明的方法能簡(jiǎn)單實(shí)現(xiàn)距離較近的主從設(shè)備之間的數(shù)據(jù)通信。
文檔編號(hào)H04L29/06GK1633125SQ200410102538
公開日2005年6月29日 申請(qǐng)日期2004年12月24日 優(yōu)先權(quán)日2004年12月24日
發(fā)明者游明琦, 劉勇 申請(qǐng)人:北京中星微電子有限公司