(广东润星科技有限公司 523000)
摘要:利用MATLAB函数语言进行编程,开发出直观的、符合个性化的GUI用户界面,即操作方便又可以有效的预测。通过借助MATLAB软件可直观的对实验数据进行分析,为磨削力的预测提供了一个简单可行的方法,从而提高了预测效果。
关键词:MATLAB;用户界面;磨削力
一、磨削力预测的研究现状
在磨削加工过程中,磨削力评价材料科磨削性的一个重要指标。磨削力的大小是随磨削时间的增长而增长,这将会使磨削质量指标的变化,不能保证加工要求[1]。在以往传统的磨削力预测中,我们多是根据多元回归分析来建立经验公式,进行繁琐的运算,造成巨大的工作量,而且对于准确度也难以保证。
二、MATLAB对于磨削力预测的应用
现在运用MATLAB实现的人工神经网络已渐成趋势,主要用于模式识别与分类、数据压缩、预报和函数逼近等[ 2]。MATLAB提供了功能强大的模块集和神经网络工具箱,其强大的计算数据处理能力和出色的图形处理功能,在理论研究和工程应用方面得到了成熟的运用。通过MATLAB这款软件进行数据的处理,通过此界面可以对磨削参数数据的输入进行预测,并可以和实际数据进行对比,查看误差,对于磨削力的预测是一种有效和方便的方法。
三、GUI(面向用户的界面)的设计
3.1图形用户界面设计GUI
GUI是图形用户界面的意思,像很多高级编程语言一样,Matlab也有图形用户界面开发环境,随着计算机技术的飞速发展,人与计算机的通信方式也发生的很大的变化,现在绝大多数的应用程序都是在图形化用户界面下运行的[3]。利用GUI Design中直观的控件,可以自己合理规划自己想要的用户界面,而且它占用资源少、使用方便、简化了工作的性能,方便了用户。
3.2界面设计要求
1.首先控制训练样本和预测样本的导入,寻找需要的EXCEL数据的位置。
2.建立BP网络模型的主要参数,输入层的传递函数、输出层传递函数、训练函数、隐含层神经元个数,通过控件的下拉菜单鼠标选择用户所需的函数类型。
3.设定训练网络参数配置,有迭代次数,训练目标、学习率、显示间隔、限制时间,参数可通过键盘输入数字,由于需要合理的参数在callback函数中我们加入了可输入区间限制提醒。
4.开始训练网络,界面上会显示主程序所要求的切向和法向磨削力的预测图、输出误差图和预测平均误差执行结果
5.通过Slider ActiveX Control控件调节在Numberic LED ActiveX Control显示数字,调节砂轮速度、进给速度、磨削深度的参数。让用户通过自己设的输入参数,再加载最佳的网络模型进行预测,会在LED显示预测出输出值。
总体设计可分为六大部分:数据的导入、网络模型参数设置、训练网络参数设置、图形的显示、预测运算结果的显示和辅助功能。
3.3 界面设计
3.3.1GUI用户界面的结构布局
1.Panel控件:单层网络模型参数设置,网络训练参数设置
2.Push Button控件:输入训练,输入预测,训练网络,保存网络,加载网络,进行预测,退出。
3.Pop-up menu控件:输入-隐层传递函数,隐层-输出传递函数,训练函数,隐层神经元个数。
4.Edit txt控件:迭代次数,训练目标,学习率,显示间隔,时间限制,预测切向磨削力平均误差,预测法向磨削力平均误差。
5. ActiveX Control(Numberic LED ActiveX Control,Slider ActiveX Control):砂轮速度,进给速度,磨削深度,预测切向磨削力,预测法向磨削力。
6. Axes:切向磨削力预测图,法向磨削力预测图,切向磨削力输出误差图,法向磨削力输出误差图。
3.3.2 程序设计
1.训练数据和测试数据的输入[3]
变量:【输入训练】pushbutton1;【输入预测】pushbutton2
程序:%训练数据输入
if get(handles.pushbutton1,'value')==1 %使用回调函数,激活【输入训练】按钮
[filename,pathname,filterindex]=uigetfile({'*.xls';},'select data-file');%读取Excel文件
str=[pathname filename];%将路径及文件名赋值到结构变量str
data=xlsread(str);%读入结构变量str,并传递到data
end
whether1=1;%给定判断是否输入训练样本
input_train=data(:,1:3)';%读取训练样本的输入参数
output_train=data(:,4:5)';%读取训练样本的输出参数
%预测数据输入
if get(handles.pushbutton2,'value')==1%
[filename,pathname,filterindex]=uigetfile({'*.xls';},'select data-file');
str=[pathname filename];
date=xlsread(str);
end
whether2=2;
input_test=date(:,1:3)';
output_test=date(:,4:5)';
2.网络训练参数设置
变量:【迭代次数】epochs;【训练目标】goal;【学习率】lr;【显示间隔】show;【限制时间】time
程序:
Epochs=str2num(get(handles.epochs,'string'));%读取迭代次数参数
Show=str2num(get(handles.show,'string'));
Goal=str2num(get(handles.goal,'string'));
Lr=str2num(get(handles.lr,'string'));
Time=str2num(get(handles.time,'string'));
3.训练网络
变量:【训练网络】pushbutton3
程序:tap=1;%设置网络训练标志
cla(handles.axes1); %清空仿真预测图
cla(handles.axes3); %清空误差温度百分比
cla(handles.axes4); %清空温度误差图
[pn,minp,maxp,tn,mint,maxt]=premnmx(input_train,output_train);%训练样本归一化
net=newff(minmax(pn),[Nsize(output_train,2)],{fcn_hidden,fcn_output},fcn_learn);
net.trainParam.epochs=Epochs;%迭代次数
net.trainParam.show=Show;%显示间隔
net.trainParam.lr=Lr;%学习率
net.trainParam.goal=Goal;%训练精度
net.trainParam.time=Time;%限定时间
net=train(net,pn,tn);%进行训练,并生成网络
p3n=tramnmx(input_test,minp,maxp);%预测样本进行归一化范围到[-1,1]
a3n=sim(net,p3n);%运用生成的网络对预测样本进行预测
BPoutput=postmnmx(a3n,mint,maxt);%输出结果反归一化,显示预测结果
4.输出磨削力预测图
变量:【切向磨削力预测图】axes1
程序:axes(handles.axes1);
plot(BPoutput(1,:))
plot(BPoutput(1,:),':or')
hold on
plot(output_test(1,:),'-* ');
ylabel('切向磨削力','fontsize',12);
xlabel('样本','fontsize',12);
legend('预测值','期望值');
grid on
5.输出磨削力误差图
变量:【切向磨削力输出误差图】axes3
程序:axes(handles.axes3);%切向磨削力输出误差图
plot((output_test(1,:)- BPoutput(1,:)),':*r');%描绘出切向磨削力误差线框
grid on%打x、y轴框格线
6.保存网络模型
变量:【保存网络】pushbutton4
程序:[filename,pathname]=uiputfile('*.mat','save data as');%保存*.mat文件
file=strcat(pathname,filename);%将路径及文件名赋值到结构变量file
save(file,'net');%保存训练好的网络模型
7.载入模型
变量:【加载模型】pushbutton5
程序:tap = 2;%判断是否有新的网络输入
[filename,pathname,filterindex]=uigetfile('*.mat','select net-file');%读取*.mat文件
file=strcat(pathname,filename);%将路径及文件名赋值到结构变量file
load(file,'net');%载入已经训练好的模型网络
8.预测单个样本
变量:【预测样本】pushbutton6
程序:[pn,minp,maxp,tn,mint,maxt]=premnmx(input_train,output_train);%训练样本归一化
val1=get(handles.activex1,’value’);%输入调整好的砂轮速度参数
val2=get(handles.activex3,’value’);%输入调整好的工件速度参数
val3=get(handles.activex4,’value’);%输入调整好的切削深度参数
input_test=[val1,val2,val3;];%将输入的磨削参数转置成矩阵
p3n=tramnmx(input_test,minp,maxp);%预测样本集输入数据归一化
a3n=sim(net,p3n);%输出结果反归一化,显示预测结果
Sigleoutput=postmnmx(a3n,mint,maxt);%BP网络预测输出
p=Sigleoutput;%赋值
Ployval(p,0);% 拟合后的函数计算拟合值用的
Set(handles.activesx7,’value’,ans);%将单个样本预测输出到LED
3.4 辅助功能设计
在网络训练参数设置中,我们需要输入合适的区间范围,避免出现输入的错误,所以我们可以编程输入范围限制,进行人性化的提醒。例如:训练目标、学习率。还设计了退出键,使更人性化[4]。
1.变量【迭代次数】epochs
程序:global Epochs
epochs=get(handles.epochs,'string');
Epochs=str2num(epochs);
flag=~isequal(Epochs,round(Epochs));
if Epochs<=0 || flag
warndlg('最大训练次数必须是正整数','Input Error');
else
if Epochs<=50
warndlg('训练次数太小','Input Warning');
end
end
2.变量:【训练目标】goal
程序:global Goal
goal=get(handles.goal,'string');
Goal=str2num(goal);
if Goal <0
warndlg('必须是正数','Input Error');
else
if Goal >1
warndlg('训练目标设置太大','Input Warning');
elseif Goal <1e-6
warndlg('训练目标设置太大','Input Warning');
end
end
2.变量:【学习率】Lr
程序:global Lr
lr=get(handles.lr,'string');
Lr=str2num(lr);
if Lr<0 || Lr>1
warndlg('建议在0-1之间','Input Warning');
end
3.变量:【退出】pushbutton8
程序:ss=questdlg('你真的要退出吗?','系统提示!','不,我还想看看!','是的,我要退出!','是的,我要退出!');
switch ss
case '是的,我要退出!'
delete(handles.figure1);
end
3.5 ActiveX Control的使用
利用Slider ActiveX Control 滑动条来调节Numberic LED ActiveX Control的砂轮速度、进给速度、磨削深度的参数。例如:砂轮速度。
变量:【砂轮速度】activex1
程序:function activex11_MouseDown(hObject,eventdata,handles)
global flag
flag = 1;
function activex1_MouseMove(hObject,eventdata,handles)
global flag
if flag
val = get(hObject,'value');
set(handles.activex10,'value',val);
end
function activex1_MouseUp(hObject,eventdata,handles)
global flag
flag = 0;
3.6界面设计生成
四、总结与展望
在通过人工神经网络预测磨削力,改变了传统的预测方式,利用MATLAB的GUI界面设计,设计出方便操作的预测磨削力界面,通过控件完成输入、参数选择、训练网络,保存和单个样本预测等命令这种可操作界面操作方便及人性化,实现对磨削力的实时预测。当然,这个设计还是有不断改进的空间,我们还可以将它更优化,做到误差范围更小,精度更高。因此,在后继的工作中,应进一步完善、加强其功能,使之更实用化、科学化。
参考文献:
[1]黄伟,谢红梅,BP神经网络在其磨削力序列预测中的应用。博士论文,2000,北京航空航天大学
[2]高 隽. 人工神经网络原理及仿真实例[M]. 机械工业出版社,2007:43-54.
[3]陈垚光,毛涛涛,王正林. 精通MATLAB GUI设计[M]. 北京:电子工业出版社,2011.
[4]韩力群. 人工神经网络理论、设计及应用[M]. 北京:化学工业出版社,2007:47-66.
论文作者:李虹,宁煜茂,胡啓晏
论文发表刊物:《河南电力》2018年4期
论文发表时间:2018/8/20
标签:磨削论文; 变量论文; 误差论文; 网络论文; 样本论文; 参数论文; 函数论文; 《河南电力》2018年4期论文;