曹彧,周建斌
(成都理工大學(xué)核技術(shù)與自動化工程學(xué)院,四川成都,610059)
關(guān)鍵字:核測量;無線傳輸;程序設(shè)計;串行通信; SerialPort類;接收邏輯
隨著電子信息技術(shù)的發(fā)展,計算機技術(shù)在傳統(tǒng)核測量領(lǐng)域得到了廣泛應(yīng)用,其中作為探測放射性核素主要設(shè)備的伽瑪能譜儀,大量用于環(huán)境監(jiān)測、地質(zhì)勘探、核物理實驗測量等領(lǐng)域[1],為避免現(xiàn)場測量時,長時間接觸放射源對人體造成的危害,可使用無線傳輸模塊將現(xiàn)場測量設(shè)備和計算機終端進(jìn)行隔離,實現(xiàn)非接觸式遠(yuǎn)距離測量[2],以此降低研究人員受輻射的危害。
串行接口作為計算機常用的對外接口,因其簡單易用,在某些對通訊速度要求不高的測控場景中被廣泛應(yīng)用。以串行通信為基礎(chǔ)的硬件設(shè)備與上位機進(jìn)行數(shù)據(jù)傳輸時,上位機從串口緩沖區(qū)獲取數(shù)據(jù)的方式,經(jīng)調(diào)研發(fā)現(xiàn)常用的有兩種,一種是等待指定時間后,從接收緩沖區(qū)讀取指定長度的數(shù)據(jù),下文簡稱為“時間模式”[3-4];一種是按照接收緩沖區(qū)字節(jié)長度是否達(dá)到硬件設(shè)備上傳數(shù)據(jù)量來獲取數(shù)據(jù),下文簡稱為“字節(jié)模式”[5]。
本文使用的無線傳輸模塊與計算機終端之間采用串行通信的方式進(jìn)行數(shù)據(jù)交互,經(jīng)實際測試發(fā)現(xiàn),在使用無線模塊進(jìn)行數(shù)據(jù)遙傳的過程中,因為通信質(zhì)量不穩(wěn)定,常規(guī)的以時間模式或字節(jié)模式這兩種常用方式來獲取數(shù)據(jù)的上位機接收邏輯,適用性差,易造成通信阻塞,進(jìn)而導(dǎo)致測量傳輸系統(tǒng)無法正常運行,因此在前人的研究基礎(chǔ)上,本文使用SerialPort類,提出并檢驗了一種新的數(shù)據(jù)接收邏輯,在增加了掉線重連、超時檢測等功能后,測量傳輸系統(tǒng)的通信環(huán)境的適應(yīng)能力及傳輸系統(tǒng)穩(wěn)定性均得到了進(jìn)一步的提升。
實際應(yīng)用場景下的測量裝置模型如圖1所示,現(xiàn)場數(shù)據(jù)測量端由搭載探測器和無線數(shù)傳電臺模塊的無人機組成,執(zhí)行能譜測量及數(shù)據(jù)回傳的任務(wù)。遠(yuǎn)程數(shù)據(jù)接收端由無線數(shù)傳電臺及運行測量控制程序的計算機構(gòu)成,執(zhí)行參數(shù)命令下發(fā)和現(xiàn)場測量數(shù)據(jù)接收的任務(wù)。
圖1 實際應(yīng)用場景下測量裝置模型
測試過程中對實際應(yīng)用場景下的裝置進(jìn)行了簡化,去掉了無人機系統(tǒng),僅在地面進(jìn)行核儀器遙傳測試,測試裝置組成如圖2所示,主要分為測量端與接收端兩大部分,其中測量端主要由探測器與無線電臺組成,接收端主要由計算機與無線電臺組成。負(fù)責(zé)遠(yuǎn)距離無線傳輸?shù)臒o線電臺模塊采用由成都億佰特公司研發(fā)的E90-DTU工業(yè)級無線數(shù)傳平臺進(jìn)行點對點通信。該無線數(shù)傳平臺支持RS-232、RS-485兩種接口,可在距離較遠(yuǎn)、易受干擾的環(huán)境實現(xiàn)點對點跳頻雙向連傳。
圖2 測量裝置結(jié)構(gòu)組成
1.1.1 探測器與遙傳模塊通信
數(shù)據(jù)測量端基本結(jié)構(gòu)模型如圖3所示,碘化鈉探測器主要包含NaI晶體、光電倍增管、前置放大器以及數(shù)字多道等模塊,主要負(fù)責(zé)進(jìn)行放射性測量。探測器與無線電臺模塊之間依靠RS-485串行總線進(jìn)行數(shù)據(jù)交互,該協(xié)議采用差分信號進(jìn)行傳輸具有結(jié)構(gòu)簡單且能有效抑制外界干擾的優(yōu)點,數(shù)據(jù)交互過程包含測量數(shù)據(jù)上傳以及測量參數(shù)配置,測量數(shù)據(jù)上傳過程為探測器首先根據(jù)RS-485協(xié)議將數(shù)據(jù)上傳至無線電臺模塊,然后通過無線電臺將測量數(shù)據(jù)轉(zhuǎn)換成電磁波,以此進(jìn)行遠(yuǎn)距離無線傳輸。測量參數(shù)配置過程為無線電臺首先對接收到的電磁波信號進(jìn)行解析,然后將解析數(shù)據(jù)通過RS485協(xié)議下發(fā)給探測器,以此實現(xiàn)探測器測量參數(shù)的配置。
圖3 數(shù)據(jù)測量端結(jié)構(gòu)組成模型
1.1.2 探測器上傳數(shù)據(jù)包設(shè)計
如圖4所示,一個數(shù)據(jù)包由2個字節(jié)的幀頭“0x55 0xAA”,接著是2個字節(jié)的測量時間“Th”、“Tl”,分別代表測量時間數(shù)據(jù)大小十六進(jìn)制的高八位和低八位,然后是按順序排列的2048個字節(jié)的能譜數(shù)據(jù),結(jié)尾由2個字節(jié)地和校驗字段共計2054個字節(jié)組成。在探測器接收到上位機通過遙傳電臺下發(fā)的測量數(shù)據(jù)獲取指令后,立即通過遙傳電臺將測量數(shù)據(jù)包上傳,經(jīng)遠(yuǎn)程客戶端電臺發(fā)送至上位機。
圖4 數(shù)據(jù)包格式示意圖
1.2.1 遙傳模塊與計算機通信
數(shù)據(jù)接收端基本結(jié)構(gòu)模型如圖5所示,計算機與無線電臺模塊之間依靠RS-232串行總線進(jìn)行數(shù)據(jù)交互,交互過程中包括測量數(shù)據(jù)接收以及測量參數(shù)下發(fā),其中測量數(shù)據(jù)接收過程為無線電臺對接收到的電磁波信號進(jìn)行解析并將解析結(jié)果通過RS232協(xié)議傳輸至計算機,最終由運行于此計算機上的測量控制軟件對測量數(shù)據(jù)進(jìn)行處理。測量參數(shù)下發(fā)過程為測量控制軟件將測量參數(shù)通過RS232協(xié)議下發(fā)給無線電臺模塊,由無線電臺將測量數(shù)據(jù)轉(zhuǎn)換成電磁波進(jìn)行遠(yuǎn)距離無線傳輸。
圖5 數(shù)據(jù)接收端結(jié)構(gòu)組成模型
1.2.2 上位機串口通信實現(xiàn)方法
上位機測控程序使用C#編程語言,在集成開發(fā)環(huán)境Visual Studio 2019進(jìn)行Winform開發(fā)而來的窗體應(yīng)用程序,該測控程序以SerialPort類為基礎(chǔ)搭建串口通信模塊,實現(xiàn)上位機進(jìn)行串口通信數(shù)據(jù)收發(fā)的功能。該類定義了多種用于串口收發(fā)數(shù)據(jù)的方法,本文使用Read(byte[],int32,int32)方法從輸入緩沖區(qū)讀取指定長度的字節(jié),并將那些字節(jié)寫入字節(jié)數(shù)組中指定的偏移量處,發(fā)送數(shù)據(jù)使用的是Write(byte[])將字節(jié)數(shù)組放入發(fā)送緩沖區(qū)通過串行端口進(jìn)行發(fā)送。
2.1.1 時間模式獲取探測數(shù)據(jù)
在時間模式下,上位機向遠(yuǎn)程探測點發(fā)送讀取數(shù)據(jù)的命令,等待一定時間,然后從接收緩沖區(qū)讀取指定長度的數(shù)據(jù)。當(dāng)從緩沖區(qū)讀取到的數(shù)據(jù)長度與應(yīng)收數(shù)據(jù)長度相等,則認(rèn)為收到正確應(yīng)答,進(jìn)行應(yīng)答統(tǒng)計,否則認(rèn)為丟包,進(jìn)行丟包統(tǒng)計加。應(yīng)答正確后對數(shù)據(jù)包進(jìn)行解包校驗,若校驗通過則進(jìn)行正確包統(tǒng)計,否則進(jìn)行錯誤包統(tǒng)計。經(jīng)數(shù)據(jù)處理完成后,再次發(fā)送讀取數(shù)據(jù)指令,重復(fù)此循環(huán)以獲取最新的探測數(shù)據(jù)。
等待時間值的大小,與探測器上傳數(shù)據(jù)量及不同環(huán)境下遙傳電臺的通信質(zhì)量相關(guān)。此種時間模式的架構(gòu),優(yōu)點是結(jié)構(gòu)簡潔、容易實現(xiàn),缺點是容易受外界影響,導(dǎo)致丟包、錯誤包的產(chǎn)生,例如通信質(zhì)量的變化,導(dǎo)致在等待指定時間后,緩沖區(qū)數(shù)據(jù)量與應(yīng)收數(shù)據(jù)量不等導(dǎo)致丟包的產(chǎn)生,緩沖區(qū)數(shù)據(jù)量與應(yīng)收數(shù)據(jù)量相等但數(shù)據(jù)順序錯位,因此導(dǎo)致校驗失敗,該數(shù)據(jù)包將被判定為錯誤包。
2.1.2 字節(jié)模式獲取探測數(shù)據(jù)
為避免時間模式測量中,上位機向遠(yuǎn)程探測設(shè)備發(fā)送讀取數(shù)據(jù)命令后,實際需要等待的時間長短會隨傳輸環(huán)境的變化而變化,進(jìn)而導(dǎo)致丟包、錯誤包產(chǎn)生的問題,可采用字節(jié)模式架構(gòu)實現(xiàn)一定程度上的問題規(guī)避。
字節(jié)模式即向探測設(shè)備發(fā)送讀取數(shù)據(jù)命令后,按接收緩沖區(qū)內(nèi)的字節(jié)數(shù)量來獲取數(shù)據(jù)的模式,讀取使能的判斷,是由緩沖區(qū)數(shù)據(jù)量大小是否達(dá)到應(yīng)收數(shù)據(jù)量決定的,當(dāng)緩沖區(qū)數(shù)量與應(yīng)收數(shù)據(jù)量相等,便認(rèn)為正確接收應(yīng)答進(jìn)行應(yīng)答統(tǒng)計,應(yīng)答正確后,進(jìn)行數(shù)據(jù)包解包校驗,并完成相關(guān)統(tǒng)計,最后經(jīng)數(shù)據(jù)處理操作,再次發(fā)送讀取數(shù)據(jù)指令,重復(fù)此循環(huán)以獲取最新的探測數(shù)據(jù)。
與時間模式下的等待固定時間來觸發(fā)讀取使能的方法相比較,按照緩沖區(qū)字節(jié)量是否滿足條件來使能數(shù)據(jù)讀取的方式,具有較大彈性,適用性更廣。但缺陷也是顯而易見的,假設(shè)傳輸過程突發(fā)異常狀況,如遠(yuǎn)程探測設(shè)備短暫掉線、遙傳電臺信號受到環(huán)境干擾等導(dǎo)致的傳輸數(shù)據(jù)缺失,則接收緩沖區(qū)中的數(shù)據(jù)量始終難以達(dá)到應(yīng)收字節(jié)長度的要求,故而程序?qū)⑾萑肱袛嗑彌_區(qū)數(shù)據(jù)量是否滿足要求的循環(huán),導(dǎo)致無法進(jìn)行后續(xù)操作,以至于上位機軟件程序進(jìn)入假死狀態(tài)。雖然此種模式具有此種缺陷,但是在數(shù)據(jù)傳輸穩(wěn)定的測量條件下,仍然具有較大應(yīng)用意義。
2.1.3 時間+字節(jié)模式獲取探測數(shù)據(jù)
測試分析了時間模式、字節(jié)模式下進(jìn)行數(shù)據(jù)讀取的優(yōu)勢和劣勢,綜合考慮,設(shè)計出了一種新的數(shù)據(jù)接收架構(gòu),時間-字節(jié)模式,該模式具有字節(jié)模式數(shù)據(jù)接收適用性廣的優(yōu)點,又結(jié)合時間模式的特性對字節(jié)模式存在的缺陷進(jìn)行修正。流程框架如下圖6所示。為避免因故障致使端口意外關(guān)閉,進(jìn)而無法正確傳輸數(shù)據(jù)的情況發(fā)生,加入端口開啟檢測模塊,向遠(yuǎn)程探測器發(fā)送讀取數(shù)據(jù)命令后,當(dāng)遇到“端口未開啟”報錯,將關(guān)閉超時檢測計時器Timer1并立即啟動端口掃描計時器Timer0,掃描并記錄接入端口的識別信息,如果與原端口識別信息相同,則停止端口掃描模塊,重新下發(fā)讀取數(shù)據(jù)命令,若不相同,則繼續(xù)掃描。
圖6 “時間模式”數(shù)據(jù)接收邏輯示意圖
端口正常開啟情況下,向遠(yuǎn)程探測器發(fā)送讀取數(shù)據(jù)命令后,同時開啟超時檢測計時器Timer1進(jìn)行嘀嗒計時,數(shù)據(jù)接收模塊檢測接收緩沖區(qū)數(shù)據(jù)是否達(dá)到應(yīng)收數(shù)據(jù)量要求,當(dāng)遇到異常傳輸情況導(dǎo)致的數(shù)據(jù)傳輸缺失,致使緩沖區(qū)的數(shù)據(jù)量始終無法達(dá)到應(yīng)收數(shù)據(jù)量的水平,在超時檢測模塊的輔助下,程序?qū)⒉粫萑爰偎罓顟B(tài),而是在超時之后,將此失敗應(yīng)答統(tǒng)計為丟包,并向遠(yuǎn)程探測器重新發(fā)起數(shù)據(jù)請求命令。當(dāng)接收緩沖區(qū)中的數(shù)據(jù)量滿足要求時,則啟動數(shù)據(jù)讀使能,相應(yīng)統(tǒng)計值進(jìn)行累加,關(guān)閉超時檢測模塊使能,并將緩沖區(qū)中的數(shù)據(jù)讀出,按照協(xié)議進(jìn)行解包校驗,統(tǒng)計接收信息,待后續(xù)數(shù)據(jù)處理完成后,再次發(fā)送讀取數(shù)據(jù)命令,重復(fù)此循環(huán)以獲取最新的探測數(shù)據(jù)。
在需要應(yīng)答信號的測量控制系統(tǒng)中,依據(jù)上述三種串行通訊數(shù)據(jù)傳輸邏輯,使用C#編程語言,以SerialPort類為基礎(chǔ),編寫三種相應(yīng)的串口通信測試程序,界面如下圖7、8、9所示,在相同的測量環(huán)境下,使用同一個遙傳測試平臺,傳輸距離設(shè)置為100米,中間以門、墻作簡單隔擋,進(jìn)行連續(xù)測量,測試分析三種數(shù)據(jù)接收模式的穩(wěn)定性。
圖7 “字節(jié)模式”數(shù)據(jù)接收邏輯示意圖
圖8 “時間+字節(jié)模式”數(shù)據(jù)接收邏輯示意圖
圖9 “時間模式”上位機界面
圖10 “字節(jié)模式”上位機程序
2.2.1 測量傳輸統(tǒng)計
如表1所示數(shù)據(jù)包接收統(tǒng)計,分別針對三種數(shù)據(jù)接收模式的上位機測量程序,在同一測量條件下,連續(xù)測量1小時,統(tǒng)計其數(shù)據(jù)接收信息,其中“應(yīng)收包數(shù)目”表示上位機向遠(yuǎn)程探測器發(fā)送數(shù)據(jù)獲取命令,對應(yīng)的正常情況下數(shù)據(jù)包接收數(shù)目,“實收包數(shù)目”表示在一定應(yīng)答時間限制內(nèi)的,接收到與探測器上傳數(shù)據(jù)等量的數(shù)據(jù)包接收數(shù)目,“丟失包數(shù)目”表示在一定時間內(nèi)未收到與探測器上傳數(shù)據(jù)等量數(shù)據(jù)包的次數(shù)?!板e誤包數(shù)目”表示接收到與探測器上傳數(shù)據(jù)等量的數(shù)據(jù)后,校驗通過的數(shù)目。字節(jié)模式下,因為其固有的邏輯缺陷,在單次接收數(shù)據(jù)出錯后,程序?qū)⑾萑爰偎罓顟B(tài),導(dǎo)致測量系統(tǒng)無法正常通信,因此字節(jié)模式下接收數(shù)據(jù)數(shù)目如表所示,理論上接收數(shù)據(jù)包數(shù)目應(yīng)與“時間+字節(jié)”模式相等。
圖11 “時間+字節(jié)模式”上位機程序
表1 測量包信息統(tǒng)計
2.2.2 丟失包與錯誤包統(tǒng)計分析
由于字節(jié)模式進(jìn)行100次應(yīng)答之后,測量傳輸失敗,因此丟包統(tǒng)計分析只在“時間模式”和“時間+字節(jié)模式”之間討論。如圖12所示,在“時間+字節(jié)模式”下的每傳輸50包數(shù)據(jù)發(fā)生的數(shù)據(jù)包丟失率水平低于“時間模式”下的數(shù)據(jù)包丟失率水平。
圖12 丟包率統(tǒng)計堆積柱狀圖對比
由于字節(jié)模式進(jìn)行100次應(yīng)答之后,測量傳輸失敗,因此錯誤包統(tǒng)計分析只在“時間模式”和“時間+字節(jié)模式”之間討論。如圖13所示,“時間+字節(jié)模式”下每傳輸50包數(shù)據(jù)產(chǎn)生的錯誤率低于“時間模式”下的錯誤率。
圖13 錯誤率統(tǒng)計堆積柱狀圖對比
本測試系統(tǒng)的數(shù)據(jù)傳輸校驗采用簡單加和的方法對數(shù)據(jù)包進(jìn)行校驗,但加和校驗得出的校驗結(jié)果可靠性較低,例如數(shù)據(jù)段內(nèi)因字節(jié)順序改變導(dǎo)致的錯誤,加和校驗并不能進(jìn)行有效區(qū)分。由于CRC循環(huán)冗余校驗獲得的校驗碼與數(shù)據(jù)包數(shù)據(jù)段的每一位數(shù)據(jù)構(gòu)成一種特定的關(guān)系,達(dá)到以較少的冗余位獲得可靠的校驗結(jié)果的目的,因此后續(xù)可用CRC校驗進(jìn)行改進(jìn)。
本文從實際測量實驗中遇到的問題出發(fā),在常用的串行通信上位機數(shù)據(jù)接收邏輯的基礎(chǔ)上,提出了“時間+字節(jié)”的接收模型,并通過C# Winform開發(fā)了基于此接收模型的上位機測量控制程序。經(jīng)相關(guān)測試驗證后,結(jié)果表明:1)當(dāng)無線傳輸通信質(zhì)量出現(xiàn)嚴(yán)重下降時,即測量數(shù)據(jù)傳輸過程中出現(xiàn)字節(jié)丟失的情況,使用改進(jìn)型上位機測控程序所組成的核儀器遙傳測量系統(tǒng),測量傳輸能夠穩(wěn)定進(jìn)行。2)當(dāng)遇到測量傳輸設(shè)備因故障導(dǎo)致掉線的異常情況,此種異常采用人為斷開連接線的方式進(jìn)行模擬。經(jīng)測試使用“時間+字節(jié)”模式的上位機程序,測量傳輸系統(tǒng)能夠穩(wěn)定運行,由于具有掉線重連的功能,提高了系統(tǒng)數(shù)據(jù)傳輸可靠性。