免费看男阳茎进女阳道视频

                        24小時論文定制熱線

                        咨詢電話

                        ASP.NETVC++MySQLPHP安卓JSPLinuxJava機械VBASP單片機模具汽車工程畢業設計Flash
                        您當前的位置:論文定制 > 畢業設計論文 >
                        快速導航
                        畢業論文定制
                        關于我們
                        我們是一家專業提供高質量代做畢業設計的網站。2002年成立至今為眾多客戶提供大量畢業設計、論文定制等服務,贏得眾多客戶好評,因為專注,所以專業。寫作老師大部分由全國211/958等高校的博士及碩士生設計,執筆,目前已為5000余位客戶解決了論文寫作的難題。 秉承以用戶為中心,為用戶創造價值的理念,我站擁有無縫對接的售后服務體系,代做畢業設計完成后有專業的老師進行一對一修改與完善,對有答辯需求的同學進行一對一的輔導,為你順利畢業保駕護航
                        代做畢業設計
                        常見問題

                        基于VC++的虛擬示波器系統開發

                        添加時間:2018/06/30
                        20世紀80年代提出了虛擬儀器的概念, 虛擬儀器以其功能強大、價格低廉、用戶可自定義儀器功能等優勢得到了迅速發展[1]。虛擬示波器是虛擬儀器的典型應用, 是一種圖形顯示設備, 通常將外部采集到的數據顯示出對應波形, 并對波形進行存儲和分析。
                          以下為本篇論文正文:

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

                          關鍵詞:虛擬示波器; VC++; 傅里葉變換; MFC;

                          Abstract:Compared with traditional instruments, virtual instrument is more powerful, more cost-effective and more scalable.It has been widely used in various measurement and testing fields. A virtual oscilloscope is designed to display and analysis the elec-trified-coils electromagnetic radiation signal in the paper. The virtual oscilloscope is used in a visual quantitative analysis toolwhich can debug and check of a torpedo. Object-oriented design ideas is used to write the system software programs, The system isdivided into five modules:data collection module, data storage module, interface control and display module, waveform playbackmodule, waveform measurement module. The system based on VC++ dialog application framework to complete the detailed design ofthe 5 modules. According to debug, the virtual oscilloscope is easy to operate, accurate to measure, satisfies users requirement. Atthe same time, the oscilloscopes function can be fully realized according to the users requirement, It shows that the instrument hasgood extensibility.

                          Keyword:virtual oscilloscope; VC++; Fourier transform; MFC;

                          1、引言

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

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

                          2、軟件設計概要

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

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

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

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

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

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

                        圖1 虛擬示波器模塊劃分
                        圖1 虛擬示波器模塊劃分

                          3、軟件各模塊設計與實現

                          3.1、數據采集模塊

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

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

                          3.2、數據存儲模塊

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

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

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

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

                        圖2 顯控界面
                        圖2 顯控界面

                          3.4、波形回放模塊

                          1) 數據讀取

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

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

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

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

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

                        初始化函數中讀取INI文件

                        圖3 INI文件
                        圖3 INI文件

                          針對問題2, 當讀取的數據文件較大時 (如Gbit以上) , 直接讀取會占用很大的內存, 造成波形繪制緩慢, 這時可人為將信號分幀顯示, 例如前1幀顯示信號前一萬個點, 下一幀顯示后一萬個點, 以此類推將信號分為不同幀數進行顯示。分幀顯示可有效解決波形繪制緩慢的問題, 但也引入新的問題:單屏只能顯示1幀, 無法看清數據全貌, 導致很難找到信號所在幀。為了能快速、完整地回放波形, 考慮到采集卡采樣率較高而波形顯示區域僅有900*280像素, 當回放數據量較大的文件時, 多個數據點落在了屏幕上的同一像素點上, 因此可采用抽點降采樣的方式繪制波形, 這樣不僅能看到波形全貌, 還能實現快速繪制。本文降采樣的策略如下:首先使用fread () 函數讀出文件長度File_Len, 然后計算出單通道點數:Point_Num=File_Len (文件長度) /Data Channel Num (通道數) ;最后根據單通道點數Point_Num與波形顯示區域寬度的比值R決定降采樣率:

                        單通道點數Point_Num與波形顯示區域寬度的比值

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

                          2) 坐標軸的智能繪制

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

                        屏幕像素在On Paint () 函數中顯示

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

                          3) 波形繪制

                          示波器最基本的功能是實現波形的繪制, 即實現數據的圖形化輸出[4]。在實現波形快速、完整繪制的基礎上, 為方便觀測局部波形, 波形的縮放功能必不可少, 在實現波形縮放功能前, 需先了解VC++繪圖的原理。

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

                        函數實現畫線功能

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

                          (1) 橫軸放大

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

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

                        最大值X_Pixel Max的比值Zoom In_Ratio分情況處理

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

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

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

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

                          (2) 縱軸縮放

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

                          3.5、波形測量模塊

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

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

                        圖4 波形繪制
                        圖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]蔡小偉, 康寶泉, 張開燦.便攜式Wi Fi虛擬示波器設計[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++和Lab Windows/CVI的多通道虛擬示波器設計[J].南開大學學報:自然科學版, 2013 (1) :6-11.
                          [13]張燕霞, 田裕鵬.基于VC和Lab VIEW控件的虛擬儀器設計[J].儀器儀表與分析監測, 2004 (4) :15-17.

                          相關內容
                          好優論文定制中心主要為您提供代做畢業設計及各專業畢業論文寫作輔導服務。
                          所有論文、資料均源于網上的共享資源以及一些期刊雜志,所有論文僅免費供網友間相互學習交流之用,請特別注意勿做其他非法用途。
                          如有侵犯您的版權或其他有損您利益的行為,請聯系指出,論文定制中心會立即進行改正或刪除有關內容!
                          免费看男阳茎进女阳道视频