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

基于WPF的虛擬示波器設計

2018-07-12 12:26:02何海龍劉艷行
火控雷達技術 2018年2期

張 博 李 黎 何海龍 劉艷行

(西安電子工程研究所 西安 710100)

0 引言

自20世紀80年代后期以來,PC機的性能得到極大提升,針對測試分析的通用軟件的需求不斷增長,使得虛擬儀器[1]應運而生。測試儀器的發展經歷了,第一代模擬式測試儀器、第二代分立元件式測試儀器、第三代數字式測試儀器和第四代智能化測試儀器,虛擬測試儀器即將成為最新一代的測試儀器。借助于通用的模擬量或數字量輸入輸出接口,進行程序編寫,并采用成熟的數學模型來實現對信號的測量、控制、變換、分析、顯示、輸出等功能。虛擬儀器不僅開發周期短,而且開發費用低廉。隨著硬件載體的不斷提升和新算法的引入,虛擬儀器相比于傳統測試儀器也可以方便地更新和擴展,并具有很強的重用性和可配置性被廣泛應用于各個測試領域。虛擬示波器是虛擬儀器基礎平臺的重要組成部分,是技術發展的必然,也是客觀要求,具有重要的工程價值。

1 設計要求

虛擬儀器的功能可以在很多硬件平臺下通過編程實現。PC平臺因其應用廣泛而且兼容性強,逐漸成為了虛擬儀器的主流平臺。vxWorks和unix系統因其實時性好被廣泛應用在試驗環境。而Windows系統作為非實時性系統很少被用來設計高速虛擬測試儀器。本文所述虛擬示波器軟件通過合理的線程運用和精密的定時器設計在PC平臺Windows系統下完成了高速數據錄取式示波器的設計。本文示波器軟件通過串口通信對數據進行實時錄取,通過PCOMM串口庫的應用,達到了230400bps等常用高速串口的通信速率。并對傳統示波器的各項分析功能進行了模擬實現。并通過WPF實現了美觀的界面設計和流暢的圖顯效果。

虛擬示波器作為圖顯軟件,針對數據曲線圖的動態繪制可分為時間驅動和數據驅動兩類。時間驅動繪圖是指將數據與時間對應,以時間為橫軸,對數據進行時間采樣來描點繪圖,能反應數據隨時間的變化情況。數據驅動繪圖(即逐幀顯示)是指將數據直接和圖形對應,以數據幀為橫軸,對緩沖區里的每一幀數據都進行描點繪圖,來實現對高精度要求產品的嚴格監控。本文采用逐幀顯示的數據驅動繪圖方式,要求錄取數據的完整性和繪圖的高速度,在保證串口不丟數據的同時,數據處理層必須快速即時地完成對接收數據的處理并合理地配合UI層的數據調度完成逐幀顯示。

另外,本文虛擬示波器軟件的動態曲線繪圖方式也區別于傳統時間驅動的繪圖方式,是采用同示波器儀器一致的逐屏刷新顯示模式,不僅可以表現更多的數據信息,而且更契合硬件工程師的儀表使用習慣。對實時數據也提供文件記錄并保存,可以精確地對應每一幀的數據情況。對曲線圖也可以截圖保存,可以直觀的保留數據信息。同時引入終端通信功能,可以通過虛擬示波器軟件對被測系統發送命令,實現簡單的模式控制和參數修改功能。

2 虛擬示波器軟件設計

本文所述虛擬示波器軟件設計主要分為三個部分:數據錄取及實時指令通信,曲線圖逐幀顯示,數據分析保存。程序的編寫在WPF開發環境下完成。

2.1 WPF開發環境

Windows呈現基礎(Windows Presentation Foundation,WPF)[2]是微軟新一代圖形系統,運用在.NET Framework 3.0以上版本,為用戶界面、2D/3D圖像、文檔和媒體提供了統一的描述和操作方法,同時提升了處理速度。得益于WPF強大的圖形向量渲染引擎,程序開發人員可以設計出效果豐富的控件系統和靈活美觀的程序應用界面。同時WPF采用DirectX引擎技術,并且支持GPU硬件加速,相比于傳統的GDI+/GDI圖形系統在性能上得到了極大提升。

傳統偏重于利用CPU來進行數據與圖形處理的技術,由于占用過多CPU資源,影響CPU的運算速度。但是隨著現代計算機顯卡等顯示技術的不斷提升。WPF技術充分利用計算機的顯卡功能,讓出了更多的CPU空間來進行數據處理,這樣大大提升了CPU運算速度,保證了軟件運行的流程與處理速度。

WPF使用XAML語言作為界面結構語言,后臺使用C#高級語言,擁有多種編程模式,適用于多種數據訪問接口,方便與第三方軟件集成。

2.2 數據錄取

虛擬示波器軟件的串口端口,可以使用.NET基本類,System.IO.ports命令空間中的SerialPort類來實現。SerialPort類是在C#里被很好封裝的串口類,波特率上限115200bps,適合試驗室使用。也可以使用成熟的工業級串口工具PComm Lite。配合Moxa模塊波特率上限可達921600bps,并且在多串口模式下也可以高速穩定的工作。具體使用可下載并引用pcomm.dll并編寫接口類可以在WPF下,使用PComm Lite內的串口函數,完成對串口緩沖區數據的合理規劃和高效管理。

PingPong緩沖機制[3]是一種數據緩存手段,通過PingPong操作可以提高數據傳輸效率。在兩個功能模塊順序地處理數據時,如果上一級功能模塊所產生的新數據不能馬上被下一級功能模塊處理完成而消費掉,為了保證每幀數據都被處理,上一級就必須等待下一級完成數據消費才可以產生并發送新的數據。然而在串口通信中,為了保證高速的數據率,上一級的數據產生不會等待下一級復雜的數據處理以及耗時的UI更新,這樣就會嚴重影響虛擬示波器軟件的數據錄取性能,導致數據丟失現象發生,無法保證對待測設備完整精確的監控。使用PingPong緩沖機制可以不去等待下一級處理結束,而是先將上一級產生的未處理數據存在Ping路的緩沖區中,等存滿后通知下一級開始對Ping緩沖區進行消費。在Ping緩沖區被消費期間,上一級產生的未處理數據轉到Pong緩沖區存放,當Pong緩沖區存滿時,Ping緩沖區已經被消費完成并準備好保存新數據了,此時下一級切換到Pong緩沖區消耗,而Ping緩沖區再打開并開始存儲。這種雙緩沖機制,可以使上級數據不間斷地產生,并且都能得到處理,從而提高了處理效率,保證了在高速串口通信情況下,虛擬示波器軟件也依然保持優秀的數據采集完整性。

2.3 高精度定時器實現

在大多數情況下,傳統示波器儀表只是單方面的信號采樣。對于工作在不同工作模式下的信號源,一般可以外部切換好了之后再連接示波器進行監測。然而作為本身就占有一個串口的虛擬示波器,如果再通過通過外部改變待測設備的工作狀態,會產生很多不便。于是在實際工作情況下,本文所述虛擬示波器軟件可以同時通過串口和被測硬件通信,控制待測工作模式的切換,并通過配置文件的修改實現通信協議的靈活切換。

本文所述虛擬示波器軟件被用于DSP信號的監測,要求軟件5 ms為周期不間斷發送工作模式命令和參考信號才能實現對DSP不同工作模式的切換監測。這對以Windows為平臺的虛擬示波器軟件設計是一個難點。NET Framework支持四種定時器,然而精密度都不準(最低只能達到15 ms),無法滿足高速設計要求。Windows不是實時操作系統,所以在不涉及內核驅動層面的條件下,想要實現高精密定時器,需要使用等待機制和計時工具兩種基礎功能。這里不討論多媒體定時器[4]的原因,是在WPF下的多媒體定時器依托事件機制,而在多線程應用中,事件由于低的優先級,經常會受到干擾,影響定時器精度。

等待機制有兩種分為自旋等待和阻塞等待。自旋等待就是讓CPU以空轉的方式來完成時間消耗,雖然使用了較多CPU時間,但是時間的精度高。阻塞等待就是所處線程阻塞,在等待規定時間后再由操作系統控制返回運行狀態。雖然阻塞不占CPU,但是需要操作系統控制執行,時間無法控制。

計時機制在WPF下最適合的就是Stopwatch類。精度取決于硬件的主頻,精度可以高達幾十ns。

本文虛擬示波器軟件使用自旋等待機制配合Stopwatch計時,實現了高精度的定時器,偽代碼如下:

var計時開始時刻 = 目前時刻;

while((目前時刻-計時開始時刻)<規定延遲時長)

{

自旋;

}

改成實際代碼如下:

void Spin(Stopwatch timer, int duration )

{

var current = timer.ElapsedMilliseconds;

while ((timer.ElapsedMilliseconds - current) < duration)

Thread.SpinWait(10);

}

這里timer是Stopwatch類的一個對象,其中ElapsedMilliseconds屬性可以實現毫秒級的精度,而ElapsedTicks屬性可以實現高達微秒級的時間精度。運用高優先級的線程[5]單獨運行這種定時器可以保證在微秒級的定時精度下,穩定觸發指定任務,保證本文虛擬示波器軟件達到了200Hz穩定可靠的數據率。

2.4 多線程數據處理

虛擬示波器軟件在確保錄取數據完整的同時,還應該確保數據曲線圖顯示的完整性。如果程序只有一個線程在運行,當程序進行數據接收并處理與曲線圖逐幀顯示的這段時間內,無法處理數據命令發送,使得下位機返回數據丟失,也有很大的概率造成整個界面卡死。因此為了提升程序效率,使程序能夠同時處理多種并行功能,不可避免地要引入多線程技術[6]。

線程是操作系統分派CPU時間的基本單元。每個線程所分派的CPU時間片很小,程序是對時間片的輪轉訪問來運行的。其實多線程是異步運行的。在避免線程之間數據競爭的前提下,本文虛擬示波器軟件分別為串口通信任務和曲線繪制任務開辟線程。使得多條任務線程同時運行,顯著提高了系統性能。

本文pingpong緩存機制也保證了線程之間沒有同時調取的數據,不會發生數據競爭。同時使用WaitOneEevent來分時觸發并行任務,進一步保證了程序的線程安全。本文軟件中的線程框圖如圖1所示:

圖1 軟件多線程框圖

2.5 圖表繪制

示波器被譽為“工程師的眼睛”。最初是通過狹窄并且高速的電子束,打在熒光平面上通過描繪待測電信號瞬時值變化曲線,來描述電現象的變化過程的。其經典的掃描式顯示模式一直深入人心,也成為工程師的儀表使用習慣。本文虛擬示波器軟件模擬了這一經典顯圖風格。

人類視覺系統(HVS)對時間頻率的反應時間是,在普通亮度環境下,圖像幀的變化頻率應該在15 Hz到20 Hz之間。平衡顯示圖像的幀速率一般為22fps到30fps之間。然而本虛擬示波器軟件采用數據驅動繪圖方式,每屏應盡量容納更多的數據信息,也就使得最終圖像畫布上承載上千個數據點的信息。要一次性連接千個數據點并形成曲線,如果點與點之間變化很大,就相當于WPF要通過PolyLine在畫布上大范圍地掃來掃去,這樣會每幀產生上百萬個像素點。即使WPF有著硬件加速,但是要完成這樣的任務還是非常耗時的,無法保證曲線平滑的顯示。為了滿足25fps的幀速率,需要每40ms更新一次圖像。考慮到本文應用場景是200 Hz的數據率,所以每次只能對8個點進行更新顯示。因此可以把PolyLine的思路換成上千個成員的Line數組添加到畫布上,每次只在8個需要更新的數據點處進行連接直線的刪除和新建這樣的更新操作,而其他的位置不變,就可以在40ms的周期內完成每幀數據的更新。接著再模仿示波器掃描圖顯模式,橫掃的方式確定需要更新的那8個點的位置進行替換,這樣就可以在保證平滑顯示的前提下完成對示波器掃描圖形顯示模式的模擬。而且這種繪圖方式也可以同時進行多通道數據的多曲線繪圖顯示。

3 結束語

本文使用虛擬示波器軟件與串口數據率200 Hz的DSP待測硬件進行了模式信號監測和指令交互式信號監測。從實驗結果上看,完全滿足設計要求。CPU使用率和內存使用率等性能指標也符合要求。

本文虛擬示波器界面如圖2所示:

圖2 虛擬示波器界面圖

主站蜘蛛池模板: 国产农村妇女精品一二区| 乱码国产乱码精品精在线播放| 国产一级二级三级毛片| 国产自在线播放| 第一区免费在线观看| 亚洲日韩日本中文在线| 国产国模一区二区三区四区| 亚洲无码91视频| 99视频在线免费观看| 国产成人三级| 国内精品自在欧美一区| 在线观看的黄网| 中日无码在线观看| 国产美女91视频| 久久黄色小视频| 野花国产精品入口| 亚洲中文字幕23页在线| 国产成人精品日本亚洲| 中文字幕丝袜一区二区| 中文成人在线| 成人在线观看一区| 国产成年女人特黄特色毛片免| 伊人色天堂| 又大又硬又爽免费视频| 精品欧美一区二区三区久久久| 国产精品视频观看裸模| 国产精品高清国产三级囯产AV| 国产精品香蕉在线观看不卡| 亚洲欧洲一区二区三区| 亚洲第一成年网| 免费国产高清视频| 国产一区二区色淫影院| 在线精品亚洲国产| 色天堂无毒不卡| 国产综合亚洲欧洲区精品无码| www.亚洲色图.com| 亚洲黄色视频在线观看一区| 久久国产av麻豆| 欧美色丁香| 亚洲无码高清视频在线观看| 久久精品女人天堂aaa| 久久婷婷综合色一区二区| 国产精品99久久久| 国产欧美日韩综合一区在线播放| 久久人人97超碰人人澡爱香蕉| 欧美成人午夜在线全部免费| 99这里只有精品6| 2020极品精品国产 | 天堂av综合网| 国产精品午夜福利麻豆| 手机看片1024久久精品你懂的| 在线观看免费黄色网址| 国产精品亚洲综合久久小说| 色综合激情网| 亚洲免费毛片| 色婷婷久久| 国产91在线|中文| 国产精品福利导航| aa级毛片毛片免费观看久| 在线播放真实国产乱子伦| 久久精品女人天堂aaa| 亚洲综合精品香蕉久久网| 国产激爽爽爽大片在线观看| 色综合久久久久8天国| 国产精品久久久久久久久| 九色视频最新网址| 国产成人午夜福利免费无码r| 伊人久久久久久久| 亚洲色偷偷偷鲁综合| 久久99精品国产麻豆宅宅| 午夜不卡视频| 亚洲天堂视频在线免费观看| 99热这里只有精品免费| 五月婷婷亚洲综合| 欧美日韩免费观看| 自拍欧美亚洲| 亚洲最新地址| 亚洲香蕉伊综合在人在线| 色噜噜在线观看| 国产凹凸视频在线观看| 国内精品自在自线视频香蕉 | 噜噜噜久久|