本發(fā)明涉及工業(yè)通信和嵌入式系統(tǒng)領(lǐng)域,尤其涉及一種基于循環(huán)隊列和狀態(tài)機的報文解析方法及系統(tǒng)。
背景技術(shù):
1、在現(xiàn)代工業(yè)通信和嵌入式系統(tǒng)中,報文解析是通信協(xié)議中非常關(guān)鍵的一環(huán)。常見的通信協(xié)議,例如iec101、iec104、modbus、dlt/645、mqtt以及自定義通訊協(xié)議等,都是基于幀結(jié)構(gòu)進行數(shù)據(jù)傳輸?shù)摹Y(jié)構(gòu)通常包含幀頭、長度、幀類型、數(shù)據(jù)和校驗等字段,因此準(zhǔn)確解析每一幀數(shù)據(jù)對于確保通信的穩(wěn)定性和可靠性至關(guān)重要。
2、然而,在傳統(tǒng)的報文解析方法中,設(shè)備通常通過串口、以太網(wǎng)等通信方式接收數(shù)據(jù),接收到的數(shù)據(jù)會被暫存到緩存或循環(huán)隊列中。當(dāng)解析開始時,通常會一次性將緩存或隊列中的所有數(shù)據(jù)全部取出,然后對這些數(shù)據(jù)進行解析。這種方法的解析步驟通常如下:
3、1.接收數(shù)據(jù):設(shè)備通過串口或以太網(wǎng)將所有接收到的數(shù)據(jù)保存到一個臨時緩存或循環(huán)隊列中。
4、2.一次性讀?。航馕鰰r,一次性從緩存或隊列中讀取所有的數(shù)據(jù),作為一個整體數(shù)據(jù)塊進行處理。
5、3.解析流程:從這個數(shù)據(jù)塊中逐步解析出幀頭、長度、幀類型和數(shù)據(jù)內(nèi)容等字段。
6、這種傳統(tǒng)的解析方法雖然看似簡單,但在處理實際通信時會暴露出許多不足,尤其是在實時通信或處理不定長數(shù)據(jù)幀時,問題尤為突出。具體問題包括:
7、1.數(shù)據(jù)不完整或多幀情況:在實時通信過程中,接收到的數(shù)據(jù)可能是部分幀或多幀的組合,數(shù)據(jù)并不是按幀整齊到達。傳統(tǒng)解析方法是一次性取出所有數(shù)據(jù)進行解析,可能取到的只是一個不完整的幀,這會導(dǎo)致解析出錯或出現(xiàn)漏幀的情況。同樣,如果一次取出的數(shù)據(jù)包含了多幀數(shù)據(jù),傳統(tǒng)解析方法可能難以正確區(qū)分和解析出多幀,導(dǎo)致多幀重疊或者幀邊界被破壞。
8、2.無幀邊界的解析問題:很多協(xié)議中的幀并不是固定長度的,幀的邊界需要通過幀頭和長度字段來確定。傳統(tǒng)方法在沒有找到明確幀邊界的情況下,可能會直接讀取整個緩存,導(dǎo)致幀結(jié)構(gòu)被破壞。如果幀頭或長度字段在接收到的數(shù)據(jù)中沒有正確解析出來,整個幀的解析就會失敗。
9、3.丟幀或漏幀問題:在數(shù)據(jù)高頻傳輸?shù)那闆r下,由于緩存可能會出現(xiàn)數(shù)據(jù)溢出或覆蓋,傳統(tǒng)方法有時未能及時解析出數(shù)據(jù)幀,導(dǎo)致漏幀情況。尤其在數(shù)據(jù)量大、傳輸速度快的場景中,解析速度與數(shù)據(jù)接收速率之間的不匹配極易導(dǎo)致數(shù)據(jù)丟失。
10、綜上所述,傳統(tǒng)的報文解析方法存在著處理不定長數(shù)據(jù)幀的局限性,無法準(zhǔn)確區(qū)分幀邊界,容易發(fā)生漏幀或丟幀的情況,且處理效率較低,無法滿足高頻實時通信的需求。這些問題能夠直接影響通信協(xié)議的可靠性和穩(wěn)定性。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的在于提供一種基于循環(huán)隊列和狀態(tài)機的報文解析方法及系統(tǒng),解決傳統(tǒng)解析方法中因一次性讀取所有數(shù)據(jù)而引發(fā)的漏幀、多幀、無法確定幀邊界等問題。
2、為實現(xiàn)上述目的,一方面,本發(fā)明提供一種基于循環(huán)隊列和狀態(tài)機的報文解析方法,其特征在于,所述方法包括以下步驟:
3、創(chuàng)建并初始化循環(huán)隊列以存儲接收到的報文數(shù)據(jù),并根據(jù)協(xié)議類型初始化狀態(tài)機;
4、判斷循環(huán)隊列中是否有數(shù)據(jù),用所述狀態(tài)機對循環(huán)隊列中的數(shù)據(jù)進行逐字節(jié)解析;
5、根據(jù)解析出的幀頭信息確定報文類型;
6、根據(jù)報文類型動態(tài)調(diào)整解析流程,直至解析出完整的報文。
7、優(yōu)選的,在所述基于循環(huán)隊列和狀態(tài)機的報文解析方法中,所述狀態(tài)機包括多個解析狀態(tài),每個所述解析狀態(tài)對應(yīng)報文的一個特定字段,并且狀態(tài)機根據(jù)當(dāng)前解析字段自動切換到下一個解析狀態(tài)。
8、優(yōu)選的,在所述基于循環(huán)隊列和狀態(tài)機的報文解析方法中,所述方法還包括在解析過程中,當(dāng)接收到的數(shù)據(jù)不足以組成一個完整的幀時,系統(tǒng)暫時中斷解析,并將已解析到的數(shù)據(jù)保存到內(nèi)存中;當(dāng)新的數(shù)據(jù)到達后,系統(tǒng)繼續(xù)從上一次中斷的位置進行解析。
9、優(yōu)選的,在所述基于循環(huán)隊列和狀態(tài)機的報文解析方法中,所述方法還包括在解析過程中,如果檢測到幀錯誤或幀邊界不明確,系統(tǒng)將丟棄當(dāng)前數(shù)據(jù)并重新開始解析。
10、優(yōu)選的,在所述基于循環(huán)隊列和狀態(tài)機的報文解析方法中,所述協(xié)議類型包括iec101、iec104、modbus、dlt/645、mqtt以及自定義通訊協(xié)議。
11、優(yōu)選的,在所述基于循環(huán)隊列和狀態(tài)機的報文解析方法中,所述方法還包括:
12、根據(jù)協(xié)議的幀結(jié)構(gòu),按步驟解析的字段包括幀頭、長度、幀類型和數(shù)據(jù)內(nèi)容,且在任何時刻只處理當(dāng)前可用的數(shù)據(jù)段。
13、此外,在本發(fā)明的另一方面,還提出了一種基于循環(huán)隊列和狀態(tài)機的報文解析系統(tǒng),其特征在于,所述系統(tǒng)包括:
14、循環(huán)隊列模塊,用于存儲接收到的報文數(shù)據(jù);
15、狀態(tài)機模塊,用于對循環(huán)隊列中的數(shù)據(jù)進行逐字節(jié)解析;
16、幀頭解析單元,用于根據(jù)解析出的幀頭信息確定報文類型;
17、流程控制單元,用于根據(jù)報文類型動態(tài)調(diào)整解析流程。
18、優(yōu)選的,在所述基于循環(huán)隊列和狀態(tài)機的報文解析系統(tǒng)中,所述狀態(tài)機模塊包括多個解析狀態(tài),每個狀態(tài)對應(yīng)于報文的一個特定字段,并且狀態(tài)機根據(jù)當(dāng)前解析字段自動切換到下一個解析狀態(tài)。
19、優(yōu)選的,在所述基于循環(huán)隊列和狀態(tài)機的報文解析系統(tǒng)中,所述系統(tǒng)還包括暫存模塊,用于在解析過程中,當(dāng)接收到的數(shù)據(jù)不足以組成一個完整的幀時,暫存已解析的數(shù)據(jù),并在接收到更多數(shù)據(jù)后繼續(xù)解析。
20、相比于現(xiàn)有技術(shù),本發(fā)明至少具有以下技術(shù)效果:
21、通過引入循環(huán)隊列和狀態(tài)機,能夠?qū)崿F(xiàn)逐字節(jié)精確解析報文,避免傳統(tǒng)解析中多幀混淆和漏幀的問題,確保在不定長數(shù)據(jù)傳輸環(huán)境下的準(zhǔn)確性與穩(wěn)定性。另外,狀態(tài)機對每個協(xié)議字段進行分步驟解析,系統(tǒng)能夠順序正確地處理每個協(xié)議字段,同時根據(jù)幀類型動態(tài)調(diào)整解析流程,能夠提升解析的準(zhǔn)確性和靈活性。而且逐字節(jié)處理能夠減少延時本發(fā)明具有良好的擴展性,能夠適應(yīng)多種協(xié)議類型。
1.一種基于循環(huán)隊列和狀態(tài)機的報文解析方法,其特征在于,所述方法包括以下步驟:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述狀態(tài)機包括多個解析狀態(tài),每個所述解析狀態(tài)對應(yīng)報文的一個特定字段,并且所述狀態(tài)機根據(jù)當(dāng)前解析字段自動切換到下一個解析狀態(tài)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述方法還包括在解析過程中,當(dāng)接收到的數(shù)據(jù)不足以組成一個完整的幀時,系統(tǒng)暫時中斷解析,并將已解析到的數(shù)據(jù)保存到內(nèi)存中;當(dāng)新的數(shù)據(jù)到達后,系統(tǒng)繼續(xù)從上一次中斷的位置進行解析。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括在解析過程中,如果檢測到幀錯誤或幀邊界不明確,系統(tǒng)將丟棄當(dāng)前數(shù)據(jù)并重新開始解析。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述協(xié)議類型包括iec101、iec104、modbus、dlt/645、mqtt以及自定義通訊協(xié)議。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括根據(jù)協(xié)議的幀結(jié)構(gòu),按步驟解析的字段包括幀頭、長度、幀類型和數(shù)據(jù)內(nèi)容,且在任何時刻只處理當(dāng)前可用的數(shù)據(jù)段。
7.一種基于循環(huán)隊列和狀態(tài)機的報文解析系統(tǒng),其特征在于,所述系統(tǒng)包括:
8.根據(jù)權(quán)利要求7所述的報文解析系統(tǒng),其特征在于,所述狀態(tài)機模塊包括多個解析狀態(tài),每個狀態(tài)對應(yīng)于報文的一個特定字段,并且狀態(tài)機根據(jù)當(dāng)前解析字段自動切換到下一個解析狀態(tài)。
9.根據(jù)權(quán)利要求7所述的報文解析系統(tǒng),其特征在于,所述系統(tǒng)還包括暫存模塊,用于在解析過程中,當(dāng)接收到的數(shù)據(jù)不足以組成一個完整的幀時,暫存已解析的數(shù)據(jù),并在接收到更多數(shù)據(jù)后繼續(xù)解析。