施 祥
(浙江科技學(xué)院 信息與電子工程學(xué)院,杭州310023)
對于機器設(shè)備產(chǎn)生的非穩(wěn)態(tài)噪聲,一般需要了解其任意時刻的噪聲大小。聲級計可以簡便快捷地測量設(shè)備的瞬時噪聲值,但其測量顯示窗口較小,肉眼長時間觀察容易疲勞,而且聲級計只能靠近機器設(shè)備測量。隨著微機軟硬件技術(shù)的不斷發(fā)展,由PC機結(jié)合單片機系統(tǒng)構(gòu)成的監(jiān)控系統(tǒng)已成為單片機技術(shù)發(fā)展的一個方向,它結(jié)合了單片機的實時數(shù)據(jù)采集和微機對圖形處理、顯示的優(yōu)點[1]。
基于此,筆者設(shè)計了一個基于單片機的聲級計與PC機連接的機器設(shè)備噪聲監(jiān)測系統(tǒng)。該系統(tǒng)可以實現(xiàn)PC機用戶界面與聲級計顯示窗口的測量數(shù)據(jù)實時一致,并可在PC機界面上實現(xiàn)噪聲測量值超限報警功能。
本系統(tǒng)由聲級計、PC機和RS232串口通信線聯(lián)結(jié)構(gòu)成。圖1為系統(tǒng)組成示意圖。聲級計采用AWA6228型多功能聲級計,該聲級計可以以A、C、Z的3種并行頻率計權(quán)及F、S、I的3種并行的時間計權(quán),可以同時測量多種聲音評價指標。通過RS232串口通信線可以把聲級計的瞬時噪聲測量數(shù)據(jù)傳輸?shù)接嬎銠C(最遠傳輸距離可以達到15~20m)。
圖1 機器設(shè)備噪聲監(jiān)測系統(tǒng)Fig.1 Monitoring system for machines noises
在PC機上實現(xiàn)與聲級計串行通信的編程語言有很多,VB、C++、MATLAB等編程語言都可以實現(xiàn)。與VB、C++語言相比,MATLAB的計算機串口操作更加簡化,只要幾個語句就能實現(xiàn)對串口數(shù)據(jù)的讀寫操作,而且擁有豐富的數(shù)據(jù)處理函數(shù),因此在設(shè)計時采用MATLAB語言來進行軟件編寫[2-4]。為了方便用戶使用,進一步利用MATLAB圖形用戶界面開發(fā)環(huán)境(簡稱GUIDE),開發(fā)一個完整的圖形用戶界面(簡稱GUI)。
在PC機上使用MATLAB軟件與其他設(shè)備進行串口通信,一般要進行創(chuàng)建串口、打開串口、讀取串口、斷開及清除串口等操作[5]。
2.1.1 創(chuàng)建串口對象并設(shè)置其屬性
用serial函數(shù)創(chuàng)建一個串口對象,語句格式為scom=serial(‘port’)。接著,按表1設(shè)置串口對象的常見屬性。
對于RS-232串口設(shè)備對象,其屬性的缺省值為波特率9 600b/s,異步方式,通信數(shù)據(jù)格式為8位數(shù)據(jù)位,無奇偶校驗位,1位停止位。
2.1.2 打開串口對象
用fopen函數(shù)打開串口,聯(lián)結(jié)串口對象到外圍設(shè)備。語句格式為fopen(scom)。
2.1.3 讀寫串口操作
打開串口對象之后,可以對串口設(shè)備對象進行讀寫操作。對ASCII文本格式的數(shù)據(jù),MATLAB讀寫串口設(shè)備的命令分別是fscanf、fpritf;二進制格式則使用fread、fwrite命令。
2.1.4 斷開并清除串口對象
當不再使用串口對象時,使用fclose(scom)函數(shù)斷開串口對象與外設(shè)的聯(lián)結(jié)。然后使用delete(scom)將串口對象從內(nèi)存中刪除,最后可使用clear scom命令清除工作空間中的串口對象。
可見,在MATLAB中進行串行通信是十分方便的,編程較為簡單。而且,在MATLAB中串行通信的失誤率很低,通信較為可靠,同時,也可以采用增加握手信號及數(shù)據(jù)校驗等方式進一步增加通信的可靠性[6]。
表1 串口對象的常見屬性Table 1 Common properties ofserial port object
設(shè)計的系統(tǒng)界面見圖2。界面主要分3個區(qū)域:測量值顯示區(qū),串口通信設(shè)置區(qū),用戶指令區(qū)。測量值顯示區(qū)用來同步顯示聲級計的測量值,串口通信設(shè)置區(qū)用來設(shè)置PC機和聲級計串行通信時的參數(shù)設(shè)置,用戶指令區(qū)可以輸入用戶指令、預(yù)設(shè)報警值。其中用戶指令區(qū)的“打開串口”“手動接收”“自動接收”控件均采用表示二值狀態(tài)的切換按鈕(如“打開串口”與“關(guān)閉串口”)。
圖2 系統(tǒng)界面Fig.2 System interface
系統(tǒng)要實現(xiàn)的功能主要有:
1)創(chuàng)建串口對象,并根據(jù)聲級計的計算機串口數(shù)據(jù)傳輸協(xié)議配置串口屬性;
2)打開串口進行數(shù)據(jù)傳輸;
3)PC機根據(jù)傳輸?shù)臄?shù)據(jù),與設(shè)定值進行比較,超限報警;
4)斷開串口聯(lián)結(jié)并清除串口對象。
根據(jù)需要實現(xiàn)的功能在各個控件對象的回調(diào)函數(shù)callback下編寫相應(yīng)的程序代碼,就可以實現(xiàn)整個設(shè)計的功能。系統(tǒng)軟件主要有以下3個程序模塊。
2.3.1 串口屬性配置
根據(jù)AWA6228聲級計的計算機串口傳輸協(xié)議,配置串口通信屬性,即可實現(xiàn)PC機與該聲級計串行通信。在“打開串口”按鈕控件的callback函數(shù)下編寫如下程序代碼:
global scom %設(shè)置串口對象為全局變量
if get(hObject,′value′) %判斷按鈕是否按下
com_n=sprintf(′com%d′,get(handles.com,′value′)); %獲取串口號
scom=serial(com_n); %創(chuàng)建串口對象
scom.BaudRate=115200; %設(shè)置波特率
scom.Parity=odd; %設(shè)置奇校驗
scom.InputBufferSize=39; %設(shè)置緩沖區(qū)大小
fopen(scom); %打開串口聯(lián)結(jié)到聲級計else %當按鈕未按下時
fclose(scom); %關(guān)閉串口
delete(scom); %從內(nèi)存刪除串口
clear scom %從工作空間刪除串口end
2.3.2 數(shù)據(jù)的手動接送并處理
手動接受功能,每次按鈕按下時,聲級計的數(shù)據(jù)即傳輸?shù)接嬎銠C一次。根據(jù)聲級計與計算機傳輸協(xié)議里給出的數(shù)據(jù)傳輸指令和數(shù)據(jù)顯示形式,以及設(shè)計要求的報警功能,在“手動接收”按鈕的callback函數(shù)下編寫如下程序代碼:
%%PC機發(fā)送傳輸指令給聲級計,并接收測量數(shù)據(jù)
global scom
fprintf(scom,'AWAB'); %PC機發(fā)傳輸指令'AWAB'給聲級計
A=dec2hex(fread(scom)); %接收聲級計的數(shù)據(jù)
B=floor(hex2dec([A(15,:)A(14,:)])/10)/10; %讀取Z計權(quán)聲級值,轉(zhuǎn)換為十進制
C=floor(hex2dec([A(27,:)A(26,:)])/10)/10; %讀取 A計權(quán)聲級值,轉(zhuǎn)換為十進制
switch get(handles.huoqu,'value') %判斷“顯示值”按鈕狀況
case 1;set(handles.xianshi,'string',num2str(B,'%.1f')) %使Z計權(quán)值在顯示框顯示
case 2;set(handles.xianshi,'string',num2str(C,'%.1f')) %使 A 計權(quán)值在顯示框顯示
end
%%比較噪聲測量值與設(shè)定值,超過則報警顯示
(1) 從力平衡條件出發(fā),推導(dǎo)了裂隙開展的間距和寬度的表達式,據(jù)此提出了開裂最大間距和寬度的概念,提出了最大間距和最大寬度的概念,可用于判定裂隙最終規(guī)模的依據(jù)。
d=str2num(get(handles.xianshi,'string')); %獲取噪聲測量值
z=str2num(get(handles.baojing,'string')); %獲取報警值
if d>z;set(handles.xianshi,'BackgroundColor',[100]) %界面顯示區(qū)呈紅色報警顯示end
2.3.3 數(shù)據(jù)的自動接收并處理
要使得PC機的聲音顯示與聲級計顯示同步,即實現(xiàn)自動接收功能,則必須采用定時器對象,同時在定時周期到來時自動執(zhí)行“手動接收”按鈕下的callback函數(shù)。在“自動接收”按鈕的callback函數(shù)下編寫如下程序代碼:
if get(hObject,'value') %當“自動接收”按鈕按下時
t1=0.001*str2num(get(handles.shijian,'string')); %獲取周期值
t=timer('BusyMode','queue','ExecutionMode',... %創(chuàng)建定時器,定時周期到來
{@fasong_Callback,handles});
start(t);%啟動定時器
else %當“自動接收”按鈕未按下時
stop(t);delete(t); %停止定時器,刪除定時器
clear t
end
采用該系統(tǒng)對某機器設(shè)備噪聲進行實際測量,設(shè)定報警值為40dB,測量結(jié)果符合設(shè)計要求。圖3顯示設(shè)備噪聲值為39.8dB,低于設(shè)定值的測量結(jié)果,與聲級計做到同步顯示。圖4顯示超過設(shè)定值時,測量顯示框底色呈現(xiàn)紅色報警狀態(tài)。
設(shè)計了一個基于單片機的聲級計與PC機連接的機器設(shè)備噪聲監(jiān)測系統(tǒng)。利用MATLAB GUIDE便捷的界面設(shè)計環(huán)境,以及MATLAB簡易的串口操作函數(shù),實現(xiàn)了PC機與聲級計之間的實時數(shù)據(jù)傳輸顯示,從而可以實現(xiàn)較遠距離噪聲測量,并在噪聲測量值超出設(shè)定值時給出報警提示。該系統(tǒng)界面友好,易于操作,可方便地應(yīng)用在機器設(shè)備噪聲的檢測領(lǐng)域。
[1] 王文中,郭楠,葛慶平.PC機與單片機串口通信模型的設(shè)計與實現(xiàn)[J].首都師范大學(xué)學(xué)報:自然科學(xué)版,2004(S1):1-3.
[2] 王戰(zhàn)軍,沈明.基于 Matlab GUI的串口通信編程實現(xiàn)[J].現(xiàn)代電子技術(shù),2010(9):38-40,44.
[3] 張園,邢彥梅,何巧.基于 MATLAB數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn)[J].電聲基礎(chǔ),2010,34(9):37-39.
[4] Wang C H,Yang Z J,Wen B Y.Serial communications programming in windows95with API functions[J].Wuhan University Journal of Natural Sciences,2000,5(3):323-328.
[5] 羅華飛.MATLAB GUI設(shè)計學(xué)習(xí)手記[M].北京:北京航空航天大學(xué)出版社,2009:224-367.
[6] 趙云鵬.MATLAB串口通信在數(shù)據(jù)采集中的應(yīng)用[J].微計算機信息,2006,22(1):111-112.