徐 陽
(長江大學工程技術學院, 湖北 荊州 434023)
聲速測量仿真軟件的設計
徐 陽
(長江大學工程技術學院, 湖北 荊州 434023)
隨著虛擬技術的普遍應用,利用該技術進行計算機仿真成為大學物理實驗教學的發展趨勢。以聲速測量實驗為研究對象,利用 Visual C++ 6.0設計了聲速測量仿真軟件。該軟件可實現友好人機交互界面并能進行實時仿真聲速測量。
?長江大學教學研究計劃項目 (JY06017)。
聲速測量;虛擬儀器;仿真軟件
由物理學知,振動狀態在彈性介質中的傳播形成聲波,波速u、聲源振動頻率f和波長λ的關系為:
u=λ·f
(1)

注:X,Y1,Y2分別表示示波器的外通道 圖1 聲速測量實驗裝置示意圖
在物理實驗教學中通常采用超聲波測量聲速,聲速測量實驗裝置示意圖如圖1所示,S1、S2分別為超聲波發射換能器和超聲波接受換能器,信號源提供給S1高頻驅動電壓信號使其產生平面超聲波,信號源頻率即為聲源振動頻率。測量時S2沿軸線水平移動,用來改變S1、S2間的距離L,通過觀察示波器熒光屏上檢測信號變化,用駐波干涉法或位相比較法測量超聲波的波長λ,記錄聲源振動頻率f,即可求出聲速u。

圖2 聲速測量主程序基本結構框圖
仿真聲速測量在可視化聲速測量虛擬平臺上進行,該平臺由虛擬儀器構建。用戶可以在虛擬化的實驗環境中操作相關虛擬儀器測量數據、觀察實驗現象等,達到與真實實驗相同的效果。根據聲速測量實驗教學內容,將聲速測量仿真軟件主程序結構設計為5個模塊(見圖2),具體 內容 如下: ①輸入當前室內溫度模塊。用戶通過鍵盤輸入0~50℃的溫度值,用于確定數據處理時計算聲速理論值的溫度條件。②輸入聲源振動頻率模塊。用戶通過鍵盤輸入頻率范圍在34.5~37.5kHz的聲源振動頻率值。因為一個聲波系統只有一個諧振頻率,只有當外加的驅動信號頻率與聲波換能器系統諧振頻率相等時,才能進行聲能與電能的相互轉換以得到較好的實驗效果。③駐波干涉法測量聲速模塊。通過該項操作用戶可進入駐波干涉法測量聲速實驗操作的各個環節,進行實驗現象的觀察和實驗數據的實時測量
及處理等。④位相比較法測量聲速模塊。通過該項操作用戶可進入位相比較法測量聲速的各個實驗環節完成操作內容,觀察實驗現象、實時測量數據等。⑤退出模塊。通過該模塊可退出聲速測量程序。

圖3 聲速測量仿真軟件主界面
一個優秀的應用軟件必須具有良好的人機交互功能,對話框則是Window應用程序與用戶交換信息的重要技術手段[1]。在程序運行過程中,對話框可用來獲取用戶輸入的信息,同時對話框還能使用ActiveX控件接受和處理各種控制消息[2]。采用Visual C++ 6.0按模塊化設計導航按鈕,包括位相法測聲速按鈕(IDC_WEIMEASURE)、駐波法測聲速按鈕(IDC_MEASURE)、溫度輸入按鈕(IDC_TEMPER)、頻率輸入按鈕(IDC_FREQUENCY)和退出按鈕(IDC_OK)。聲速測量仿真軟件主界面如圖3所示。采用面向對象的消息驅動接口技術設計了一套模塊間通訊的協議,其消息映射如下:
BEGIN_MESSAGE_MAP(CXYDlg, CDialog)
//{{AFX_MSG_MAP(CXYDlg)
ON_BN_CLICKED(IDC_TEMPER, OnTemper) // 溫度輸入
ON_BN_CLICKED(IDC_MEASURE, OnMeasure) // 駐波干涉法
ON_BN_CLICKED(IDC_WEIMEASURE, OnWeimeasure) //位相比較法
ON_BN_CLICKED(IDC_FREQUENCY, OnFrequency) //頻率輸入
ON_BN_CLICKED(IDC_OK, OnOk) //退出
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

圖4 位相比較法測量聲速實驗界面
采用ActivX控件開發技術,分別設計了用于位相比較法和駐波干涉法測量聲速的控件,實現聲波接收換能器S2沿軸線水平移動的功能,達到實時測量波長的目的。以位相比較法測量聲速為例,其實驗界面如圖4所示。
用戶通過操作超聲波換能器S2來改變S1和S2之間的距離L,同時觀察示波器信號的變化。波長λ與換能器間的距離關系為[3]:
λ=2|L2-L1|
(2)
式中,L1和L2分別表示2次測量S1和S2之間距離值。
只要精確地測出L1和L2,即可確定波長λ,從而可由式(1)計算出聲速u。利用ActiveX控件的屬性,同時以事件形式接收ActiveX控件的通知,用戶可以在任何時候調用該控件完成特定動作。調用接口如下:
BEGIN_DISPATCH_MAP(CWeiEarCtrl, COleControl)
//{{AFX_DISPATCH_MAP(CWeiEarCtrl)
DISP_FUNCTION(CWeiEarCtrl, “Pinlu”, Pinlu , VT_EMPTY, VTS_R9) //聲源頻率
DISP_FUNCTION(CWeiEarCtrl, “SentT”, SentT, VT_EMPTY, VTS_R8) // 室內溫度值
DISP_FUNCTION(CWeiEarCtrl, “Measure”, Measure, VT_EMPTY, VTS_BOOL) // 測量開始
DISP_FUNCTION(CWeiEarCtrl, “Start”, Start, VT_EMPTY, VTS_BOOL) // 重新測量
DISP_FUNCTION(CWeiEarCtrl, “Reasult”, Reasult, VT_EMPTY, VTS_BOOL) // 輸出測量結果
DISP_STOCKFUNC_DOCLICK() //觸發控件的Click事件調用
//}}AFX_DISPATCH_MAP
圖4中包括4個標準控件命令按鈕,分別表示開始測量按鈕(IDC_MEASURE)、重新測量按鈕(IDC_REM)、輸出結果按鈕(IDC_OUTR)和返回按鈕(IDC_RETURN),按鈕消息映射如下:
BEGIN_MESSAGE_MAP(CweiMearsure, CDialog)
//{{AFX_MSG_MAP(CweiMearsure)
ON_BN_CLICKED(IDC_MEASURE, OnMeasure1) // 測量開始
ON_BN_CLICKED(IDC_OUTR, OnOutr) // 輸出測量結果
ON_BN_CLICKED(IDC_REM, OnRem) // 重新測量
ON_BN_CLICKED(IDC_REM, OnRETURN) //返回主界面
//}}AFX_MSG_MAP
當用戶從主界面中選擇當前室內溫度為18.0℃、輸入頻率為3598.0Hz時,選擇位相比較法測量聲速按鈕進入圖4所示實驗界面,再根據導航按鈕提示逐步完成實驗操作,最后選擇輸出結果按鈕,系統自動調用如下代碼:
void CWeiEarCtrl::Reasult(BOOL RRS)
…
if(RESULT&&STARTMEASURE) //測量完成后,輸出結果
if(!STOPCOUNT)
{
count(); //調用數據處理函數

圖5 測量結果輸出界面
STOPCOUNT=true;
}
最后用戶獲得實驗結果,測量結果輸出界面如圖5所示。
采用Visual C++ 6.0集成開發環境設計了聲速測量仿真軟件,其具有優良的模塊重用特性,能對超聲波的發射與接收、反射波的半波損失、駐波的形成等聲速測量實驗教學內容進行仿真模擬,能有效地幫助學生理解相關原理和實驗操作方法,具有較好的實用性。
[1]王華,葉愛亮,祁立學,等.Visual C++ 6.0編程實例與技巧[M].北京:機械工業出版社 1999.
[2]陳建春. Visual C++高級編程技術[M].北京: 電子工業出版社 1999.
[3]楊長銘.大學物理實驗[M].武漢:武漢大學出版社,2005.
[編輯] 李啟棟
10.3969/j.issn.1673-1409.2011.02.034
2010-12-12
徐陽(1984-),男,2005年大學畢業,助教,現主要從事計算機軟件應用技術方面的教學與研究工作;E-mail:ajxu@tom.com。
TP391.9
A
1673-1409(2011)02-0094-03