一種下位機、上位機及數(shù)據(jù)傳輸方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機領(lǐng)域,特別涉及一種下位機、上位機及數(shù)據(jù)傳輸方法。
【背景技術(shù)】
[0002]目前,下位機和上位機之間傳送數(shù)據(jù)的過程(本申請中簡稱為“數(shù)據(jù)傳輸”)主要有兩種傳輸方式。第一種傳輸方式是以十個字節(jié)為單位的傳輸方法,每次傳輸十個字節(jié)的數(shù)據(jù)。當(dāng)需要傳輸?shù)臄?shù)據(jù)長度超過十個字節(jié)時,按照十個字節(jié)為單位將數(shù)據(jù)分成若干個數(shù)據(jù)塊,對于長度不夠十個字節(jié)的數(shù)據(jù)塊,需要等待下一組數(shù)據(jù)到來時,填充夠十個字節(jié)再進(jìn)行傳輸,因此,該數(shù)據(jù)傳輸方式對數(shù)據(jù)長度是有要求的,即數(shù)據(jù)長度滿足十個字節(jié)的整數(shù)倍時才能及時進(jìn)行傳輸;第二種傳輸方式是在需要傳輸?shù)臄?shù)據(jù)頭處用“01”作為標(biāo)記,表明該數(shù)據(jù)為一個新的需要傳輸?shù)臄?shù)據(jù)的開始,在數(shù)據(jù)尾處用“FF”作為標(biāo)記,表明該數(shù)據(jù)已完整傳輸,但是由于F為十六進(jìn)制數(shù),當(dāng)需要傳輸?shù)臄?shù)據(jù)中有連續(xù)兩位為FF時,系統(tǒng)會認(rèn)為數(shù)據(jù)已經(jīng)傳輸完畢,造成系統(tǒng)誤判,該數(shù)據(jù)傳輸方法中不能使用十六進(jìn)制數(shù)進(jìn)行傳輸。因此,現(xiàn)有技術(shù)中的數(shù)據(jù)傳輸方法具有局限性。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的在于提供一種下位機、上位機及數(shù)據(jù)傳輸方法,能夠靈活的進(jìn)行數(shù)據(jù)傳輸。
[0004]為解決上述技術(shù)問題,本發(fā)明的實施方式提供了一種數(shù)據(jù)傳輸方法,應(yīng)用于下位機,包括:
[0005]對傳輸數(shù)據(jù)的每個字節(jié)中的數(shù)據(jù)位進(jìn)行標(biāo)記及編號,所述每個字節(jié)的8個數(shù)據(jù)位具有相同的標(biāo)記及由O至7的不同編號;
[0006]以7個字節(jié)為單位進(jìn)行處理,所述處理包含以下步驟:
[0007]S1、順序提取所述7個字節(jié)中編號為n的數(shù)據(jù)位,所述η為大于或等于O且小于或等于7的整數(shù),將所述順序提取的數(shù)據(jù)位依次填充到第一字節(jié)的第I數(shù)據(jù)位至第7數(shù)據(jù)位;
[0008]S2、根據(jù)所述7個字節(jié)的每個字節(jié)中剩余的數(shù)據(jù)位得到7個第二字節(jié)的第I數(shù)據(jù)位至第7數(shù)據(jù)位,所述第二字節(jié)與所述第一字節(jié)的一個數(shù)據(jù)位一一對應(yīng);
[0009]S3、在所述第一字節(jié)的第O數(shù)據(jù)位填充第一識別符,所述第一識別符用于標(biāo)識所述第一字節(jié)中的第I數(shù)據(jù)位至為在所述7個字節(jié)中順序提取的編號為η的數(shù)據(jù)位;
[0010]S4、在所述第二字節(jié)的第O數(shù)據(jù)位填充第二識別符,所述第二識別符用于標(biāo)識所述第二字節(jié)中的數(shù)據(jù)位為與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位所屬字節(jié)的剩余數(shù)據(jù)位;
[0011]將數(shù)據(jù)包發(fā)送給上位機,所述數(shù)據(jù)包由第一字節(jié)組和第二字節(jié)組打包形成,所述第一字節(jié)組由多個所述第一字節(jié)組成,所述第二字節(jié)組由多個所述第二字節(jié)組成。
[0012]本發(fā)明的實施方式提供另一種數(shù)據(jù)傳輸方法,應(yīng)用于上位機,包括:
[0013]接收下位機發(fā)送的數(shù)據(jù)包;
[0014]解壓所述數(shù)據(jù)包,得到第一字節(jié)組和第二字節(jié)組,所述第一字節(jié)組由多個第一字節(jié)組成,所述第二字節(jié)組由多個第二字節(jié)組成,以所述第一字節(jié)組中的第I個第一字節(jié)和所述第二字節(jié)組中的前7個第二字節(jié)為單位進(jìn)行數(shù)據(jù)還原,所述數(shù)據(jù)還原包括以下步驟:
[0015]S1、提取所述第一字節(jié)組中的第I個第一字節(jié)的第I數(shù)據(jù)位至第7數(shù)據(jù)位,將所述第I數(shù)據(jù)位至第7數(shù)據(jù)位放置在第一識別符標(biāo)識的7個字節(jié)的數(shù)據(jù)位上,所述第一識別符位于所述第I個第一字節(jié)的第O數(shù)據(jù)位,所述第一識別符用于標(biāo)識所述第一字節(jié)中的第I數(shù)據(jù)位至第7數(shù)據(jù)位為在所述7個字節(jié)中順序提取的編號為η的數(shù)據(jù)位;
[0016]S2、對所述第二字節(jié)組中的前7個第二字節(jié)分別提取與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位,并將分別提取的與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位分別放置在第二識別符標(biāo)識的所述7個字節(jié)的剩余數(shù)據(jù)位上,得到完整的所述7個字節(jié),所述第二識別符位于所述第二字節(jié)的第O數(shù)據(jù)位,所述第二識別符用于標(biāo)識所述第二字節(jié)中的數(shù)據(jù)位為與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位所屬字節(jié)的剩余數(shù)據(jù)位;
[0017]S3、刪除所述第一字節(jié)組中的第I個第一字節(jié)及所述第二字節(jié)組中的前7個第二字節(jié),得到新的第一字節(jié)組和新的第二字節(jié)組,返回步驟SI,直至所述第一字節(jié)組和所述第二字節(jié)組為空。
[0018]本發(fā)明的實施方式提供了一種下位機,包括:
[0019]標(biāo)記單元,用于對傳輸數(shù)據(jù)的每個字節(jié)中的數(shù)據(jù)位進(jìn)行標(biāo)記及編號,所述每個字節(jié)的8個數(shù)據(jù)位具有相同的標(biāo)記及由O至7的不同編號;
[0020]處理單元,用于以7個字節(jié)為單位對所述標(biāo)記單元標(biāo)記的傳輸數(shù)據(jù)進(jìn)行處理,所述處理單元包括以下子單元:
[0021]提取子單元,用于順序提取所述7個字節(jié)中編號為η的數(shù)據(jù)位,所述η為大于或等于O且小于或等于7的整數(shù),將所述順序提取的數(shù)據(jù)位依次填充到第一字節(jié)的第I數(shù)據(jù)位至第7數(shù)據(jù)位;
[0022]獲取子單元,用于根據(jù)所述7個字節(jié)的每個字節(jié)中剩余的數(shù)據(jù)位得到7個第二字節(jié)的第I數(shù)據(jù)位至第7數(shù)據(jù)位,所述第二字節(jié)與所述第一字節(jié)的一個數(shù)據(jù)位一一對應(yīng);
[0023]第一填充子單元,用于在所述第一字節(jié)的第O數(shù)據(jù)位填充第一識別符,所述第一識別符用于標(biāo)識所述第一字節(jié)中的第I數(shù)據(jù)位至第7數(shù)據(jù)位為在所述7個字節(jié)中順序提取的編號為η的數(shù)據(jù)位;
[0024]第二填充子單元,用于在所述第二字節(jié)的第O數(shù)據(jù)位填充第二識別符,所述第二識別符用于標(biāo)識所述第二字節(jié)中的數(shù)據(jù)位為與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位所屬字節(jié)的剩余數(shù)據(jù)位;
[0025]發(fā)送單元,用于將數(shù)據(jù)包發(fā)送給上位機,所述數(shù)據(jù)包由所述第一字節(jié)組和所述第二字節(jié)組打包形成,所述第一字節(jié)組由多個所述第一字節(jié)組成,所述第二字節(jié)組由多個所述第二字節(jié)組成。
[0026]本發(fā)明的實施方式提供一種上位機,包括:
[0027]接收單元,用于接收下位機發(fā)送的數(shù)據(jù)包;
[0028]解壓單元,用于解壓所述接收單元接收的數(shù)據(jù)包,得到第一字節(jié)組和第二字節(jié)組,所述第一字節(jié)組由多個第一字節(jié)組成,所述第二字節(jié)組由多個第二字節(jié)組成,以所述第一字節(jié)組中的第I個第一字節(jié)和所述第二字節(jié)組中的前7個第二字節(jié)為單位進(jìn)行數(shù)據(jù)還原,所述解壓單元包括以下子單元:
[0029]第一處理子單元,用于提取所述第一字節(jié)組中的第I個第一字節(jié)的第I數(shù)據(jù)位至第7數(shù)據(jù)位,將所述第I數(shù)據(jù)位至第7數(shù)據(jù)位放置在第一識別符標(biāo)識的7個字節(jié)的數(shù)據(jù)位上,所述第一識別符位于所述第I個第一字節(jié)的第O數(shù)據(jù)位,所述第一識別符用于標(biāo)識所述第一字節(jié)中的第I數(shù)據(jù)位至第7數(shù)據(jù)位為在所述7個字節(jié)中順序提取的編號為η的數(shù)據(jù)位;
[0030]第二處理子單元,用于對所述第二字節(jié)組中的前7個第二字節(jié)分別提取與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位,并將分別提取的與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位分別放置在第二識別符標(biāo)識的所述7個字節(jié)的剩余數(shù)據(jù)位上,得到完整的所述7個字節(jié),所述第二識別符位于所述第二字節(jié)的第O數(shù)據(jù)位,所述第二識別符用于標(biāo)識所述第二字節(jié)中的數(shù)據(jù)位為與所述第一字節(jié)中標(biāo)記相同的數(shù)據(jù)位所屬字節(jié)的剩余數(shù)據(jù)位;
[0031]刪除子單元,用于刪除所述第一字節(jié)組中的第I個第一字節(jié)及所述第二字節(jié)組中的前7個第二字節(jié),得到新的第一字節(jié)組和新的第二字節(jié)組,返回第一處理子單元,直至所述第一字節(jié)組和所述第二字節(jié)組為空。
[0032]本發(fā)明實施方式相對于現(xiàn)有技術(shù)而言,首先對傳輸數(shù)據(jù)的每個字節(jié)中的數(shù)據(jù)位進(jìn)行標(biāo)記及編號,然后以7個字節(jié)為單位提取每個字節(jié)中相同位置的數(shù)據(jù)與新的第一識別符組成第一字節(jié),將每個字節(jié)中剩余的7個字節(jié)與第二識別符組成第二字節(jié),然后將第一字節(jié)和第二字節(jié)打包進(jìn)行傳輸。該數(shù)據(jù)傳輸方法對數(shù)據(jù)長度無要求,此外只在數(shù)據(jù)頭處利用第一識別符和第二識別符標(biāo)識每個字節(jié)中數(shù)據(jù)的特點,可以克服數(shù)據(jù)傳輸方法中不能使用十六進(jìn)制數(shù)進(jìn)行傳輸?shù)膯栴},因此,該數(shù)據(jù)傳輸方法能夠靈活的進(jìn)行數(shù)據(jù)傳輸。
[0033]另外,在所述順序提取所述7個字節(jié)中編號為η的數(shù)據(jù)位中,所述η為O或7。
[0034]當(dāng)η為O時,提取每個字節(jié)中第O數(shù)據(jù)位的數(shù)據(jù),使得所述第一字節(jié)中的每個數(shù)據(jù)位的數(shù)據(jù)為每個字節(jié)起始數(shù)據(jù)位;當(dāng)η為7時,提取每個字節(jié)中第7數(shù)據(jù)位的數(shù)據(jù),使得所述第一字節(jié)中的每個數(shù)據(jù)位的數(shù)據(jù)為每個字節(jié)末尾