本發(fā)明涉及一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,屬于數(shù)據(jù)傳輸。
背景技術:
1、數(shù)據(jù)流傳輸是指將數(shù)據(jù)以連續(xù)、定序的方式在不同系統(tǒng)或設備之間進行傳遞和處理的過程。隨著信息技術的不斷發(fā)展,數(shù)據(jù)流傳輸已成為現(xiàn)代通信系統(tǒng)中一種重要的技術手段。數(shù)據(jù)流傳輸?shù)囊环N典型形式就是通過串行通信接口進行傳輸。串行通信作為數(shù)據(jù)流傳輸?shù)囊环N具體實現(xiàn)方式,因其接口簡單、使用方便等優(yōu)點,被廣泛應用于各類數(shù)據(jù)通信場合。在實際應用中,數(shù)據(jù)發(fā)送端通常將數(shù)據(jù)封裝成數(shù)據(jù)包,并以數(shù)據(jù)流的形式通過串行通信接口進行傳輸,接收端則需從接收到的數(shù)據(jù)流中準確無誤地提取出完整的數(shù)據(jù)包。因此,如何從這些數(shù)據(jù)流中實時、有效地提取有效數(shù)據(jù)包是一個關鍵問題,尤其是在分布式非同步數(shù)據(jù)采集和控制系統(tǒng)中,由于存在傳輸速率不同步、數(shù)據(jù)包丟失、信號干擾等問題,數(shù)據(jù)的實時性和準確性至關重要。
2、公布號為cn105022712a的專利公開了一種基于數(shù)據(jù)流傳輸?shù)臄?shù)據(jù)包提取方法,通過判斷解包進度值來執(zhí)行不同的步驟以提取數(shù)據(jù)包。然而,由于需要頻繁的訪問接受隊列和檢查數(shù)據(jù)包的同步字可能導致處理延遲,對于高速數(shù)據(jù)流不夠高效,無法滿足高實時性和高可靠性的要求。公告號為cn107766265b的專利公開了一種支持定長包、變長包、混合包的串口數(shù)據(jù)提取方法,按照已配置的包格式,在緩沖區(qū)中提取一個數(shù)據(jù)包。然而,由于數(shù)據(jù)全部放置在緩沖區(qū)中且每次只讀取一個數(shù)據(jù)包的數(shù)據(jù),會占用大量的系統(tǒng)資源。同時在高數(shù)據(jù)傳輸速率下,可能無法滿足實時性要求。
3、為了解決上述問題,有必要提出一種高效、可靠、可以保證數(shù)據(jù)的實時性和準確性的數(shù)據(jù)流有效數(shù)據(jù)包提取方法,使系統(tǒng)能夠在復雜通信環(huán)境下確保數(shù)據(jù)的實時性和準確性,提高整個系統(tǒng)的性能和穩(wěn)定性。
技術實現(xiàn)思路
1、本發(fā)明提出了一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,通過隊列機制和有效的數(shù)據(jù)包處理流程,能夠可靠、高效、實時地提取和處理數(shù)據(jù)包,同時也能保證數(shù)據(jù)的完整性和系統(tǒng)的穩(wěn)定性。
2、本發(fā)明的技術解決方案:
3、(1)周期性訪問數(shù)據(jù)流源,一次性讀取全部數(shù)據(jù)并依次存放到一個數(shù)據(jù)隊列中;
4、(2)檢查數(shù)據(jù)隊列的長度,若大于等于一個數(shù)據(jù)包長度,執(zhí)行步驟(3);若長度不夠則返回步驟(1);
5、(3)從隊列頭部開始搜索數(shù)據(jù)包頭,丟棄無效字節(jié)直至找到包頭,若此時隊列長度大于等于一個數(shù)據(jù)包長度,執(zhí)行步驟(4);否則返回步驟(1);
6、(4)讀取并校驗數(shù)據(jù)包,若校驗通過,執(zhí)行步驟(5);若校驗失敗,清除一個數(shù)據(jù)包長度的隊列數(shù)據(jù)并進行報警表明系統(tǒng)通信異常,返回步驟(2);
7、(5)提取有效數(shù)據(jù),并清空隊列,同時表明系統(tǒng)通信正常,返回步驟(1);若同時要求數(shù)據(jù)完整性,則只清除一個數(shù)據(jù)包長度的隊列數(shù)據(jù),返回步驟(2)繼續(xù)解析并提取數(shù)據(jù)。
8、步驟(1)中,周期性訪問數(shù)據(jù)流源,一次性讀取全部數(shù)據(jù)并依次存放到一個數(shù)據(jù)隊列中,具體包括:設置一個固定的時間間隔來訪問數(shù)據(jù)流源,每次訪問時,從數(shù)據(jù)流源的緩沖區(qū)中讀取當前所有的數(shù)據(jù)并將讀取到的所有數(shù)據(jù)按順序依次存放到一個數(shù)據(jù)隊列(先進先出隊列)中。用于臨時存儲并按時間順序管理接收到的數(shù)據(jù)字節(jié)。
9、步驟(2)中,檢查數(shù)據(jù)隊列的長度,若大于等于一個數(shù)據(jù)包長度,執(zhí)行步驟(3);若長度不夠則返回步驟(1),具體包括:
10、檢查當前數(shù)據(jù)隊列中的數(shù)據(jù)總長度。如果數(shù)據(jù)隊列中的數(shù)據(jù)長度大于等于一個有效數(shù)據(jù)包的長度,則進入步驟(3),開始搜索有效數(shù)據(jù)包;如果數(shù)據(jù)長度不足,則暫時停止進一步操作,返回步驟(1),等待下一次周期性數(shù)據(jù)讀取。
11、步驟(3)中,從隊列頭部開始搜索數(shù)據(jù)包頭,丟棄無效字節(jié)直至找到包頭,若此時隊列長度大于等于一個數(shù)據(jù)包長度,執(zhí)行步驟(4);否則返回步驟(1),具體包括:
12、從隊列的頭部字節(jié)(即最早收到的字節(jié))開始逐個檢查數(shù)據(jù)。數(shù)據(jù)包頭通常是一個或多個特定的字節(jié)序列,用于標識數(shù)據(jù)包的開始。根據(jù)協(xié)議定義,這些字節(jié)序列可能是固定值或特定格式。如果當前檢查的字節(jié)序列不是數(shù)據(jù)包頭,則從隊列中丟棄當前頭部的一個或多個無效字節(jié),繼續(xù)向后搜索。一旦找到數(shù)據(jù)包頭,檢查隊列中的數(shù)據(jù)長度是否足夠一個完整的數(shù)據(jù)包。如果長度足夠,進入步驟(4),否則返回步驟(1)。
13、步驟(4)中,讀取并校驗數(shù)據(jù)包,若校驗通過,執(zhí)行步驟(5);若校驗失敗,清除一個數(shù)據(jù)包長度的隊列數(shù)據(jù)并進行報警表明系統(tǒng)通信異常,返回步驟(2),具體包括:
14、在找到數(shù)據(jù)包頭后,讀取接下來的數(shù)據(jù),這些數(shù)據(jù)包括包頭后的實際數(shù)據(jù)和校驗數(shù)據(jù)。根據(jù)數(shù)據(jù)包的格式定義,提取必要的字段并進行數(shù)據(jù)包校驗。如果校驗通過,說明數(shù)據(jù)包有效,進入步驟(5);如果校驗失敗,表明數(shù)據(jù)包可能已損壞或數(shù)據(jù)有誤,從隊列中丟棄一個數(shù)據(jù)包長度的數(shù)據(jù),繼續(xù)從步驟(2)開始重新搜索下一個數(shù)據(jù)包頭,同時記錄下校驗失敗的總次數(shù)(每次失敗次數(shù)自加1)。如果總次數(shù)達到設定值,則進行報警表明系統(tǒng)處于異常通信狀態(tài)。
15、步驟(5)中,提取有效數(shù)據(jù),并清空隊列,同時表明系統(tǒng)通信正常,返回步驟(1);若同時要求數(shù)據(jù)完整性,則只清除一個數(shù)據(jù)包長度的隊列數(shù)據(jù),返回步驟(2)繼續(xù)解析并提取數(shù)據(jù),具體包括:
16、從通過校驗的數(shù)據(jù)包中提取有效數(shù)據(jù)部分。在隊列中移除整個已處理的數(shù)據(jù)包,釋放空間,以便接收和處理更多的數(shù)據(jù)。將校驗失敗的總次數(shù)清零,以表明系統(tǒng)處于正常通信狀態(tài)。處理完當前數(shù)據(jù)包后,不再繼續(xù)解析后續(xù)的數(shù)據(jù),清空隊列,并返回步驟(1),重新開始周期性讀取數(shù)據(jù)。若要求保證數(shù)據(jù)的完整性,處理完當前數(shù)據(jù)包后,返回步驟(2),在當前周期內(nèi)繼續(xù)解析隊列中剩余的數(shù)據(jù),提取更多的有效數(shù)據(jù)包。
1.一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,其特征在于包括以下步驟:
2.權利要求1所述的一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,其特征在于所述步驟(1)中,周期性訪問數(shù)據(jù)流源,一次性讀取全部數(shù)據(jù)并依次存放到一個數(shù)據(jù)隊列中,具體包括:
3.權利要求1所述的一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,其特征在于所述步驟(2)中,檢查數(shù)據(jù)隊列的長度,若大于等于一個數(shù)據(jù)包長度,執(zhí)行步驟(3);若長度不夠則返回步驟(1),具體包括:
4.權利要求1所述的一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,其特征在于所述步驟(3)中,從隊列頭部開始搜索數(shù)據(jù)包頭,丟棄無效字節(jié)直至找到包頭,若此時隊列長度大于等于一個數(shù)據(jù)包長度,執(zhí)行步驟(4);否則返回步驟(1),具體包括:
5.權利要求1所述的一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,其特征在于所述步驟(4)中,讀取并校驗數(shù)據(jù)包,若校驗通過,執(zhí)行步驟(5);若校驗失敗,清除一個數(shù)據(jù)包長度的隊列數(shù)據(jù)并進行報警表明系統(tǒng)通信異常,返回步驟(2),具體包括:
6.權利要求1所述的一種基于隊列的數(shù)據(jù)流有效數(shù)據(jù)包實時提取方法,其特征在于所述步驟(5)中,提取有效數(shù)據(jù),并清空隊列,同時表明系統(tǒng)通信正常,返回步驟(1);若同時要求數(shù)據(jù)完整性,則只清除一個數(shù)據(jù)包長度的隊列數(shù)據(jù),返回步驟(2)繼續(xù)解析并提取數(shù)據(jù),具體包括: