數(shù)據(jù)進(jìn)行循環(huán)冗余檢查,并將得到的結(jié)果作為幀校驗(yàn)數(shù)據(jù),完成數(shù)據(jù)幀的完整拼接;
[0036]二、上位機(jī)完成所有數(shù)據(jù)幀的拼接后,對(duì)數(shù)據(jù)幀進(jìn)行發(fā)送。上位機(jī)中構(gòu)建了一個(gè)發(fā)送緩存,上位機(jī)在發(fā)送數(shù)據(jù)幀的同時(shí),將發(fā)送的數(shù)據(jù)幀副本保存在發(fā)送緩存中。下位機(jī)接收到數(shù)據(jù)幀后向上位機(jī)返回應(yīng)答幀(應(yīng)答幀中主要返回?cái)?shù)據(jù)幀中的幀標(biāo)簽),上位機(jī)接收到應(yīng)答幀后,刪除緩存中對(duì)應(yīng)的數(shù)據(jù)幀副本。只要緩存未被存滿(mǎn),上位機(jī)發(fā)送完一幀數(shù)據(jù)后,不用等待下位機(jī)的應(yīng)答幀,繼續(xù)發(fā)送下一幀數(shù)據(jù);如果緩存被存滿(mǎn),則暫停發(fā)送新的數(shù)據(jù)幀,將緩存中的數(shù)據(jù)再次重新發(fā)送出去后,再發(fā)送新的數(shù)據(jù)幀。由于減少了等待應(yīng)答幀的時(shí)間,提高了整個(gè)信道的利用率及通信速度。
[0037]三、當(dāng)發(fā)送完所有數(shù)據(jù)幀后,檢查發(fā)送緩存是否為空,如果為空,則結(jié)束發(fā)送,如果不為空,則將發(fā)送緩存中的數(shù)據(jù)幀發(fā)送出去,直至其為空后,結(jié)束發(fā)送。圖3為上位機(jī)發(fā)送數(shù)據(jù)幀示意圖。
[0038]對(duì)于下位機(jī):
[0039]—、下位機(jī)接收到數(shù)據(jù)幀后,首先按照協(xié)議對(duì)幀頭進(jìn)行校驗(yàn),如果幀頭校驗(yàn)未通過(guò),則丟棄接收到數(shù)據(jù);如果通過(guò),則對(duì)接收的數(shù)據(jù)進(jìn)行循環(huán)冗余檢查,其結(jié)果與接收到的幀校驗(yàn)數(shù)據(jù)進(jìn)行比較。即:進(jìn)行CRC-32校驗(yàn);
[0040]二、如果CRC-32校驗(yàn)通過(guò),下位機(jī)向上位機(jī)反饋應(yīng)答幀,表示數(shù)據(jù)幀已經(jīng)收到,上位機(jī)接收到應(yīng)答幀后,刪除緩存中的對(duì)應(yīng)的數(shù)據(jù)幀副本;如果CRC-32校驗(yàn)未通過(guò),則丟棄接收到的數(shù)據(jù),不向上位機(jī)反饋應(yīng)答幀;
[0041]三、為防止接收到相同的數(shù)據(jù)幀,下位機(jī)在CRC-32校驗(yàn)后,通過(guò)檢查是否已經(jīng)接收到相同的幀標(biāo)簽進(jìn)行重復(fù)幀校驗(yàn),如果重復(fù)幀校驗(yàn)通過(guò),將該數(shù)據(jù)幀的幀標(biāo)簽保存在下位機(jī)中;如果下位機(jī)中已經(jīng)存在相同的幀標(biāo)簽,則表明已經(jīng)接收到該數(shù)據(jù)幀,則將其丟棄,開(kāi)始接收新的數(shù)據(jù)幀。
[0042]四、以上三個(gè)檢驗(yàn)都通過(guò)后,下位機(jī)按照幀類(lèi)型解析數(shù)據(jù)幀,如果幀類(lèi)型為時(shí)序或參數(shù),則將其添加到對(duì)應(yīng)的鏈表中;如果為指令,則執(zhí)行相應(yīng)的任務(wù)。
[0043]圖4為下位機(jī)接收數(shù)據(jù)幀示意圖。
[0044]通過(guò)以上過(guò)程,可達(dá)到預(yù)期發(fā)明目的。
[0045]具體實(shí)施例:
[0046]使用者需要通過(guò)上位機(jī)向下位機(jī)下載5組參數(shù),及8條時(shí)序。下載完畢后,命令下位機(jī)解除觸發(fā)。
[0047]使用者將時(shí)序及參數(shù)編寫(xiě)好后,上位機(jī)對(duì)下載的第一組參數(shù)依次添加第一個(gè)OxEB,第二個(gè)幀頭0x90,幀標(biāo)簽(0x01+當(dāng)前時(shí)間),選擇幀類(lèi)型為OxlA,按照實(shí)際編寫(xiě)的參數(shù)長(zhǎng)度計(jì)算出幀長(zhǎng)度,并對(duì)數(shù)據(jù)幀進(jìn)行循環(huán)冗余檢查,結(jié)果作為幀校驗(yàn)中的數(shù)據(jù),最后添加幀尾OxFF,形成一個(gè)完整的數(shù)據(jù)幀。(本實(shí)例中約定:第一個(gè)幀頭為OxEB,第二個(gè)幀頭為0x90,幀尾為OxFF,參數(shù)、時(shí)序、指令對(duì)應(yīng)的幀類(lèi)型分別為0X1A、0X2B、0X3C。)然后按照約定使用同樣的方法對(duì)其他參數(shù)幀、時(shí)序數(shù)據(jù)幀及指令數(shù)據(jù)幀添加幀頭、幀類(lèi)型、幀長(zhǎng)度、幀校驗(yàn)、幀尾,形成完整數(shù)據(jù)幀。
[0048]上位機(jī)中構(gòu)建的發(fā)送緩存能保存4個(gè)數(shù)據(jù)幀副本。上位機(jī)在發(fā)送前3個(gè)參數(shù)數(shù)據(jù)幀的同時(shí),將其將其副本保存在發(fā)送緩存中。發(fā)送完前3個(gè)參數(shù)數(shù)據(jù)幀后,發(fā)送緩存肯定能夠繼續(xù)存儲(chǔ)數(shù)據(jù)幀副本,即緩存未滿(mǎn),上位機(jī)則繼續(xù)發(fā)送第4個(gè)參數(shù)幀,并保存第4個(gè)參數(shù)幀副本。
[0049]如果在發(fā)送第5個(gè)參數(shù)幀前,接收到應(yīng)答幀后,按照應(yīng)答幀中返回的幀標(biāo)簽刪除對(duì)應(yīng)的數(shù)據(jù)幀,上位機(jī)可繼續(xù)發(fā)送第5個(gè)參數(shù)幀;如果未接收到應(yīng)答幀,緩存不能繼續(xù)存儲(chǔ),則將緩存中的數(shù)據(jù)幀再次全部發(fā)送,直到接收到應(yīng)答幀后,再發(fā)送第5個(gè)參數(shù)幀。
[0050]當(dāng)發(fā)送完所有參數(shù)幀后,檢查發(fā)送緩存是否為空,如果為空,則結(jié)束發(fā)送,如果不為空,則將發(fā)送緩存中的數(shù)據(jù)幀發(fā)送出去,直至其為空后,再發(fā)送時(shí)序幀。
[0051]按照以上過(guò)程完成8條時(shí)序及指令的發(fā)送。
[0052]下位機(jī)接收到第I個(gè)幀數(shù)據(jù)后,校驗(yàn)其第二個(gè)幀頭是否為0x90,如果不是,則丟棄接收到數(shù)據(jù);如果是,則對(duì)接收的數(shù)據(jù)進(jìn)行循環(huán)冗余檢查,其結(jié)果與接收到的幀校驗(yàn)數(shù)據(jù)進(jìn)行比較。
[0053]如果CRC-32校驗(yàn)通過(guò),下位機(jī)向上位機(jī)反饋應(yīng)答幀,表示該第I個(gè)參數(shù)幀已經(jīng)收到,上位機(jī)接收到第I個(gè)參數(shù)幀的應(yīng)答幀后,刪除緩存中第I個(gè)參數(shù)幀的副本;如果CRC-3 2校驗(yàn)未通過(guò),則丟棄接收到的數(shù)據(jù)。
[0054]下位機(jī)在CRC-32校驗(yàn)后,下位機(jī)中沒(méi)有保存有任何幀標(biāo)簽,重復(fù)幀校驗(yàn)必然通過(guò),將第I個(gè)幀標(biāo)簽保存。解析數(shù)據(jù)幀可得其幀類(lèi)型為OxlA,為參數(shù)幀,將其添加進(jìn)該參數(shù)對(duì)應(yīng)的鏈表中保存。第I個(gè)數(shù)據(jù)幀接收完畢。開(kāi)始接收下一個(gè)數(shù)據(jù)幀。
[0055]接收其他數(shù)據(jù)幀的過(guò)程與此類(lèi)似,只是在進(jìn)行重復(fù)幀校驗(yàn)時(shí),下位機(jī)中已經(jīng)保存有幀標(biāo)簽,如果出現(xiàn)重復(fù)幀,下位機(jī)則丟棄該數(shù)據(jù)幀。
[0056]下位機(jī)收到剩余4個(gè)參數(shù)幀及8個(gè)時(shí)序幀后,下位機(jī)將其保存在對(duì)應(yīng)的鏈表中;接收到指令幀后,下位機(jī)執(zhí)行對(duì)應(yīng)的指令。
【主權(quán)項(xiàng)】
1.一種基于RS-422串行總線(xiàn)技術(shù)的數(shù)據(jù)可靠交互方法,其特征在于:上位機(jī)與下位機(jī)通信的數(shù)據(jù)幀格式依次排列為:幀頭、幀標(biāo)簽、幀類(lèi)型、幀長(zhǎng)度、幀信息、幀校驗(yàn)和幀尾;所述幀頭為雙幀頭,第一個(gè)幀頭用來(lái)表明該數(shù)據(jù)為一個(gè)新的需要傳輸?shù)臄?shù)據(jù)的開(kāi)始,第二個(gè)幀頭來(lái)校驗(yàn),以防數(shù)據(jù)中偶然出現(xiàn)與第一個(gè)幀頭相同的數(shù)據(jù)而被下位機(jī)誤認(rèn)為新的數(shù)據(jù)幀;所述幀標(biāo)簽:前段字節(jié)表示幀計(jì)數(shù),后段字節(jié)表示時(shí)間標(biāo)簽構(gòu)成以表明幀的唯一性;所述幀類(lèi)型包括:參數(shù)、時(shí)序和指令,用于區(qū)分?jǐn)?shù)據(jù)幀的類(lèi)別;所述幀標(biāo)簽:前段字節(jié)表示幀計(jì)數(shù),后段字節(jié)表示時(shí)間標(biāo)簽構(gòu)成以表明幀的唯一性;所述幀長(zhǎng)度:數(shù)據(jù)區(qū)的字節(jié)數(shù)加上固定字節(jié)數(shù);所述幀信息:上位機(jī)與下位機(jī)具體的通信內(nèi)容;所述幀校驗(yàn):對(duì)發(fā)送的數(shù)據(jù)進(jìn)行校驗(yàn),檢驗(yàn)數(shù)據(jù)傳輸是否出現(xiàn)錯(cuò)誤;所述幀尾:表明該數(shù)據(jù)已完整傳輸;上位機(jī)與下位機(jī)的數(shù)據(jù)交互步驟如下: 步驟1:上位機(jī)編寫(xiě)幀信息并選擇幀類(lèi)型,按照數(shù)據(jù)幀格式添加幀頭和幀尾,計(jì)算幀信息長(zhǎng)度在幀長(zhǎng)度格式位添加幀長(zhǎng)度,將當(dāng)前系統(tǒng)時(shí)間添加于幀標(biāo)簽位上,循環(huán)冗余檢查幀標(biāo)簽、幀類(lèi)型及幀信息的數(shù)據(jù),并將得到的結(jié)果作為幀校驗(yàn)數(shù)據(jù),完成數(shù)據(jù)幀的完整拼接;步驟2:上位機(jī)完成所有數(shù)據(jù)幀的拼接后對(duì)數(shù)據(jù)幀進(jìn)行發(fā)送,同時(shí)上位機(jī)構(gòu)建發(fā)送緩存,將發(fā)送的數(shù)據(jù)幀副本保存在發(fā)送緩存中; 步驟3:下位機(jī)接收到數(shù)據(jù)幀后,首先按照協(xié)議對(duì)幀頭進(jìn)行校驗(yàn),如果幀頭校驗(yàn)未通過(guò),則丟棄接收到數(shù)據(jù);如果通過(guò),則對(duì)接收的數(shù)據(jù)進(jìn)行循環(huán)冗余檢查,其結(jié)果與接收到的幀校驗(yàn)數(shù)據(jù)進(jìn)行CRC-32校驗(yàn); 步驟4:當(dāng)CRC-32校驗(yàn)通過(guò)后,下位機(jī)向上位機(jī)反饋應(yīng)答幀,表示數(shù)據(jù)幀已經(jīng)收到,上位機(jī)接收到應(yīng)答幀后,刪除緩存中的對(duì)應(yīng)的數(shù)據(jù)幀副本;如果CRC-32校驗(yàn)未通過(guò),則丟棄接收到的數(shù)據(jù),不向上位機(jī)反饋應(yīng)答幀;所述應(yīng)答幀中主要返回?cái)?shù)據(jù)幀中的幀標(biāo)簽; 步驟5:下位機(jī)在CRC-32校驗(yàn)后,通過(guò)檢查是否已經(jīng)接收到相同的幀標(biāo)簽進(jìn)行重復(fù)幀校驗(yàn),如果重復(fù)幀校驗(yàn)通過(guò),將該數(shù)據(jù)幀的幀標(biāo)簽保存在下位機(jī)中;如果下位機(jī)中已經(jīng)存在相同的幀標(biāo)簽,則表明已經(jīng)接收到該數(shù)據(jù)幀,則將其丟棄,開(kāi)始接收新的數(shù)據(jù)幀; 步驟6:以上三個(gè)檢驗(yàn)都通過(guò)后,下位機(jī)按照幀類(lèi)型解析數(shù)據(jù)幀,如果幀類(lèi)型為時(shí)序或參數(shù),則將其添加到對(duì)應(yīng)的鏈表中;如果為指令,則執(zhí)行相應(yīng)的任務(wù); 步驟7:重復(fù)步驟I?步驟6 ;當(dāng)發(fā)送完所有數(shù)據(jù)幀后,檢查發(fā)送緩存是否為空,如果為空,則結(jié)束發(fā)送,如果不為空,則將發(fā)送緩存中的數(shù)據(jù)幀發(fā)送出去,直至其為空后,結(jié)束發(fā)送。2.根據(jù)權(quán)利要求1所述基于RS-422串行總線(xiàn)技術(shù)的數(shù)據(jù)可靠交互方法,其特征在于:當(dāng)緩存未被存滿(mǎn)時(shí),上位機(jī)發(fā)送完一幀數(shù)據(jù)后,不用等待下位機(jī)的應(yīng)答幀,繼續(xù)發(fā)送下一幀數(shù)據(jù);如果緩存被存滿(mǎn),則暫停發(fā)送新的數(shù)據(jù)幀,將緩存中的數(shù)據(jù)再次重新發(fā)送出去后,再發(fā)送新的數(shù)據(jù)幀。
【專(zhuān)利摘要】本發(fā)明涉及一種基于RS-422串行總線(xiàn)技術(shù)的數(shù)據(jù)可靠交互方法,結(jié)合連續(xù)自動(dòng)重傳請(qǐng)求(Auto?Repeat?reQuest,ARQ)協(xié)議,提出了一種新穎的基于RS-422串行總線(xiàn)技術(shù)的數(shù)據(jù)交互及校驗(yàn)方法。上位機(jī)與下位機(jī)之間存在應(yīng)答機(jī)制及重復(fù)幀校驗(yàn),而且,上位機(jī)不必接收到下位機(jī)發(fā)送的應(yīng)答幀后,可以連續(xù)發(fā)送若干個(gè)數(shù)據(jù)幀,在發(fā)送數(shù)據(jù)幀的同時(shí)將其副本保存在發(fā)送緩存中,上位機(jī)接收到應(yīng)答幀后刪除緩存中對(duì)應(yīng)的數(shù)據(jù)幀副本。直到未收到應(yīng)答幀的數(shù)據(jù)幀積累到一定數(shù)量后,再停下來(lái)重發(fā)緩存中的數(shù)據(jù)幀副本。可明顯提高了信道的利用率和通信速度。本發(fā)明針對(duì)嵌入式系統(tǒng)的特征,上位機(jī)與下位機(jī)通信的數(shù)據(jù)幀中增加信息類(lèi)型的識(shí)別碼,可同時(shí)實(shí)現(xiàn)嵌入式系統(tǒng)多時(shí)序,參數(shù),任務(wù)指令的通信。
【IPC分類(lèi)】G06F13/42
【公開(kāi)號(hào)】CN105573958
【申請(qǐng)?zhí)枴緾N201610016165
【發(fā)明人】馬瑞卿, 李銳, 張震, 韓偉健, 肖晨曦
【申請(qǐng)人】西北工業(yè)大學(xué)
【公開(kāi)日】2016年5月11日
【申請(qǐng)日】2016年1月12日