專利名稱:一種命令傳送方法
技術(shù)領(lǐng)域:
本發(fā)明涉及設(shè)備之間的通信,尤指一種設(shè)備之間傳送命令數(shù)據(jù)的方法。
背景技術(shù):
一般情況下,設(shè)備之間的通信協(xié)議有很多種,比如TCP等,這些通信協(xié)議比較復(fù)雜,而且還有誤碼、校驗(yàn)、重發(fā)等等機(jī)制,系統(tǒng)非常龐大,在通信信道容易被干擾的環(huán)境是這種通信協(xié)議最佳的應(yīng)用場合。
其實(shí),對于距離很近的設(shè)備之間進(jìn)行通信時,由于兩個通信設(shè)備相隔很近(一般在2米以內(nèi)),通信信道穩(wěn)定,很難受到外界干擾而造成誤碼,因此,并不需要校驗(yàn)、重發(fā)等復(fù)雜的通信機(jī)制來保障通信的可靠性和正確性。特別是對于主從設(shè)備之間的通信,由于主設(shè)備固定為命令發(fā)起者,從設(shè)備只是被動接收命令或數(shù)據(jù),主從設(shè)備之間很少或沒有信令的交互,在這樣的應(yīng)用中使用TCP等通信協(xié)議進(jìn)行通信并不能為系統(tǒng)帶來性能上的極大提高,而且使系統(tǒng)變得復(fù)雜龐大,為此,可以尋求一種相對較簡單的通信機(jī)制來實(shí)現(xiàn)近距離的主從設(shè)備之間的命令數(shù)據(jù)傳送。
發(fā)明內(nèi)容
本發(fā)明提供一種命令傳送方法,以解決現(xiàn)有技術(shù)中近距離設(shè)備之間通信時需采用復(fù)雜通信協(xié)議的問題。
本發(fā)明的命令傳送方法包括將命令劃分為不同的命令類型,設(shè)定不同類型命令的參數(shù)對應(yīng)的處理方式,當(dāng)進(jìn)行命令傳送時,命令發(fā)送端首先將當(dāng)前命令的命令字轉(zhuǎn)換成字符串,再根據(jù)當(dāng)前命令所屬命令類型對其參數(shù)進(jìn)行相應(yīng)處理后發(fā)送;命令接收端將接收的命令字字符串轉(zhuǎn)換為對應(yīng)命令,并根據(jù)接收命令的類型對接收的參數(shù)數(shù)據(jù)進(jìn)行相對應(yīng)的轉(zhuǎn)換處理。
根據(jù)本發(fā)明的上述方法,將命令劃分為如下三種類型第一類型命令參數(shù)為字符串;第二類型命令參數(shù)為非字符串,且參數(shù)數(shù)據(jù)小于設(shè)定的閾值;第三類型命令參數(shù)為非字符串,且參數(shù)數(shù)據(jù)大于等于設(shè)定的閾值;在命令發(fā)送端和命令接收端分別存儲所述命令及其所屬命令類型對照表;當(dāng)進(jìn)行命令傳送時,執(zhí)行下列步驟A、判斷當(dāng)前命令是否為第一類型命令,若是,則將命令字字符串、參數(shù)字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,轉(zhuǎn)至步驟D;否則,執(zhí)行步驟B;B、判斷當(dāng)前命令是否為第二類型命令,若是,則將其參數(shù)轉(zhuǎn)換為字符串,將命令字字符串、轉(zhuǎn)換后的參數(shù)字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,轉(zhuǎn)至步驟D;否則,執(zhí)行步驟C;C、計算出當(dāng)前命令的參數(shù)數(shù)據(jù)長度,并將計算出的長度值轉(zhuǎn)換為字符串,將命令字字符串、轉(zhuǎn)換后的長度值字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,并在發(fā)送完成后,連續(xù)發(fā)送所述參數(shù)數(shù)據(jù);轉(zhuǎn)至步驟D;D、命令接收端接收到一個完整的命令后,首先將接收的命令字字符串轉(zhuǎn)換為相應(yīng)命令;再根據(jù)存儲的命令類型對照表,判斷出當(dāng)前接收命令所屬的命令類型,若為第一類型命令,則將接收的參數(shù)字符串作為當(dāng)前命令的參數(shù);若為第二類型命令,則將接收的參數(shù)字符串轉(zhuǎn)換為對應(yīng)參數(shù)數(shù)據(jù);若為第三類型命令,則將接收的長度值字符串轉(zhuǎn)換為長度數(shù)值,并連續(xù)接收相同長度的數(shù)據(jù)作為當(dāng)前命令的參數(shù)數(shù)據(jù)。
所述字符串是以ASCII碼定義的字符串。
根據(jù)本發(fā)明的上述方法,若所述命令沒有命令參數(shù),則僅將其命令字轉(zhuǎn)換為字符串發(fā)送。
若所述命令帶有命令參數(shù),則在轉(zhuǎn)換后的命令字字符串和參數(shù)字符串之間插入分隔符;接收端分析接收的命令中是否有約定的分隔符,若有,則將接收的第一個分隔符之前的數(shù)據(jù)信息轉(zhuǎn)換為命令字。
若所述參數(shù)字符串不止一個,則在參數(shù)字符串之間插入分隔符,用以區(qū)分不同的參數(shù);接收端根據(jù)接收的命令類型將分隔符前后的數(shù)據(jù)進(jìn)行相應(yīng)處理。
所述分隔符為空格。
所述命令結(jié)束標(biāo)識符為回車符。
采用本發(fā)明的方法能夠簡單、快捷地實(shí)現(xiàn)近距離設(shè)備之間的命令數(shù)據(jù)傳送。
圖1為本發(fā)明方法命令發(fā)送端發(fā)送命令流程圖;圖2為本發(fā)明方法發(fā)送的命令字符串示意圖;圖3為本發(fā)明實(shí)施例中傳送參數(shù)數(shù)據(jù)示意圖;圖4為本發(fā)明方法命令接收端接收命令流程圖。
具體實(shí)施例方式
本發(fā)明的命令傳送方法,需要首先在命令發(fā)送端和接收端約定全部命令的命令字,并使每一個命令的命令字唯一。由于使用C語言進(jìn)行軟件開發(fā)中要求各個函數(shù)名不能重復(fù),因此對應(yīng)這個函數(shù)的命令字可以是它的函數(shù)名,這樣保證了命令的唯一性。根據(jù)每個命令的不同,可以帶有參數(shù)或不帶參數(shù)。有些命令的參數(shù)可以有多個,甚至于可以是一長串的參數(shù)數(shù)據(jù)。
根據(jù)命令所帶參數(shù)的不同,本發(fā)明將命令劃分為如下三種類型第一類型命令參數(shù)為字符串;第二類型命令參數(shù)為非字符串,且參數(shù)數(shù)據(jù)小于設(shè)定的閾值;第三類型命令參數(shù)為非字符串,且參數(shù)數(shù)據(jù)大于等于設(shè)定的閾值。
本發(fā)明預(yù)先在在命令發(fā)送端和命令接收端分別存儲全部命令及其所屬命令類型對照表。當(dāng)發(fā)送端向接收端發(fā)送命令時,命令發(fā)送端首先將當(dāng)前命令的命令字轉(zhuǎn)換成字符串,其發(fā)送流程如圖1所示,包括下列步驟步驟S11根據(jù)存儲的命令類型對照表查找當(dāng)前待發(fā)送命令所屬的命令類型;步驟S12判斷當(dāng)前命令是否為第一類型命令,即當(dāng)前命令的參數(shù)是否為字符串,若是,執(zhí)行步驟S13,否則,執(zhí)行步驟S14;步驟S13將轉(zhuǎn)換后的命令字字符串、參數(shù)字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,并在命令字字符串和參數(shù)字符串之間插入分隔符;若參數(shù)字符串有多個,則參數(shù)字符串之間也用分隔符加以隔開,以區(qū)分不同的參數(shù);分隔符可以是在發(fā)送端和接收端之間約定的任意字符,如空格等;發(fā)送的命令字符串結(jié)構(gòu)如圖2所示;例如要想調(diào)用void SendString(char*str);調(diào)用語句為SendString(“abcdef”);則發(fā)送的整個命令數(shù)據(jù)為“SendStringabcdef\n”,其中,“\n”表示回車符,用作命令結(jié)束標(biāo)識符;步驟S14判斷當(dāng)前命令是否為第二類型命令,即當(dāng)前命令的參數(shù)為非字符串,且參數(shù)數(shù)據(jù)小于設(shè)定的閾值,若是,則執(zhí)行步驟S15;否則執(zhí)行步驟S16;步驟S15將命令參數(shù)轉(zhuǎn)換為字符串,然后將命令字字符串、轉(zhuǎn)換后的參數(shù)字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端;同樣,在命令字字符串和參數(shù)字符串之間插入分隔符;若轉(zhuǎn)換后的參數(shù)字符串有多個,在參數(shù)字符串之間也用分隔符加以隔開,以區(qū)分不同的參數(shù);例如寫寄存器命令SetReg(0x100,0x200);其中0x100,0x200都是系統(tǒng)調(diào)用的參數(shù),則將這兩個參數(shù)按16進(jìn)制數(shù)轉(zhuǎn)換為字符串為“100”,“200”;則發(fā)送的整個命令數(shù)據(jù)為“SetReg 100200\n”;步驟S16若當(dāng)前命令不屬于第一和第二類型命令,則一定是參數(shù)數(shù)據(jù)大于等于設(shè)定閾值的第三類命令,對于這類命令,由于參數(shù)數(shù)據(jù)較多,如果都轉(zhuǎn)換成字符串傳送給接收端,則整個命令的傳送時間較長,為了有效節(jié)省數(shù)據(jù)傳送時間,提高傳送效率,當(dāng)命令的參數(shù)數(shù)據(jù)較多時(大于設(shè)定的某個閾值),則不再將參數(shù)數(shù)據(jù)進(jìn)行字符串轉(zhuǎn)換,而采取直接將參數(shù)數(shù)據(jù)發(fā)送給接收端的傳送方式;為了使接收端能準(zhǔn)確無誤地接收命令參數(shù),在發(fā)送端計算出當(dāng)前命令的參數(shù)數(shù)據(jù)長度,并將計算出的長度值轉(zhuǎn)換為字符串,然后將命令字字符串、轉(zhuǎn)換后的長度值字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,并在發(fā)送完成后,連續(xù)發(fā)送完全部參數(shù)數(shù)據(jù);例如發(fā)送端希望傳送數(shù)組buf[100]給接收端,則發(fā)送命令為“WriteBuf 100\n”,緊接著送出buf[100]的內(nèi)容,如圖3所示。
本發(fā)明根據(jù)命令所帶的參數(shù)不同,分成了三種方式將命令發(fā)送給接收端。相應(yīng)地,接收端根據(jù)接收的命令所屬命令類型,對應(yīng)地還原命令。具體接收方法如圖4所示,包括下列步驟步驟S31接收端存儲命令類型對照表;步驟S32接收端根據(jù)命令結(jié)束標(biāo)識符接收完一個完整的命令數(shù)據(jù)包,并將接收的命令字字符串首先轉(zhuǎn)換成對應(yīng)命令;步驟S33接收端根據(jù)接收的命令查找存儲的命令類型對照表,確定當(dāng)前命令的命令類型;若為第一類型命令,則執(zhí)行步驟S34;若為第二類型命令,則執(zhí)行步驟S35;若為第三類型命令,則執(zhí)行步驟S36;步驟S34將接收的參數(shù)字符串作為當(dāng)前命令的參數(shù);步驟S35將接收的參數(shù)字符串轉(zhuǎn)換為對應(yīng)參數(shù)數(shù)據(jù),即為當(dāng)前命令的參數(shù);步驟S36將接收的長度值字符串轉(zhuǎn)換為長度數(shù)值,并連續(xù)接收相同長度的數(shù)據(jù)作為當(dāng)前命令的參數(shù)數(shù)據(jù)。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種命令傳送方法,其特征在于,將命令劃分為不同的命令類型,設(shè)定不同類型命令的參數(shù)對應(yīng)的處理方式,當(dāng)進(jìn)行命令傳送時,命令發(fā)送端首先將當(dāng)前命令的命令字轉(zhuǎn)換成字符串,再根據(jù)當(dāng)前命令所屬命令類型對其參數(shù)進(jìn)行相應(yīng)處理后發(fā)送;命令接收端將接收的命令字字符串轉(zhuǎn)換為對應(yīng)命令,并根據(jù)接收命令的類型對接收的參數(shù)數(shù)據(jù)進(jìn)行相對應(yīng)的轉(zhuǎn)換處理。
2.如權(quán)利要求1所述的命令傳送方法,其特征在于,將命令劃分為如下三種類型第一類型命令參數(shù)為字符串;第二類型命令參數(shù)為非字符串,且參數(shù)數(shù)據(jù)小于設(shè)定的閾值;第三類型命令參數(shù)為非字符串,且參數(shù)數(shù)據(jù)大于等于設(shè)定的閾值;在命令發(fā)送端和命令接收端分別存儲所述命令及其所屬命令類型對照表;當(dāng)進(jìn)行命令傳送時,執(zhí)行下列步驟A、判斷當(dāng)前命令是否為第一類型命令,若是,則將命令字字符串、參數(shù)字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,轉(zhuǎn)至步驟D;否則,執(zhí)行步驟B;B、判斷當(dāng)前命令是否為第二類型命令,若是,則將其參數(shù)轉(zhuǎn)換為字符串,將命令字字符串、轉(zhuǎn)換后的參數(shù)字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,轉(zhuǎn)至步驟D;否則,執(zhí)行步驟C;C、計算出當(dāng)前命令的參數(shù)數(shù)據(jù)長度,并將計算出的長度值轉(zhuǎn)換為字符串,將命令字字符串、轉(zhuǎn)換后的長度值字符串和命令結(jié)束標(biāo)識符順序發(fā)送給命令接收端,并在發(fā)送完成后,連續(xù)發(fā)送所述參數(shù)數(shù)據(jù);轉(zhuǎn)至步驟D;D、命令接收端接收到一個完整的命令后,首先將接收的命令字字符串轉(zhuǎn)換為相應(yīng)命令;再根據(jù)存儲的命令類型對照表,判斷出當(dāng)前接收命令所屬的命令類型,若為第一類型命令,則將接收的參數(shù)字符串作為當(dāng)前命令的參數(shù);若為第二類型命令,則將接收的參數(shù)字符串轉(zhuǎn)換為對應(yīng)參數(shù)數(shù)據(jù);若為第三類型命令,則將接收的長度值字符串轉(zhuǎn)換為長度數(shù)值,并連續(xù)接收相同長度的數(shù)據(jù)作為當(dāng)前命令的參數(shù)數(shù)據(jù)。
3.如權(quán)利要求1所述的命令傳送方法,其特征在于,所述字符串是以ASCII碼定義的字符串。
4.如權(quán)利要求2所述的命令傳送方法,其特征在于,若所述命令沒有命令參數(shù),則僅將其命令字轉(zhuǎn)換為字符串發(fā)送。
5.如權(quán)利要求2所述的命令傳送方法,其特征在于,若所述命令帶有命令參數(shù),則在轉(zhuǎn)換后的命令字字符串和參數(shù)字符串之間插入分隔符;接收端分析接收的命令中是否有約定的分隔符,若有,則將接收的第一個分隔符之前的數(shù)據(jù)信息轉(zhuǎn)換為命令字。
6.如權(quán)利要求5所述的命令傳送方法,其特征在于,若所述參數(shù)字符串不止一個,則在參數(shù)字符串之間插入分隔符,用以區(qū)分不同的參數(shù);接收端根據(jù)接收的命令類型將分隔符前后的數(shù)據(jù)進(jìn)行相應(yīng)處理。
7.如權(quán)利要求6所述的命令傳送方法,其特征在于,所述分隔符為空格。
8.如權(quán)利要求2所述的命令傳送方法,其特征在于,所述命令結(jié)束標(biāo)識符為回車符。
全文摘要
本發(fā)明有關(guān)一種命令傳送方法,包括將命令劃分為不同的命令類型,設(shè)定不同類型命令的參數(shù)對應(yīng)的處理方式,當(dāng)進(jìn)行命令傳送時,命令發(fā)送端首先將當(dāng)前命令的命令字轉(zhuǎn)換成字符串,再根據(jù)當(dāng)前命令所屬命令類型對其參數(shù)進(jìn)行相應(yīng)處理后發(fā)送;命令接收端將接收的命令字字符串轉(zhuǎn)換為對應(yīng)命令,并根據(jù)接收命令的類型對接收的參數(shù)數(shù)據(jù)進(jìn)行相對應(yīng)的轉(zhuǎn)換處理。采用本發(fā)明的方法能夠簡單、快捷地實(shí)現(xiàn)近距離設(shè)備之間的命令數(shù)據(jù)傳送。
文檔編號H04L29/06GK1633126SQ200410102540
公開日2005年6月29日 申請日期2004年12月24日 優(yōu)先權(quán)日2004年12月24日
發(fā)明者游明琦, 劉勇 申請人:北京中星微電子有限公司