本發(fā)明涉及一種Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,屬于Unity3D平臺(tái)串口通信開(kāi)發(fā)技術(shù)領(lǐng)域。
背景技術(shù):
串行接口簡(jiǎn)稱串口,也稱串行通信接口或串行通訊接口 ( 通常指 COM 接口 ),是采用串行通信方式的擴(kuò)展接口。其特點(diǎn)是通信線路簡(jiǎn)單,只要一對(duì)傳輸線就可以實(shí)現(xiàn)雙向通信,從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳輸速度較慢。由于串口使用簡(jiǎn)單,成本低廉,現(xiàn)在被普遍應(yīng)用于產(chǎn)品的開(kāi)發(fā)和測(cè)試過(guò)程中。
目前Unity3D平臺(tái)給出的串口讀取接口可以在最小單位時(shí)間點(diǎn)讀取串口數(shù)據(jù)。但應(yīng)用串口進(jìn)行通信測(cè)試時(shí)存在一些讀取數(shù)據(jù)錯(cuò)誤問(wèn)題從而影響對(duì)數(shù)據(jù)的使用,例如最常出現(xiàn)的就是每幀讀取的數(shù)據(jù)并不是一幀完整的數(shù)據(jù),絕大多數(shù)情況下會(huì)出現(xiàn)諸如數(shù)據(jù)采集了本應(yīng)為前一幀的后半段數(shù)據(jù)和本應(yīng)為此幀數(shù)據(jù)的前半段數(shù)據(jù)的結(jié)合、讀取的數(shù)據(jù)為空數(shù)據(jù)或半空數(shù)據(jù),然而當(dāng)這一部分?jǐn)?shù)據(jù)如果無(wú)法使用時(shí),就會(huì)造成長(zhǎng)時(shí)間的數(shù)據(jù)丟失,使得程序出現(xiàn)相應(yīng)的丟幀、卡頓甚至崩潰的情況。
目前處理串口數(shù)據(jù)的硬件設(shè)備和串口處理數(shù)據(jù)的系統(tǒng)僅僅給出了調(diào)節(jié)接收數(shù)據(jù)速度、過(guò)濾錯(cuò)誤數(shù)據(jù)的功能,然而如果遇到錯(cuò)誤數(shù)據(jù)量大卻無(wú)法校正僅僅將這些錯(cuò)誤數(shù)據(jù)過(guò)濾后,則依然會(huì)出現(xiàn)大范圍數(shù)據(jù)丟失、程序出現(xiàn)卡頓丟幀甚至崩潰的情況。
鑒于此,找到一種可以將這些無(wú)法使用的錯(cuò)誤數(shù)據(jù)融合、校正、過(guò)濾成為可以使用的正確數(shù)據(jù)的方法,在Unity3D平臺(tái)串口通信開(kāi)發(fā)領(lǐng)域意義重大。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,融合、校正、過(guò)濾Unity3D平臺(tái)在讀取串口數(shù)據(jù)時(shí)讀取到的錯(cuò)誤數(shù)據(jù),保證接收到的錯(cuò)誤數(shù)據(jù)經(jīng)過(guò)處理后每一幀數(shù)據(jù)都是正確可用的。
為了解決所述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案是:一種Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,所述方法包括:
標(biāo)定數(shù)據(jù)的幀頭字節(jié)、幀尾字節(jié);
將此幀字節(jié)數(shù)據(jù)全部轉(zhuǎn)化為一個(gè)字符串;
檢查當(dāng)前幀接收到的一幀數(shù)據(jù)的開(kāi)頭字節(jié)是否為幀頭字符、幀尾是否為幀尾字符;
如果幀頭幀尾字符對(duì)比正確,則將此幀數(shù)據(jù)暫時(shí)放入一個(gè)事先定義好的完整數(shù)據(jù)集合中;
如果對(duì)比錯(cuò)誤,則通過(guò)尋找?guī)矌^的方式得出完整數(shù)據(jù),將處理后的完整數(shù)據(jù)放入完整數(shù)據(jù)集合當(dāng)中;
將上述完整數(shù)據(jù)集合的數(shù)據(jù)取出進(jìn)行校驗(yàn),校驗(yàn)正確則將數(shù)據(jù)放入可使用正確數(shù)據(jù)集合中。
本發(fā)明所述Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,對(duì)比錯(cuò)誤后得到完整數(shù)據(jù)的具體步驟為:如果對(duì)比錯(cuò)誤,則先遍歷字符串,查看此幀數(shù)據(jù)中是否有幀尾幀頭連接在一起的字符串,如果有則以此為界,將前段數(shù)據(jù)與后段數(shù)據(jù)分開(kāi),新建兩個(gè)字符串str01、str02,此時(shí)若是第一幀讀取數(shù)據(jù),則將前段數(shù)據(jù)在內(nèi)存中銷毀,將后段數(shù)據(jù)加入幀頭后存入str02待用,如果不是第一幀數(shù)據(jù),則將此幀數(shù)據(jù)的前半段數(shù)據(jù)與上幀數(shù)據(jù)存儲(chǔ)起來(lái)的后半段數(shù)據(jù)相加連為同一段數(shù)據(jù),在數(shù)據(jù)兩端加上幀頭、幀尾,并遍歷字符串,計(jì)算其長(zhǎng)度是否等于一幀數(shù)據(jù)的長(zhǎng)度,若是,其為一端完整數(shù)據(jù),將數(shù)據(jù)存入str01,然后將此幀數(shù)據(jù)的后半段數(shù)據(jù)存入str02以備下一幀使用;若此幀數(shù)據(jù)不含有幀尾幀頭,僅有幀尾存在于倒數(shù)第二個(gè)字節(jié),則用幀頭加上這段數(shù)據(jù)的第一個(gè)字節(jié)到倒數(shù)第二個(gè)字節(jié)組成一幀完整數(shù)據(jù),然后將處理后的數(shù)據(jù)與開(kāi)頭數(shù)據(jù)做對(duì)比,如果對(duì)比結(jié)果正確,則此數(shù)據(jù)為處理后的完整數(shù)據(jù),放入完整數(shù)據(jù)集合當(dāng)中。
本發(fā)明所述Unity3D平臺(tái)的串口數(shù)據(jù)處理方法, Unity3D平臺(tái)腳本讀取串口函數(shù)的后面加入此方法返回處理過(guò)的數(shù)據(jù)即為正確數(shù)據(jù)。
本發(fā)明所述Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,將讀取數(shù)據(jù)函數(shù)放入新開(kāi)辟的多線程中,按照不同計(jì)算機(jī)設(shè)備的性能自動(dòng)的調(diào)節(jié)接收數(shù)據(jù)的速率,保證自動(dòng)兼容所有配置的硬件設(shè)備。
本發(fā)明所述Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,在腳本中設(shè)置一個(gè)時(shí)間閾值,每隔所述時(shí)間閾值則開(kāi)啟一次多線程來(lái)接收數(shù)據(jù)。
本發(fā)明所述Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,根據(jù)硬件輸入的數(shù)據(jù)通信協(xié)議在算法入口用參數(shù)動(dòng)態(tài)設(shè)置用來(lái)驗(yàn)證數(shù)據(jù)完整性的幀頭與幀尾的字符,來(lái)動(dòng)態(tài)兼容不同硬件的通信協(xié)議。
本發(fā)明所述Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,根據(jù)硬件輸入的數(shù)據(jù)通信協(xié)議在算法入口用參數(shù)動(dòng)態(tài)設(shè)置每幀接收數(shù)據(jù)的長(zhǎng)度,來(lái)動(dòng)態(tài)兼容不同硬件的通信協(xié)議。
本發(fā)明所述Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,在完整數(shù)據(jù)集合取處理過(guò)的完整數(shù)據(jù)時(shí),按照先進(jìn)先出的原則將完整數(shù)據(jù)集合的數(shù)據(jù)取出,取出后按照此幀數(shù)據(jù)的校驗(yàn)特性進(jìn)行相應(yīng)的異或或者加減操作的校驗(yàn),校驗(yàn)正確則將數(shù)據(jù)放入可使用正確數(shù)據(jù)集合當(dāng)中。
本發(fā)明的有益效果:1.通過(guò)融合、校正將在Unity3D平臺(tái)中通過(guò)串口讀取的錯(cuò)誤數(shù)據(jù)轉(zhuǎn)化為正確可用的數(shù)據(jù)。2.通過(guò)對(duì)處理后的數(shù)據(jù)進(jìn)行二次過(guò)濾,可過(guò)濾掉無(wú)法校正的空數(shù)據(jù)。3. 在Unity3D平臺(tái)中通過(guò)開(kāi)辟多線程的方式實(shí)現(xiàn)自動(dòng)動(dòng)態(tài)適配硬件配置或通過(guò)設(shè)置時(shí)間閾值的方式來(lái)控制多線程的開(kāi)啟達(dá)到手動(dòng)調(diào)節(jié)接收數(shù)據(jù)的速率。4.通過(guò)在算法函數(shù)入口參數(shù)處動(dòng)態(tài)的傳入接收目標(biāo)數(shù)據(jù)的數(shù)據(jù)長(zhǎng)度和枕頭幀尾的字符來(lái)動(dòng)態(tài)的適配所有硬件的通信協(xié)議。
附圖說(shuō)明
圖1為本發(fā)明的流程圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步的說(shuō)明和限定。
一種Unity3D平臺(tái)的串口數(shù)據(jù)處理方法,該方法的具體步驟為:1、標(biāo)定數(shù)據(jù)的幀頭字節(jié)、幀尾字節(jié);2、將此幀字節(jié)數(shù)據(jù)全部轉(zhuǎn)化為一個(gè)字符串;3、檢查當(dāng)前幀接收到的一幀數(shù)據(jù)的開(kāi)頭字節(jié)是否為幀頭字符、幀尾是否為幀尾字符;4、如果幀頭幀尾字符對(duì)比正確,則將此幀數(shù)據(jù)暫時(shí)放入一個(gè)事先定義好的完整數(shù)據(jù)集合當(dāng)中;5、如果對(duì)比錯(cuò)誤,則先遍歷字符串,查看此幀數(shù)據(jù)中是否有幀尾幀頭連接在一起的字符串,如果有則以此為界,將前段數(shù)據(jù)與后段數(shù)據(jù)分隔開(kāi)來(lái)。此時(shí)若是第一幀讀取數(shù)據(jù),則新建兩個(gè)字符串str01、str02,將前段數(shù)據(jù)在內(nèi)存中銷毀,將后段數(shù)據(jù)存入str02待用。在下一幀接收數(shù)據(jù)時(shí)若接收到的數(shù)據(jù)含有幀尾幀頭,則此幀數(shù)據(jù)一定是上幀數(shù)據(jù)的延續(xù),所以此幀數(shù)據(jù)的上半段數(shù)據(jù)與上幀數(shù)據(jù)存儲(chǔ)起來(lái)的下半段數(shù)據(jù)可相加起來(lái)連為同一段數(shù)據(jù),再將前后兩端分別加上幀頭、幀尾,保險(xiǎn)起見(jiàn),可以遍歷字符串,計(jì)算其長(zhǎng)度是否等于一幀數(shù)據(jù)的長(zhǎng)度,若是,其為一段完整可用的數(shù)據(jù),存入str01,然后將下半段數(shù)據(jù)存入str02以備下一幀之用。若此幀數(shù)據(jù)不含有幀尾幀頭,僅存在幀尾,處于倒數(shù)第二個(gè)字節(jié),則用幀頭加上這段數(shù)據(jù)的第一個(gè)字節(jié)到倒數(shù)第二個(gè)字節(jié)組成一幀完整數(shù)據(jù)。然后將此幀處理后的數(shù)據(jù)與開(kāi)頭數(shù)據(jù)做對(duì)比,如果對(duì)比結(jié)果正確,則此數(shù)據(jù)為處理后的完整數(shù)據(jù),放入處理后數(shù)據(jù)的集合當(dāng)中。6、將處理后的數(shù)據(jù)按照先進(jìn)先出的原則依次取出,取出后按照此幀數(shù)據(jù)的校驗(yàn)特性進(jìn)行相應(yīng)的異或或者加減操作的校驗(yàn),校驗(yàn)正確則將數(shù)據(jù)放入可使用正確數(shù)據(jù)集合當(dāng)中。7、Unity3D平臺(tái)腳本讀取串口函數(shù)的后面加入此種算法后返回處理過(guò)的數(shù)據(jù)即為正確數(shù)據(jù)。如圖1所示,為本發(fā)明的流程圖。
本實(shí)施例中,為了自動(dòng)兼容所有配置的硬件設(shè)備,將讀取數(shù)據(jù)函數(shù)放入新開(kāi)辟的多線程中,按照不同計(jì)算機(jī)設(shè)備的性能自動(dòng)的調(diào)節(jié)接收數(shù)據(jù)的速率,保證自動(dòng)兼容所有配置的硬件設(shè)備。
本實(shí)施例中,為了調(diào)節(jié)接收數(shù)據(jù)的速率,根據(jù)自己軟件的需求在腳本中設(shè)置一個(gè)時(shí)間閾值,每隔所述時(shí)間閾值則開(kāi)啟一次多線程來(lái)接收數(shù)據(jù),通過(guò)這樣的方式來(lái)靜態(tài)的設(shè)置自己需要的串口讀取速率。
本實(shí)施例中,為了兼容不同硬件的通信協(xié)議,可以根據(jù)硬件輸入的數(shù)據(jù)通信協(xié)議在算法入口用參數(shù)動(dòng)態(tài)設(shè)置用來(lái)驗(yàn)證數(shù)據(jù)完整性的幀頭與幀尾的字符,或者根據(jù)硬件輸入的數(shù)據(jù)通信協(xié)議在算法入口用參數(shù)動(dòng)態(tài)設(shè)置每幀接收數(shù)據(jù)的長(zhǎng)度。
以上描述的僅是本發(fā)明的基本原理和優(yōu)選實(shí)施例,本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明作出的改進(jìn)和替換,屬于本發(fā)明的保護(hù)范圍。