机器设备噪声监测系统设计
2012-05-28施祥
施 祥
(浙江科技学院 信息与电子工程学院,杭州310023)
对于机器设备产生的非稳态噪声,一般需要了解其任意时刻的噪声大小。声级计可以简便快捷地测量设备的瞬时噪声值,但其测量显示窗口较小,肉眼长时间观察容易疲劳,而且声级计只能靠近机器设备测量。随着微机软硬件技术的不断发展,由PC机结合单片机系统构成的监控系统已成为单片机技术发展的一个方向,它结合了单片机的实时数据采集和微机对图形处理、显示的优点[1]。
基于此,笔者设计了一个基于单片机的声级计与PC机连接的机器设备噪声监测系统。该系统可以实现PC机用户界面与声级计显示窗口的测量数据实时一致,并可在PC机界面上实现噪声测量值超限报警功能。
1 系统构成
本系统由声级计、PC机和RS232串口通信线联结构成。图1为系统组成示意图。声级计采用AWA6228型多功能声级计,该声级计可以以A、C、Z的3种并行频率计权及F、S、I的3种并行的时间计权,可以同时测量多种声音评价指标。通过RS232串口通信线可以把声级计的瞬时噪声测量数据传输到计算机(最远传输距离可以达到15~20m)。
图1 机器设备噪声监测系统Fig.1 Monitoring system for machines noises
2 软件设计
在PC机上实现与声级计串行通信的编程语言有很多,VB、C++、MATLAB等编程语言都可以实现。与VB、C++语言相比,MATLAB的计算机串口操作更加简化,只要几个语句就能实现对串口数据的读写操作,而且拥有丰富的数据处理函数,因此在设计时采用MATLAB语言来进行软件编写[2-4]。为了方便用户使用,进一步利用MATLAB图形用户界面开发环境(简称GUIDE),开发一个完整的图形用户界面(简称GUI)。
2.1 MATLAB串口基本操作
在PC机上使用MATLAB软件与其他设备进行串口通信,一般要进行创建串口、打开串口、读取串口、断开及清除串口等操作[5]。
2.1.1 创建串口对象并设置其属性
用serial函数创建一个串口对象,语句格式为scom=serial(‘port’)。接着,按表1设置串口对象的常见属性。
对于RS-232串口设备对象,其属性的缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。
2.1.2 打开串口对象
用fopen函数打开串口,联结串口对象到外围设备。语句格式为fopen(scom)。
2.1.3 读写串口操作
打开串口对象之后,可以对串口设备对象进行读写操作。对ASCII文本格式的数据,MATLAB读写串口设备的命令分别是fscanf、fpritf;二进制格式则使用fread、fwrite命令。
2.1.4 断开并清除串口对象
当不再使用串口对象时,使用fclose(scom)函数断开串口对象与外设的联结。然后使用delete(scom)将串口对象从内存中删除,最后可使用clear scom命令清除工作空间中的串口对象。
可见,在MATLAB中进行串行通信是十分方便的,编程较为简单。而且,在MATLAB中串行通信的失误率很低,通信较为可靠,同时,也可以采用增加握手信号及数据校验等方式进一步增加通信的可靠性[6]。
表1 串口对象的常见属性Table 1 Common properties ofserial port object
2.2 GUI界面设计
设计的系统界面见图2。界面主要分3个区域:测量值显示区,串口通信设置区,用户指令区。测量值显示区用来同步显示声级计的测量值,串口通信设置区用来设置PC机和声级计串行通信时的参数设置,用户指令区可以输入用户指令、预设报警值。其中用户指令区的“打开串口”“手动接收”“自动接收”控件均采用表示二值状态的切换按钮(如“打开串口”与“关闭串口”)。
图2 系统界面Fig.2 System interface
2.3 主要程序模块
系统要实现的功能主要有:
1)创建串口对象,并根据声级计的计算机串口数据传输协议配置串口属性;
2)打开串口进行数据传输;
3)PC机根据传输的数据,与设定值进行比较,超限报警;
4)断开串口联结并清除串口对象。
根据需要实现的功能在各个控件对象的回调函数callback下编写相应的程序代码,就可以实现整个设计的功能。系统软件主要有以下3个程序模块。
2.3.1 串口属性配置
根据AWA6228声级计的计算机串口传输协议,配置串口通信属性,即可实现PC机与该声级计串行通信。在“打开串口”按钮控件的callback函数下编写如下程序代码:
global scom %设置串口对象为全局变量
if get(hObject,′value′) %判断按钮是否按下
com_n=sprintf(′com%d′,get(handles.com,′value′)); %获取串口号
scom=serial(com_n); %创建串口对象
scom.BaudRate=115200; %设置波特率
scom.Parity=odd; %设置奇校验
scom.InputBufferSize=39; %设置缓冲区大小
fopen(scom); %打开串口联结到声级计else %当按钮未按下时
fclose(scom); %关闭串口
delete(scom); %从内存删除串口
clear scom %从工作空间删除串口end
2.3.2 数据的手动接送并处理
手动接受功能,每次按钮按下时,声级计的数据即传输到计算机一次。根据声级计与计算机传输协议里给出的数据传输指令和数据显示形式,以及设计要求的报警功能,在“手动接收”按钮的callback函数下编写如下程序代码:
%%PC机发送传输指令给声级计,并接收测量数据
global scom
fprintf(scom,'AWAB'); %PC机发传输指令'AWAB'给声级计
A=dec2hex(fread(scom)); %接收声级计的数据
B=floor(hex2dec([A(15,:)A(14,:)])/10)/10; %读取Z计权声级值,转换为十进制
C=floor(hex2dec([A(27,:)A(26,:)])/10)/10; %读取 A计权声级值,转换为十进制
switch get(handles.huoqu,'value') %判断“显示值”按钮状况
case 1;set(handles.xianshi,'string',num2str(B,'%.1f')) %使Z计权值在显示框显示
case 2;set(handles.xianshi,'string',num2str(C,'%.1f')) %使 A 计权值在显示框显示
end
%%比较噪声测量值与设定值,超过则报警显示
(1) 从力平衡条件出发,推导了裂隙开展的间距和宽度的表达式,据此提出了开裂最大间距和宽度的概念,提出了最大间距和最大宽度的概念,可用于判定裂隙最终规模的依据。
d=str2num(get(handles.xianshi,'string')); %获取噪声测量值
z=str2num(get(handles.baojing,'string')); %获取报警值
if d>z;set(handles.xianshi,'BackgroundColor',[100]) %界面显示区呈红色报警显示end
2.3.3 数据的自动接收并处理
要使得PC机的声音显示与声级计显示同步,即实现自动接收功能,则必须采用定时器对象,同时在定时周期到来时自动执行“手动接收”按钮下的callback函数。在“自动接收”按钮的callback函数下编写如下程序代码:
if get(hObject,'value') %当“自动接收”按钮按下时
t1=0.001*str2num(get(handles.shijian,'string')); %获取周期值
t=timer('BusyMode','queue','ExecutionMode',... %创建定时器,定时周期到来
{@fasong_Callback,handles});
start(t);%启动定时器
else %当“自动接收”按钮未按下时
stop(t);delete(t); %停止定时器,删除定时器
clear t
end
3 实测结果
采用该系统对某机器设备噪声进行实际测量,设定报警值为40dB,测量结果符合设计要求。图3显示设备噪声值为39.8dB,低于设定值的测量结果,与声级计做到同步显示。图4显示超过设定值时,测量显示框底色呈现红色报警状态。
4 结 语
设计了一个基于单片机的声级计与PC机连接的机器设备噪声监测系统。利用MATLAB GUIDE便捷的界面设计环境,以及MATLAB简易的串口操作函数,实现了PC机与声级计之间的实时数据传输显示,从而可以实现较远距离噪声测量,并在噪声测量值超出设定值时给出报警提示。该系统界面友好,易于操作,可方便地应用在机器设备噪声的检测领域。
[1] 王文中,郭楠,葛庆平.PC机与单片机串口通信模型的设计与实现[J].首都师范大学学报:自然科学版,2004(S1):1-3.
[2] 王战军,沈明.基于 Matlab GUI的串口通信编程实现[J].现代电子技术,2010(9):38-40,44.
[3] 张园,邢彦梅,何巧.基于 MATLAB数据采集系统的设计与实现[J].电声基础,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设计学习手记[M].北京:北京航空航天大学出版社,2009:224-367.
[6] 赵云鹏.MATLAB串口通信在数据采集中的应用[J].微计算机信息,2006,22(1):111-112.