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