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