微型圖框在虛擬儀器中的效用探究
1圖片框坐標(biāo)概述
2數(shù)字存儲示波器的波形重建
首先確定波形在屏幕顯示范圍,即X向像素點(diǎn)×Y向像素點(diǎn),再把圖片框劃分為8行10列,共有80個(gè)小格,其中電壓區(qū)域在上面的40格為正,下面40格為負(fù)。圖片框的X軸表示時(shí)基,Y軸表示電壓值。圖片框的Y方向像素值固定,圖片框的X電壓值用Picture.ScaleWidth=存儲深度值/n設(shè)置,選擇不同的存儲深度有不同的X軸長度,n依需要定:n=1顯示全部存儲深度的數(shù)據(jù)波形;n=2則顯示1/2存儲深度的數(shù)據(jù)波形,且時(shí)基隨Picture.
ScaleWidth值變化。則依Picture.Scale Width變化,存儲深度范圍可設(shè)置觀看任意長度數(shù)據(jù),加上滾動條控件的移動可觀察前后的數(shù)據(jù)。在重新設(shè)置存儲深度后須重新設(shè)置圖片框的X軸長度。
靈敏度是數(shù)字存儲示波器能顯示的最大電壓值。對同一個(gè)輸入信號,屏幕上的波形幅值隨靈敏度的增加而變低,隨靈敏度的降低而增高。要正確重建波形,須正確計(jì)算圖片框Y軸方向的電壓值和計(jì)算X軸的時(shí)間顯示值,Y軸反映輸入信號的幅值,X軸時(shí)間數(shù)字反映輸入信號的周期。先用靈敏度和Y方向上的最大像素值計(jì)算出1V電壓對應(yīng)的像素值,再計(jì)算A/D轉(zhuǎn)換的電壓值,兩值相乘則為電壓對應(yīng)的像素值。計(jì)算電壓對應(yīng)的像素值代碼:ChKK=(Ymax/2)/ChSensitivi ty Ymax為圖片框Y軸最大像素值;ChSensitivity為設(shè)置電壓靈敏度;ChKK―1V對應(yīng)的像素值。
圖片框坐標(biāo)左上角為0,垂直向下Y軸增加,水平向右X軸增加,0V水平線在圖片框的中間,正電壓在0V水平線上方,而負(fù)電壓在下方。因此,ChPixel(i)=ChPixel(i)(-1),繪制圖形代碼如下:For i=1 To DataLegth-1 Picture.Line ((i-1), Y0+ChPixel(i-1+MoveValue))-(i, Y0 + ChPixel(i +MoveValue)), HFF00 Next i //DataLegth―存儲深度,Y0―0V的Y軸中心位置//MoveValue―滾動條移動位置值X軸顯示值是數(shù)字存儲示波器的時(shí)基,與采樣頻率、存儲深度有關(guān),即:TimeValue=(1/采樣頻率)×(存儲深度值/n)/10 TimeValue是每個(gè)小格的時(shí)間,因圖片框劃分成8行10列,所以需除以10.
3任意波形發(fā)生器的自定義波形輸出
任意波形發(fā)生器可輸出標(biāo)準(zhǔn)波形和自定義波形。選擇自定義波形時(shí),用戶采用鼠標(biāo)繪圖方式繪制所需波形,而圖形繪制是在圖片框中進(jìn)行,在程序可視化界面上放置圖片框,其大小可任意,然后用D/A的分辨率定義該圖片框的高度:Picture.ScaleHeight=D/A分辨率用任意波形發(fā)生器要求的一個(gè)周期的數(shù)據(jù)個(gè)數(shù)定義該圖片框?qū)挾龋篜icture.ScaleWidth=數(shù)據(jù)個(gè)數(shù)圖片框的坐標(biāo)是左上角為0,垂直向下Y軸增加,水平向右X軸增加。程序通過MouseDown、MouseUp、MouseMove事件對鼠標(biāo)位置及狀態(tài)的變化作出響應(yīng),圖片框的MouseDown、MouseUp、MouseMove事件返回鼠標(biāo)當(dāng)前位置的坐標(biāo)值X、Y.
在MouseDown與MouseUp事件里通知應(yīng)用程序開始繪圖與停止繪圖。按下鼠標(biāo)按鈕觸發(fā)MouseDown事件,記錄鼠標(biāo)的X、Y位置作為起始位置;按住鼠標(biāo)在圖片框上拖動指針時(shí),不斷觸發(fā)MouseMove事件,該事件與Line方法結(jié)合把鼠標(biāo)移動的軌跡畫線并把鼠標(biāo)的X、Y坐標(biāo)存入以X為序的數(shù)組中,數(shù)組存的Y值是輸出到D/A的二進(jìn)制值。由于鼠標(biāo)經(jīng)圖片框的每個(gè)像素時(shí),并不產(chǎn)生MouseMove事件,在X不連續(xù)的地方,則需要線性插值:Picture.Line (OldX, OldY)-(X, Y), QBColor(0)XPos(X)=X: YPos(X)=Y(jié) DiffX=X-OldX If (diffX >= 2) Then //開始插值Dd=(Y-OldY)/diffX For i=OldX+1 To X-1 XPos(i)=i YPos(i)=Y(jié)Pos(OldX)+dd (i-OldX)Next i End If //插值結(jié)束OldX=X: OldY=Y(jié)釋放鼠標(biāo)按鈕觸發(fā)MouseUp事件,結(jié)束繪圖。
此時(shí)可將Ypos(i)值以產(chǎn)生波形輸出。如用戶不滿意需修改,則在繪好的圖形上在需修改的位置按下鼠標(biāo)按鈕,拖動鼠標(biāo),程序?qū)?dāng)前鼠標(biāo)位置存入先前數(shù)組,替換原來位置的值,釋放鼠標(biāo)時(shí),程序用保存的數(shù)組重新繪制圖形,并將數(shù)組的值輸出。
4結(jié)語
采用VB圖片框的ScaleWidth、ScalHeight自定義刻度屬性,可靈活、直觀地進(jìn)行程序設(shè)計(jì)。將其應(yīng)用于虛擬儀器程序,可縮短程序的開發(fā)時(shí)間。http://www.52lvi.cn