喬 華
(運(yùn)城市廣播電視臺(tái),山西 運(yùn)城 044000)
炮口沖擊波是火炮射擊產(chǎn)生的危害產(chǎn)物之一,作為火炮研制過(guò)程中的一項(xiàng)主要考核目標(biāo),其特征參數(shù)是衡量火炮性能的重要指標(biāo)[1].以往的存儲(chǔ)式?jīng)_擊波測(cè)試系統(tǒng)受限于存儲(chǔ)器的特性,大多只能進(jìn)行單次觸發(fā),在一次試驗(yàn)過(guò)程中只能記錄一次沖擊波數(shù)據(jù)[2-4].但當(dāng)前火炮測(cè)試大多有連發(fā)射擊的需求,新型的炮口沖擊波測(cè)試系統(tǒng)通過(guò)對(duì)存儲(chǔ)器進(jìn)行分區(qū)實(shí)現(xiàn)了多次觸發(fā),并具有多個(gè)參數(shù)可編程的功能[5],這就對(duì)系統(tǒng)的上位機(jī)軟件有了更高的要求.上位機(jī)軟件需要對(duì)多次觸發(fā)的數(shù)據(jù)進(jìn)行管理,對(duì)不同觸發(fā)次數(shù)的數(shù)據(jù)進(jìn)行顯示和比較,并且可通過(guò)指令交互的方式及時(shí)修改測(cè)試系統(tǒng)工作參數(shù).QT作為新一代的軟件開(kāi)發(fā)平臺(tái),具有開(kāi)發(fā)成本低、可無(wú)障礙跨平臺(tái)移植的特性,本文針對(duì)測(cè)試系統(tǒng)需求,以QT作為軟件設(shè)計(jì)平臺(tái),利用QT設(shè)計(jì)師界面類(lèi)和特有的信號(hào)與槽機(jī)制進(jìn)行了炮口沖擊波測(cè)試系統(tǒng)的上位機(jī)軟件設(shè)計(jì).
炮口沖擊波測(cè)試系統(tǒng)分為下位機(jī)和上位機(jī)兩部分,如圖1 所示.下位機(jī)安裝于炮口周邊,通過(guò)ICP壓力傳感器獲取炮口周?chē)臎_擊波超壓,壓力信號(hào)經(jīng)調(diào)理、采樣,最終存儲(chǔ)到FLASH存儲(chǔ)器中.FLASH存儲(chǔ)器已提前規(guī)劃好存儲(chǔ)地址,允許記錄多次炮口沖擊波數(shù)據(jù).上位機(jī)處于遠(yuǎn)端安全距離處,主要由計(jì)算機(jī)和系統(tǒng)軟件組成,與下位機(jī)有兩種通信方式:USB通信方式和ZigBee無(wú)線通信方式.USB通信用于在試驗(yàn)前后近距離的數(shù)據(jù)讀取和參數(shù)更改,ZigBee無(wú)線通信用于在試驗(yàn)過(guò)程中遠(yuǎn)距離的指令傳輸.
圖1 總體方案框圖
使用測(cè)試系統(tǒng)進(jìn)行炮口沖擊波測(cè)試,首先要根據(jù)測(cè)試需求確定測(cè)試量程、觸發(fā)電平、頻帶寬度和記錄時(shí)長(zhǎng)等系統(tǒng)工作參數(shù),提前對(duì)系統(tǒng)參數(shù)進(jìn)行編程設(shè)置.之后根據(jù)測(cè)點(diǎn)布局方案將下位機(jī)安裝到預(yù)定的位置并上電.火炮射擊結(jié)束后,數(shù)據(jù)記錄完畢,PC端的上位機(jī)軟件通過(guò)USB接口讀取各個(gè)測(cè)點(diǎn)所記錄的炮口沖擊波數(shù)據(jù),并進(jìn)行頻譜分析和進(jìn)一步的數(shù)據(jù)處理,計(jì)算出最終的超壓峰值、正壓作用時(shí)間和沖量[6].一次完整的炮口沖擊波測(cè)試過(guò)程如圖2 所示.
圖2 炮口沖擊波測(cè)試流程
上位機(jī)軟件通過(guò)指令交互的方式對(duì)下位機(jī)進(jìn)行參數(shù)設(shè)置并獲取其工作狀態(tài),在試驗(yàn)結(jié)束后從下位機(jī)中將測(cè)試數(shù)據(jù)讀取出來(lái),在軟件中進(jìn)行處理和分析,最終在顯示界面中進(jìn)行顯示.由于系統(tǒng)可多次觸發(fā),軟件還需要根據(jù)存儲(chǔ)地址、觸發(fā)時(shí)間及觸發(fā)次數(shù)標(biāo)志位對(duì)數(shù)據(jù)進(jìn)行識(shí)別,然后在界面中同時(shí)顯示,方便對(duì)數(shù)據(jù)進(jìn)行對(duì)比和分析.上位機(jī)軟件由3個(gè)模塊組成:通信模塊、數(shù)據(jù)管理模塊和控制模塊,軟件結(jié)構(gòu)框圖如圖3 所示.
圖3 軟件結(jié)構(gòu)框圖
通信模塊負(fù)責(zé)上位機(jī)軟件與下位機(jī)硬件之間的信息溝通,由USB通信和ZigBee無(wú)線通信兩部分組成.數(shù)據(jù)管理模塊負(fù)責(zé)對(duì)下位機(jī)傳回的沖擊波數(shù)據(jù)以及二者之間的交互指令進(jìn)行接收、發(fā)送、識(shí)別和處理,包括沖擊波數(shù)據(jù)管理以及指令數(shù)據(jù)管理兩部分.沖擊波數(shù)據(jù)管理程序負(fù)責(zé)將下位機(jī)存儲(chǔ)器中的測(cè)試數(shù)據(jù)讀取到上位機(jī)進(jìn)行顯示和處理,同時(shí)獲取觸發(fā)時(shí)刻系統(tǒng)內(nèi)部RTC的實(shí)時(shí)時(shí)間并與沖擊波數(shù)據(jù)對(duì)應(yīng).指令數(shù)據(jù)管理程序負(fù)責(zé)與下位機(jī)進(jìn)行指令交互,通過(guò)不同的交互指令完成對(duì)下位機(jī)的狀態(tài)獲取、參數(shù)編程等控制任務(wù).
信號(hào)和槽機(jī)制是QT軟件設(shè)計(jì)平臺(tái)的核心[7],軟件各個(gè)部件之間的溝通、交互是通過(guò)QT信號(hào)和槽機(jī)制來(lái)完成的.控制模塊負(fù)責(zé)統(tǒng)籌系統(tǒng)各部件的信號(hào)變化和槽函數(shù)功能執(zhí)行,保證系統(tǒng)工作穩(wěn)定正常,包括指令控制、曲線控制和內(nèi)部信號(hào)管理3個(gè)部分.
系統(tǒng)有兩種通信方式:USB通信方式和ZigBee無(wú)線通信方式.
對(duì)于USB通信方式,系統(tǒng)選用FTDI公司的FT245RL 作為USB通信接口解決方案,其數(shù)據(jù)傳輸速率可達(dá)1 MB/s[8].系統(tǒng)使用隱式調(diào)用的方法在QT中調(diào)用FTDI公司的D2XX動(dòng)態(tài)鏈接庫(kù),之后在工程文件中聲明動(dòng)態(tài)鏈接庫(kù)文件的位置[9].在使用D2XX動(dòng)態(tài)鏈接庫(kù)對(duì)FT245RL進(jìn)行操作時(shí),需要先通過(guò)FT_Open函數(shù)打開(kāi)設(shè)備,將FT245RL驅(qū)動(dòng)程序設(shè)置在D2XX模式,之后通過(guò)FT_Set latency timer函數(shù)設(shè)置延時(shí),并通過(guò)FT_Set Timeouts函數(shù)設(shè)置超時(shí)時(shí)間,防止因讀寫(xiě)錯(cuò)誤而導(dǎo)致系統(tǒng)陷入死循環(huán).之后就可通過(guò)FT_Read函數(shù)和FT_Write函數(shù)對(duì)FT245RL進(jìn)行讀寫(xiě)操作.
ZigBee通信包括下位機(jī)的分節(jié)點(diǎn)和上位機(jī)的主節(jié)點(diǎn)兩部分,主節(jié)點(diǎn)與分節(jié)點(diǎn)的ZigBee模塊的串口信息、網(wǎng)絡(luò)地址等各項(xiàng)參數(shù)已通過(guò)其配置軟件設(shè)置完畢.上位機(jī)軟件與ZigBee模塊的通信就相當(dāng)于是與ZigBee模塊所連接的串口進(jìn)行通信[10].在使用ZigBee無(wú)線通信的方式與下位機(jī)進(jìn)行數(shù)據(jù)交互時(shí),軟件首先通過(guò)foreach關(guān)鍵字遍歷PC端當(dāng)前可用串口,找到ZigBee模塊所連接的電腦端COM口并對(duì)其進(jìn)行初始化,將其波特率與ZigBee模塊波特率統(tǒng)一.之后通過(guò)serial.open函數(shù)打開(kāi)該串口,通過(guò)serial.write函數(shù)和serial.read函數(shù)對(duì)該串口進(jìn)行數(shù)據(jù)讀寫(xiě).ZigBee通信工作原理如圖4 所示.
圖4 ZigBee無(wú)線通信工作原理
上位機(jī)軟件通過(guò)指令交互的方式通知下位機(jī)當(dāng)前需要執(zhí)行的操作.對(duì)于讀數(shù)操作,上位機(jī)軟件首先需要獲取下位機(jī)的已觸發(fā)次數(shù),并根據(jù)已觸發(fā)次數(shù)發(fā)送循環(huán)讀數(shù)指令.在讀數(shù)操作中,軟件首先向下位機(jī)發(fā)送握手指令,如下位機(jī)工作正常會(huì)返回應(yīng)答指令,軟件識(shí)別握手成功后發(fā)送指令獲取當(dāng)前觸發(fā)次數(shù),下位機(jī)返回范圍在0~16之間的數(shù)值代表當(dāng)前觸發(fā)次數(shù).之后軟件按照觸發(fā)次數(shù)向下位機(jī)發(fā)送循環(huán)讀數(shù)指令和對(duì)應(yīng)觸發(fā)次數(shù)的讀數(shù)標(biāo)志,根據(jù)存儲(chǔ)地址將不同觸發(fā)次數(shù)的數(shù)據(jù)讀取到上位機(jī)中,其過(guò)程如圖5 所示.
圖5 數(shù)據(jù)讀取框圖
將讀取完畢的數(shù)據(jù)保存在程序的緩存數(shù)組中,通過(guò)掛載的第三方繪圖控件QCutsom Plot進(jìn)行顯示,其使用流程包括界面初始化、設(shè)置繪圖數(shù)組和曲線刷新等步驟[11].
讀取之后的數(shù)據(jù)按照觸發(fā)次數(shù)緩存在不同的數(shù)組中,但最終仍需要將數(shù)據(jù)存到硬盤(pán)上,因此,需要對(duì)存盤(pán)數(shù)據(jù)進(jìn)行區(qū)分,使得在下次回讀時(shí)仍能將觸發(fā)次數(shù)和數(shù)據(jù)進(jìn)行對(duì)應(yīng).為此,軟件將不同觸發(fā)次數(shù)的數(shù)據(jù)存儲(chǔ)到不同的.bin文件中,同時(shí)用當(dāng)前時(shí)間加觸發(fā)次數(shù)作為文件名來(lái)區(qū)分?jǐn)?shù)據(jù),在讀數(shù)時(shí)通過(guò)文件名中的觸發(fā)次數(shù)標(biāo)識(shí)來(lái)區(qū)分?jǐn)?shù)據(jù),存盤(pán)結(jié)果如圖6 所示.
圖6 數(shù)據(jù)保存結(jié)果
為了配合下位機(jī)完成測(cè)試任務(wù),除了數(shù)據(jù)讀取、顯示和保存之外,上位機(jī)軟件需具備參數(shù)編程、狀態(tài)回讀、數(shù)據(jù)擦除等功能.為滿足不同場(chǎng)合的測(cè)試需求,盡可能提高系統(tǒng)通用性,測(cè)試系統(tǒng)的觸發(fā)電平、增益、濾波帶寬、可觸發(fā)次數(shù)等參數(shù)均可編程設(shè)置,而設(shè)置的過(guò)程需要通過(guò)與上位機(jī)軟件之間的指令交互來(lái)完成,其過(guò)程如圖7 所示.上位機(jī)軟件首先發(fā)送握手命令,下位機(jī)收到后會(huì)返回應(yīng)答指令;上位機(jī)軟件判斷握手成功后,發(fā)送參數(shù)修改命令并接著發(fā)送需要修改的參數(shù)代碼,下位機(jī)操作成功之后會(huì)將該代碼返回,上位機(jī)軟件通過(guò)返回值判斷本次操作是否成功.
圖7 參數(shù)修改過(guò)程
通過(guò)狀態(tài)回讀操作獲取下位機(jī)當(dāng)前工作參數(shù)及工作狀態(tài),上位機(jī)軟件首先發(fā)送握手指令,在收到下位機(jī)返回的應(yīng)答指令后,緊接著發(fā)送狀態(tài)回讀指令,此時(shí)下位機(jī)會(huì)返回一個(gè)6 B數(shù)組,各個(gè)字節(jié)代表當(dāng)前的工作參數(shù)值,通過(guò)將此數(shù)組對(duì)應(yīng)的不同參數(shù)顯示到界面上來(lái)反饋當(dāng)前系統(tǒng)的工作狀態(tài).
炮口沖擊波的數(shù)據(jù)處理過(guò)程包括去除趨勢(shì)項(xiàng)和確定信號(hào)能量分布并濾波兩個(gè)過(guò)程.
測(cè)試現(xiàn)場(chǎng)的沖擊震動(dòng)、高溫以及測(cè)試系統(tǒng)本身不夠理想的低頻特性,會(huì)造成實(shí)測(cè)結(jié)果中出現(xiàn)緩慢變化且周期大于記錄長(zhǎng)度的成分,將此稱(chēng)為趨勢(shì)項(xiàng).在以往的系統(tǒng)中,最常用的去除趨勢(shì)項(xiàng)的方法為基于小波變換的最小二乘法.由于此方法需要選定基函數(shù),過(guò)程繁雜且不適合去除復(fù)雜的趨勢(shì)項(xiàng).本文使用經(jīng)驗(yàn)?zāi)B(tài)分解算法去除趨勢(shì)項(xiàng),此方法無(wú)需設(shè)定基函數(shù),使用簡(jiǎn)單方便,適合去除復(fù)雜的趨勢(shì)項(xiàng).經(jīng)驗(yàn)?zāi)B(tài)分解算法的思想是將待分析信號(hào)分解為一系列本征模態(tài)函數(shù).
(1)
式中:S(t)為待分析信號(hào);Si(t)為本征模態(tài)分量;Rn(t)為殘余分量,n為模態(tài)分解的階數(shù).經(jīng)驗(yàn)?zāi)B(tài)分解算法的實(shí)現(xiàn)首先需要找出待分析信號(hào)S(t)上的所有極值點(diǎn),使用三次樣條函數(shù)對(duì)極值點(diǎn)進(jìn)行插值,得到上包絡(luò)曲線Smax(t)和下包絡(luò)曲線Smin(t),并通過(guò)二者計(jì)算出均值曲線mea(t),
(2)
之后將S(t)與mea(t)進(jìn)行相減,得到h(t),
h(t)=S(t)-mea(t).
(3)
將h(t)作為原始信號(hào),重復(fù)上述過(guò)程,得到第n次篩選的信號(hào),
hn(t)=Sn(t)-mean(t).
(4)
最終通過(guò)連續(xù)兩次計(jì)算結(jié)果之間的標(biāo)準(zhǔn)差值SD來(lái)判斷h(t)是否有本征模態(tài)分量.
(5)
式中:l為信號(hào)截止時(shí)間,當(dāng)SD在特定區(qū)間內(nèi)時(shí),可保證本征模態(tài)分量的線性和穩(wěn)定性,同時(shí)保證本征模態(tài)分量具有相應(yīng)的物理意義.式(1)中分解得到的殘余信號(hào)分量Rn(t)為單調(diào)函數(shù),其中包含了待分析信號(hào)中的最低頻成分,且其周期大于采樣信號(hào)長(zhǎng)度,因此,Rn(t)即為測(cè)試信號(hào)中的趨勢(shì)項(xiàng).去除趨勢(shì)項(xiàng)前后的沖擊波波形如圖8 和圖9 所示.
圖8 去除趨勢(shì)項(xiàng)前的沖擊波波形圖
圖9 去除趨勢(shì)項(xiàng)后的沖擊波波形圖
除了趨勢(shì)項(xiàng)外,系統(tǒng)信號(hào)中還混雜著來(lái)自外界的高溫、高壓、高沖擊、強(qiáng)磁等因素以及傳感器和電路自身引入的噪聲信號(hào),因此,需要對(duì)其進(jìn)行處理后才能得到較為純凈的炮口沖擊波信號(hào).數(shù)據(jù)處理的第一步是選取有效沖擊波信號(hào),按照相關(guān)國(guó)軍標(biāo),通常使用的炮口沖擊波作用時(shí)間為A類(lèi)作用時(shí)間,其定義為炮口沖擊波超壓從環(huán)境壓力上升到最大峰值后再第一次回到環(huán)境壓力所用的時(shí)間.因此,在數(shù)據(jù)處理階段首先需要人工判讀炮口沖擊波的作用時(shí)間,通過(guò)確定起始點(diǎn)和結(jié)束點(diǎn)為程序指明要進(jìn)行處理的數(shù)據(jù)段.
之后,需要對(duì)判讀后的有效信號(hào)進(jìn)行濾波.由于炮口沖擊波信號(hào)能量主要集中在低頻范圍內(nèi),因此,通常使用低通濾波器對(duì)其進(jìn)行濾波.對(duì)于不同的火炮和發(fā)射條件,其沖擊波信號(hào)的頻率特性也不盡相同,在濾波時(shí)沒(méi)有確定的標(biāo)準(zhǔn)可言,所選的截止頻率過(guò)高達(dá)不到預(yù)想的濾波效果,所選截止頻率過(guò)低則可能使信號(hào)產(chǎn)生畸變,影響信號(hào)分析的準(zhǔn)確性.因此,需要對(duì)采集到的炮口沖擊波信號(hào)進(jìn)行頻譜分析,確定有效信號(hào)的能量分布情況并據(jù)此設(shè)定濾波的截止頻率.首先對(duì)炮口沖擊波數(shù)據(jù)序列進(jìn)行離散傅里葉變換,得出炮口沖擊波信號(hào)的幅頻特性曲線,之后分析頻域下炮口沖擊波信號(hào)的能量分布,計(jì)算諧波分量占原信號(hào)總能量的百分比,一般取能量百分比大于等于95%的頻帶為信號(hào)的有效頻帶,由此得出低通濾波的截止頻率,然后對(duì)炮口沖擊波信號(hào)進(jìn)行濾波處理[12].圖10 為實(shí)測(cè)炮口沖擊波濾波前后的波形對(duì)比圖.
圖10 濾波前后沖擊波波形對(duì)比圖
軟件運(yùn)行的可靠性主要從以下兩個(gè)方面進(jìn)行保障:
1)程序結(jié)構(gòu)的合理性設(shè)計(jì)
在軟件設(shè)計(jì)過(guò)程中,采用模塊化的設(shè)計(jì)方法,將軟件設(shè)計(jì)為通信模塊、數(shù)據(jù)管理模塊、控制模塊3個(gè)部分,各模塊之間在功能上相互獨(dú)立互不干擾,各個(gè)模塊按照由上而下的層次進(jìn)行設(shè)計(jì),各個(gè)模塊中的程序分支相互獨(dú)立,最大程度得保證了軟件運(yùn)行的穩(wěn)定.
2)錯(cuò)誤檢查機(jī)制
程序各個(gè)部位都設(shè)有監(jiān)測(cè)點(diǎn),等待錯(cuò)誤征兆的出現(xiàn).如USB讀寫(xiě)程序中設(shè)有判斷讀寫(xiě)字節(jié)數(shù)與預(yù)期讀寫(xiě)字節(jié)數(shù)是否相符的監(jiān)測(cè)程序,如發(fā)生錯(cuò)誤會(huì)及時(shí)反饋給用戶(hù).同時(shí),各個(gè)程序分支運(yùn)行設(shè)有“看門(mén)狗”,當(dāng)程序運(yùn)行時(shí)間超過(guò)預(yù)定時(shí)間,則進(jìn)行超時(shí)異常處理,跳出當(dāng)前程序分支,并匯報(bào)跳出結(jié)果.
設(shè)計(jì)完成后的上位機(jī)軟件主界面如圖11 所示.界面中心為曲線顯示區(qū),下方依次為曲線控制區(qū)、功能控制區(qū)和坐標(biāo)顯示區(qū).
圖11 上位機(jī)軟件主界面
參數(shù)編程功能通過(guò)選項(xiàng)卡的形式將觸發(fā)電平、增益倍數(shù)、濾波帶寬、可觸發(fā)次數(shù)、負(fù)延時(shí)長(zhǎng)度這5個(gè)參數(shù)放置在一個(gè)對(duì)話窗口中并相互獨(dú)立,在需要編程更改系統(tǒng)參數(shù)時(shí)只需選中對(duì)應(yīng)的選項(xiàng)卡和要修改的參數(shù)值即可.軟件與下位機(jī)的通信方式可在參數(shù)編程界面進(jìn)行選擇.
下位機(jī)狀態(tài)同樣也可通過(guò)USB和ZigBee兩種通信方式進(jìn)行讀取.系統(tǒng)的觸發(fā)電平等各項(xiàng)參數(shù)和已觸發(fā)次數(shù)均會(huì)在界面中進(jìn)行顯示,在試驗(yàn)過(guò)程中可通過(guò)這種方式確認(rèn)下位機(jī)工作是否正常.圖12 為經(jīng)過(guò)參數(shù)編程并觸發(fā)兩次后,通過(guò)ZigBee通信方式獲取到的下位機(jī)狀態(tài),各項(xiàng)參數(shù)與之前的編程值相符,已觸發(fā)次數(shù)顯示正確.
圖12 狀態(tài)讀取窗口
軟件可通過(guò)勾選相應(yīng)的觸發(fā)次數(shù)復(fù)選框向下位機(jī)發(fā)送相應(yīng)的觸發(fā)次數(shù)讀取指令,實(shí)現(xiàn)對(duì)部分?jǐn)?shù)據(jù)的讀取,也可以一次性讀取全部觸發(fā)數(shù)據(jù).系統(tǒng)經(jīng)過(guò)兩次觸發(fā)并通過(guò)上位機(jī)軟件讀取后的測(cè)試曲線如圖11 所示.
本文基于QT平臺(tái)為存儲(chǔ)式炮口沖擊波測(cè)試系統(tǒng)設(shè)計(jì)了上位機(jī)軟件.針對(duì)下位機(jī)的測(cè)試功能需求,為軟件設(shè)計(jì)了數(shù)據(jù)讀取、參數(shù)編程、數(shù)據(jù)擦除等功能.針對(duì)所讀取的不同觸發(fā)次數(shù)的測(cè)試數(shù)據(jù),添加觸發(fā)次數(shù)標(biāo)記后存盤(pán),便于再次回讀數(shù)據(jù).在數(shù)據(jù)處理方面,為系統(tǒng)添加頻譜分析和低通濾波功能,并使用經(jīng)驗(yàn)?zāi)B(tài)分解算法去除測(cè)試過(guò)程中引入的趨勢(shì)項(xiàng).經(jīng)測(cè)試,本文設(shè)計(jì)的軟件功能全面,操作簡(jiǎn)易,具有良好的實(shí)用性和穩(wěn)定性.