999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于VC++技術的虛擬示波器的軟件設計?

2017-10-23 07:40:30趙云冬
艦船電子工程 2017年9期
關鍵詞:區域信號

趙云冬

(昆明船舶設備研究試驗中心 昆明 650051)

基于VC++技術的虛擬示波器的軟件設計?

趙云冬

(昆明船舶設備研究試驗中心 昆明 650051)

相較于傳統儀器,虛擬儀器功能更強、性價比更高、可擴展性更好,目前已被廣泛應用于各個測量、測試行業。論文完成了一種對通電線圈的電磁輻射信號顯示分析,為某型魚雷的調試檢查提供可視化定量分析工具。軟件采用面向對象的設計思想來編寫,按照功能劃分為5個模塊:數據采集模塊、數據存儲模塊、界面控制及顯示模塊、波形回放模塊、波形測量模塊,使用VC++基于對話框的應用程序框架完成了這5個模塊的詳細設計和實現;通過實際調試,該虛擬示波器操作簡單、測量準確,能滿足使用要求,同時該示波器具有良好的可擴展性,完全可根據用戶需求實現自定義儀器功能。

虛擬示波器;VC++;傅里葉變換;MFC

ClassNum ber TP311.5

1 引言

20世紀80年代提出了虛擬儀器的概念,虛擬儀器以其功能強大、價格低廉、用戶可自定義儀器功能等優勢得到了迅速發展[1]。虛擬示波器是虛擬儀器的典型應用,是一種圖形顯示設備,通常將外部采集到的數據顯示出對應波形,并對波形進行存儲和分析。具體功能可根據用戶需求通過安裝在上位機上的開發環境自行編寫內部源程序、搭建UI界面從而形成完整的軟件系統。

本文針對某型魚雷產品軟件調試臺的需求,結合VC++良好的面向對象特性,基于VS 2010平臺下的MFC對話框應用程序開發設計了一個虛擬示波器,完成了將采集到的數據實時顯示、存儲、波形回放,數據分析等功能,充分利用了虛擬儀器用戶可自定義儀器功能的特點,實現了對某型魚雷產品的控制和調試。

2 軟件設計概要

通過需求分析,如圖1所示,本軟件主要由5個模塊構成:數據采集、數據存儲、界面控制及顯示、波形回放、波形測量。各模塊分別完成如下功能:

1)數據采集模塊:將外部采集卡采集的被測信號通過以太網(UDP協議)傳輸至上位機。

2)數據存儲模塊:將傳輸至上位機的數據進行保存,便于回放和查看。

3)界面控制及顯示模塊:根據用戶需求設計人機界面,控制程序執行步驟,同時完成波形顯示功能。

4)波形回放模塊:實現數據的回放,波形的顯示、放大、縮小功能。

5)波形測量模塊:完成波形上感興趣點的幅值測量、頻譜分析。

圖1 虛擬示波器模塊劃分

3 軟件各模塊設計與實現

3.1 數據采集模塊

數據采集卡以10K的采樣率采集3個通道的數據,采集卡每幀保存300個數據點,將采集到的點通過UDP協議傳至上位機,上位機采用多線程監聽的方式進行數據監聽,將每次監聽到的數據進行10次拼接后得到單通道1000個點后進行波形繪制。具體實現方式如下:

首先定義計數器變量:UDPAcceptDataCount,并將其初始化為0,以后每接收到1幀數據時該變量加1,直至該變量加至10時,單屏顯示數據拼接完畢,同時將該變量恢復為0,最后將拼接好的數據傳至WM_PAINT消息進行波形繪制。

3.2 數據存儲模塊

多線程技術是指當一個線程等待I/O完成或需要大量運算時,另一個線程可以繼續其他處理,使得進程總處于運行狀態,隨時進行響應,從而提高系統的響應效率[2]。本軟件利用多線程技術將程序控制和數據存儲進行分離,線程間利用自定義消息進行通訊,主線程運行的同時,利用線程監聽UDP傳輸的數據,進而將接收到的數據寫入文件。具體實現過程如下:

首先定義一個數組recvBuf[]用于存儲UDP上傳的數據,每接收到1幀數據后發送消息::Post-Message(hwnd,WM_RECVDATA,0,(LPARAM)recvBuf)至 WM_RECVDATA()函數進行響應,在WM_RECVDATA()函數中利用fopen打開文件后,利用fwrite函數向文件寫入數據完成數據存儲。

3.3 界面控制及波形顯示模塊

如圖2所示為顯控界面,該界面主要由三大區域組成:左半部分為波形顯示區域、右半部分為信息顯示區域、底部為按鈕控制區域。其中波形顯示區域又分為原始波形顯示區域和頻譜顯示區域;信息顯示區域包括通道選擇、縱軸最值、調試流程信息、日志回放信息;底部按鈕控制區域共7個按鈕共同完成軟件的控制和調試。

圖2 顯控界面

3.4 波形回放模塊

1)數據讀取

將采樣率、通道數等基本參數設定后,利用fread()函數進行數據的讀取,讀取數據時需解決以下兩個問題:

(1)采樣率、通道數、幀數等參數在源程序中多處使用,當這些參數發生變化時,如何快速完成在整個程序中的修改;

(2)當讀取的數據文件較大時,如何實現波形快速、完整的繪制。

針對問題1,本文采用配置文件(INI:Initialization File)來解決。INI文件是Windows的系統配置文件所采用的存儲格式,統管Windows的各項配置,一般用戶就用Windows提供的各項圖形化管理界面就可實現相同的配置了[3]。在程序設計過程中經常需要對一些參數進行配置,且配置完成后需下次啟動時仍然有效,這時INI文件就是一個有效可行的辦法,也就是在Windows初始化文件中保存一些我們的設置,然后在程序啟動時從INI文件中讀取相關配置。

INI文件由節、鍵、值組成。圖3為本軟件的INI文件,其中中括號[]內為節,節下由鍵和值構成。設置完配置文件后在初始化函數中讀取INI文件:

::GetPrivateProfileString(_T(“CommonParameter”),keyname,NULL,key_value.GetBuffer(128),128,_T(“E:\VS工程\20170410-2101\CYJ5812-2\InputParameter.ini”));

key_value.ReleaseBuffer();

SampleRate=atof(key_value);

圖3 INI文件

針對問題2,當讀取的數據文件較大時(如Gbit以上),直接讀取會占用很大的內存,造成波形繪制緩慢,這時可人為將信號分幀顯示,例如前1幀顯示信號前一萬個點,下一幀顯示后一萬個點,以此

程序根據文件大小自動選擇降采樣率后,將讀取的數據傳至WM_PAINT消息繪制波形,從而實現了任何數據大小的文件均可快速、完整地繪制波形。

2)坐標軸的智能繪制

坐標軸的智能繪制實際上是實現坐標軸根據讀取不同文件自動調整橫縱坐標最值。以圖4(a)原始數據波形顯示區域橫軸為例:首選根據波形顯示區域的大小(本文設定為900*280像素),在頭文件中定義橫軸最大、最小像素值、等分數,然后將對應等分點所在的屏幕像素在OnPaint()函數中顯示出來。具體實現如下:

X_PixelMax=980;X_PixelMin=80;X_DivisionNum=6;

void CReplyDlg::OnPaint()

CPaintDC dc(this);

for(int i=0;i<X_DivisionNum+1;i++)

str.Format(“%。2fs”,X_t*i/X_DivisionNum);

dc.TextOut(X_PixelMin+(X1_PixelMax-X_PixelMin)*i/X_DivisionNum,Y_PixelMax,str);

}}

以相同的方式將縱坐標繪制完成后便實現了坐標軸根據讀取文件的不同自動調整幅值、智能繪制。

3)波形繪制

示波器最基本的功能是實現波形的繪制,即實現數據的圖形化輸出[4]。在實現波形快速、完整繪制的基礎上,為方便觀測局部波形,波形的縮放功類推將信號分為不同幀數進行顯示。分幀顯示可有效解決波形繪制緩慢的問題,但也引入新的問題:單屏只能顯示1幀,無法看清數據全貌,導致很難找到信號所在幀。為了能快速、完整地回放波形,考慮到采集卡采樣率較高而波形顯示區域僅有900*280像素,當回放數據量較大的文件時,多個數據點落在了屏幕上的同一像素點上,因此可采用抽點降采樣的方式繪制波形,這樣不僅能看到波形全貌,還能實現快速繪制。本文降采樣的策略如下:首先使用fread()函數讀出文件長度File_Len,然后計算出單通道點數:Point_Num=File_Len(文件長度)/DataChannelNum(通道數);最后根據單通道點數Point_Num與波形顯示區域寬度的比值R決定降采樣率:能必不可少,在實現波形縮放功能前,需先了解VC++繪圖的原理。

VC++的繪圖原理是基于像素點的繪圖方式[12],例如一組數據data[N-1]共N個元素,最大值為Y_MaxValue;欲將這組數據顯示在起點為(5,10)、大小為100*50像素的矩形框內,其實現過程是將數據點對應到顯示區域的像素值上,然后利用MFC的CCientDC類的MoveTo()、LineTo()函數實現畫線功能。具體實現如下:

For(inti=0;i<N;i++)

m_Point1.x=100/N*i+5;

m_Point1.y=50-50/Y_MaxValue*data[i]+10;

m_Point2.x=100/N*(i+1)+5;

m_Point2.y=50-50/Y_MaxValue*data[i+1]+10;

CClientDC dc(this);

dc.MoveTo(m_Point1);

dc.LineTo(m_Point2);

如圖4(a)為應用上述方法繪制的一段時長38.63s的原始數據波形圖。

(1)橫軸放大

圖4(a)中,在[0,6.44]和[25.75,32.19]兩個時間段內檢測到了有效信號,但想了解信號的具體細節則需對信號進行局部放大,即實現波形橫軸放大功能。

本文實現橫軸放大的方式是:使用鼠標拖動選定放大區域。根據鼠標按下和彈起時的像素點找到對應波形數據起始點和結束點的索引值,根據索引值重繪波形實現波形的局部放大。局部放大的關鍵點是找準起始點和結束點的索引值,尋找索引值時需要根據讀取的數據文件長度Len與波形顯示區域橫軸最大值X_PixelMax的比值Zoom In_Ratio分情況處理:

Zoom In_Ratio≥1表明數據點數不小于繪圖區域像素,繪制時會有多個數據點落在同一像素上;小于1則說明數據點數少于繪圖區域像素,繪制時某些像素上沒有像素點。

當Zoom In_Ratio≥1時,多個點落在同一像素上,拖動鼠標放大時無法確定該像素點所對應的準確點,為解決上述問題,本文定義了兩個與繪圖區域橫軸最大像素值X_PixelMax同樣大的數組,一個用于存放某一像素上首次出現的數據點,一個用于存放該像素上最后出現的數據點。這樣,當拖動鼠標時,將鼠標按下OnLButtonDown()函數獲取像素點對應到數組中首次出現的數據點作為起始點索引值,將鼠標彈起OnLButtonUp()函數獲取像素點對應到數組中最后一次出現的數據點作為結束點索引值,然后根據找到的索引值對應到原始數據文件中重繪波形實現波形的局部放大。

當Zoom In_Ratio<1時,某些像素點上沒有數據點,拖動鼠標放大時存在該像素點無法找到對應數據點的問題,為解決上述問題,本文采用插空補點方式解決。具體實現方式是:計算出某一數據點對應的像素值后,比較該點對應的像素值與上一個點對應的像素值是否一樣,若不一樣,用該點對應的像素值減去上一點對應的像素值求出中間空出的點數,然后用該點補全空出點數。

如圖4(b)所示為圖4(a)原始數據的局部放大圖,由圖可知上述方法實現了將[0,6.44]時間段內第一次出現信號值的波形進行局部放大,局部放大后的波形能清晰地知道信號類型、幅值、頻率等詳細信息。

(2)縱軸縮放

縱軸的縮放相較于橫軸要簡單的多,具體實現只需利用UpdateData()函數將用戶輸入縱軸編輯框的值賦給波形最大值Y_MaxValue即可。當輸入值小于Y_MaxValue時,Y_MaxValue默認不變;當輸入值大于Y_MaxValue時,按照輸入值更新Y_MaxValue后重繪波形即可。如圖4(c)所示為用戶在縱軸編輯框內輸入8000.00后對圖4(a)的縮放結果。

3.5 波形測量模塊

根據用戶需求,調試臺所需測量的信息包括:信號強度、持續時間、信號頻率。本文中通過雙擊鼠標左鍵可測出雙擊處波形的橫縱坐標,縱坐標即為信號的強度;信號持續時間通過雙擊信號起始和結束處的橫坐標之差得到信號持續時間;信號頻率通過將信號傅里葉變換后求出頻譜,如圖2中左下即為信號的頻譜圖。

通過鼠標左鍵雙擊波形區域得到波形坐標的實現方法如下:首先通過WM_LBUTTONDBLCLK消息捕獲雙擊處的像素值,然后找到該像素值對應的原始數據中的點,將其顯示出來即可。如圖2波形顯示區域中深色豎線為根據用戶雙擊處繪制的豎線,豎線右側括號內為對應波形上的坐標值,這樣用戶想知道波形某點坐標值只需雙擊該處即可得到對應坐標。

圖4 波形繪制

4 結語

本文設計了一個基于VC++的虛擬示波器軟件,該軟件可用于某型魚雷產品調試檢查控制,用于線圈輻射信號顯示及分析波形參數。本文采用面向對象的方法對軟件功能進行了劃分及模塊化設計,經調試表明該虛擬示波器操作簡單、運行良好,實現了數據采集、數據存儲、波形顯示、參數測量等功能,同時該軟件功能擴展性良好,用戶可根據需求自定義儀器功能,具有廣泛的應用前景。

[1]李同立.基于VC++的虛擬示波器軟件設計[J].軟件導刊,2013,11:024.

[2]鄭國章,王盛學,郝鐵生.基于多線程的測控平臺虛擬示波器設計[J].機械管理開發,2007(5):68-69.

[3]孫鑫.VC++深入詳解[M].北京:電子工業出版社,2012:1-767

[4]趙雷廷,吳佐民,全恒立等.基于以太網的虛擬示波器設計[J].電子設計工程,2010(11):4-7.

[5]邱文濤.虛擬示波器的設計與實現[D].南昌:南昌航空大學,2015:1-76.

[6]陶登攀.虛擬示波器的設計與實現[D].重慶:重慶大學,2013:1-57

[7]蔡小偉,康寶泉,張開燦.便攜式WiFi虛擬示波器設計[J].赤峰學院學報:自然科學版,2016,32(11):29-31.

[8]陳冬冬.淺析虛擬示波器的設計與實現[J].數字技術與應用,2016(2):198.

[9]張逸成,梁海泉,等.一種虛擬示波器的設計[J].電子測量與儀器學報,2007,2(2):104.

[10]王秀芳,郝建勛.虛擬示波器的設計與實現[J].儀器儀表學報,2005,26(8):253-254.

[11]馮靜亞,于強,呂朝暉,等.虛擬示波器的軟件設計與應用[J].計算機工程與設計,2007,28(1):211-213.

[12]安金鑫,王軍.基于VC++和LabWindows/CVI的多通道虛擬示波器設計[J].南開大學學報:自然科學版,2013(1):6-11.

[13]張燕霞,田裕鵬.基于VC和LabVIEW控件的虛擬儀器設計[J].儀器儀表與分析監測,2004(4):15-17.

Software Design of VirtualOscilloscope Based on VC++

ZHAO Yundong
(Kunming Shipborne EquipmentResearch and TestCenter,Kunming 650051)

Compared with traditional instruments,virtual instrument ismore powerful,more cost-effective andmore scalable.Ithas beenwidely used in variousmeasurementand testing fields.Avirtualoscilloscope is designed to display and analysis the electrified-coil's electromagnetic radiation signal in the paper.The virtual oscilloscope is used in a visual quantitative analysis tool which can debug and check ofa torpedo.Object-oriented design ideas is used towrite the system software programs,The system is divided into fivemodules:data collectionmodule,data storagemodule,interface control and displaymodule,waveform playback module,waveform measurementmodule.The system based on VC++dialog application framework to complete the detailed design of the 5modules.According to debug,the virtualoscilloscope is easy to operate,accurate tomeasure,satisfies user's requirement.At the same time,the oscilloscope's function can be fully realized according to the user's requirement,Itshows that the instrumenthas good extensibility.

virtualoscilloscope,VC++,Fourier transform,MFC

TP311.5

10.3969/j.issn.1672-9730.2017.09.015

2017年3月9日,

2017年4月25日

趙云冬,男,碩士研究生,助理工程師,研究方向:軟件設計開發。

猜你喜歡
區域信號
永久基本農田集中區域“禁廢”
今日農業(2021年9期)2021-11-26 07:41:24
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
分割區域
完形填空二則
孩子停止長個的信號
關于四色猜想
分區域
基于LabVIEW的力加載信號采集與PID控制
一種基于極大似然估計的信號盲抽取算法
基于嚴重區域的多PCC點暫降頻次估計
電測與儀表(2015年5期)2015-04-09 11:30:52
主站蜘蛛池模板: 亚洲AV无码久久天堂| 久久永久视频| 99久久亚洲精品影院| 日韩成人在线视频| 四虎国产精品永久一区| 欧美不卡二区| 国产91熟女高潮一区二区| 首页亚洲国产丝袜长腿综合| 欧美在线视频不卡| 伦伦影院精品一区| 91久久精品日日躁夜夜躁欧美| 在线五月婷婷| 玖玖精品在线| 特黄日韩免费一区二区三区| 亚洲综合亚洲国产尤物| 亚洲国产成人麻豆精品| 91亚洲精选| 国产美女精品在线| 国产乱视频网站| 欧美日本视频在线观看| 亚洲国产成人精品一二区| 国产永久无码观看在线| 国产剧情国内精品原创| 人妻21p大胆| 欧美精品亚洲日韩a| 青青青国产在线播放| 六月婷婷激情综合| 91国内视频在线观看| 成人在线观看不卡| a级毛片免费在线观看| 日本精品视频一区二区| 亚洲欧美极品| a毛片在线| 久久国产精品娇妻素人| 国产手机在线小视频免费观看 | 欧美激情,国产精品| 亚洲无线一二三四区男男| 日韩精品少妇无码受不了| 久久久无码人妻精品无码| 亚洲第一福利视频导航| 亚洲成人黄色在线| 国产国产人成免费视频77777| 2022精品国偷自产免费观看| 蜜芽国产尤物av尤物在线看| 毛片久久久| 国产极品美女在线| 美女一区二区在线观看| 天天视频在线91频| 午夜综合网| 国产丝袜第一页| 秋霞一区二区三区| 日本精品视频一区二区| 香蕉久人久人青草青草| 国产在线自揄拍揄视频网站| 亚洲综合精品香蕉久久网| 欧洲极品无码一区二区三区| 国产午夜一级毛片| 久久国产亚洲偷自| 77777亚洲午夜久久多人| 久草性视频| 久久国产亚洲欧美日韩精品| 99这里只有精品免费视频| 亚洲AV无码乱码在线观看代蜜桃 | 在线观看免费黄色网址| 国产精品无码久久久久久| 欧美精品aⅴ在线视频| 久久中文无码精品| 亚洲欧洲综合| 亚洲成在线观看 | 亚洲AV无码乱码在线观看裸奔| 国产福利免费在线观看| 精品亚洲欧美中文字幕在线看| 国产精品yjizz视频网一二区| 亚洲精品波多野结衣| 2020国产在线视精品在| 亚洲精品国产精品乱码不卞| 亚洲v日韩v欧美在线观看| 中文字幕首页系列人妻| 青青青伊人色综合久久| 亚洲第一黄片大全| 一本色道久久88| 狠狠色综合网|