📄 matlab温度控制.txt
字号:
'HorizontalAlignment','center',...
'FontSize',13.5);
h.jifen = uicontrol('Style','edit',... %***** 显示:积分系数 *****
'Units','normalized',...
'Position',[0.25 0.474 0.104 0.06],...
'ForegroundColor',[0 0 0],...
'BackgroundColor',[1.0 1.0 1.0],...
'HorizontalAlignment','center',...
'String','30',...
'FontSize',13.5,...
'CallBack','');
uicontrol('Style','text',... %****** 提示:微分系数 ******
'Units','normalized',...
'Position',[0.099 0.403 0.121 0.047],...
'BackgroundColor',[0.8 0.8 0.8],...
'String','微分系数',...
'HorizontalAlignment','center',...
'FontSize',13.5);
h.weifen = uicontrol('Style','edit',... %***** 显示:微分系数 *****
'Units','normalized',...
'Position',[0.25 0.389 0.104 0.06],...
'ForegroundColor',[0 0 0],...
'BackgroundColor',[1.0 1.0 1.0],...
'HorizontalAlignment','center',...
'String','40',...
'FontSize',13.5,...
'CallBack','');
uicontrol('Style','frame',... %***** 控制算法选择界面 *****
'Units','normalized',...
'ForegroundColor',[0.251 0 0],...
'BackgroundColor',[0.8 0.8 0.8],...
'Position',[0.071 0.185 0.311 0.185]);
uicontrol('Style','text',... %***** 提示:控制算法 *****
'Units','normalized',...
'Position',[0.116 0.3 0.224 0.051],...
'BackgroundColor',[0.8 0.8 0.8],...
'String','控 制 算 法',...
'HorizontalAlignment','center',...
'FontSize',14.0);
h.suanfa = uicontrol('Style','popupmenu',... %******* 控制算法 *******
'Units','normalized',...
'Position',[0.134 0.221 0.191 0.062],...
'ForegroundColor',[0 0 0],...
'BackgroundColor',[1.0 1.0 1.0],...
'HorizontalAlignment','center',...
'String','常规PID控制|微分先行PID|带死区的PID',...
'FontSize',13.5,...
'CallBack','');
%********************************* 绘制阶跃响应曲线 **********************
h.axis= subplot('position',[0.464 0.251 0.465 0.479]); %*** 坐标轴 ***
uicontrol('Style','text',... %** 提示:阶跃响应曲线 **
'Units','normalized',...
'Position',[0.560 0.149 0.258 0.053],...
'BackgroundColor',[0 1.0 0],...
'String','阶 跃 响 应 曲 线',...
'Visible','off',...
'HorizontalAlignment','center',...
'FontSize',12.0);
%**************************** 控制按钮(GUI) *************************
h.fasong= uicontrol('Style','pushbutton',... %***** 发送据按钮 *****
'Units','normalized',...
'Position',[0.147 0.096 0.129 0.06],...
'ForegroundColor',[0 0 0],...
'HorizontalAlignment','center',...
'BackgroundColor',[0.8 0.8 0.8],...
'String','发送数据',...
'FontSize',13.5,...
'CallBack','example(1)');
h.stopfasong= uicontrol('Style','pushbutton',... %**** 停止发送据按钮 ****
'Units','normalized',...
'Position',[0.147 0.026 0.129 0.06],...
'ForegroundColor',[0 0 0],...
'HorizontalAlignment','center',...
'BackgroundColor',[0.8 0.8 0.8],...
'Enable','off',...
'String','停止发送',...
'FontSize',13.5,...
'CallBack','example(3)');
h.jieshou = uicontrol('Style','pushbutton',... %***** 接收数据按钮 *****
'Units','normalized',...
'Position',[0.307 0.096 0.129 0.06],...
'ForegroundColor',[0 0 0],...
'HorizontalAlignment','center',...
'BackgroundColor',[0.8 0.8 0.8],...
'String','接收数据',...
'FontSize',13.5,...
'CallBack','example(2)');
h.stopjieshou = uicontrol('Style','pushbutton',...%***** 停止接收按钮 *****
'Units','normalized',...
'Position',[0.307 0.026 0.129 0.06],...
'ForegroundColor',[0 0 0],...
'HorizontalAlignment','center',...
'BackgroundColor',[0.8 0.8 0.8],...
'String','停止接收',...
'FontSize',13.5,...
'CallBack','example(4)');
i=10; %*** 提示:请输入控制参数 ***
while i>=0;
set(h.zhuangtai,'String','温度控制系统已经打开');
pause(1)
set(h.zhuangtai,'String','请输入控制参数');
pause(1)
i=i-1;
end
set(h.zhuangtai,'String','请输入控制参数');
%***************************** 发送数据程序 ******************************
case 1
%******************************* 获取控制参数 ****************************
%****************************** 接收设定参数 ****************************
sheding=eval(get(h.sheding,'String')); %---------获取温度的设定值-------
if (sheding<0)|(sheding>100) %-----------出错处理--------
errordlg(' 设定温度的范围: 0 --- 100 ','设定温度错误!');
set(h.zhuangtai,'String','设定温度错误!');
shedingerror=1;
else shedingerror=0;
end
%******************************* 接收比例系数****************************
bili=eval(get(h.bili,'String')); %------------获取比例系数----------
if (bili<0)|(bili>100) %-----------出错处理---------
errordlg(' 比例系数的的范围: 0 --- 100 ','比例系数错误!');
set(h.zhuangtai,'String','比例系数错误!');
bilierror=1;
else bilierror=0;
end
%******************************* 接收积分系数 ****************************
jifen=eval(get(h.jifen,'String')); %------------获取积分系数----------
if (jifen<0)|(jifen>100) %------------出错处理---------
errordlg(' 积分系数的的范围: 0 --- 100 ','积分系数错误!');
set(h.zhuangtai,'String','积分系数错误!');
jifenerror=1;
else jifenerror=0;
end
%****************************** 接收微分系数 ****************************
weifen=eval(get(h.weifen,'String')); %------------获取微分系数----------
if(weifen<0)|(weifen>100) %------------出错处理---------
errordlg(' 微分系数的的范围: 0 --- 100 ','微分系数错误!');
set(h.zhuangtai,'String','微分系数错误!');
weifenerror=1;
else weifenerror=0;
end
%**************************** 输入数据错误判断 ************************
if(shedingerror==0)&(bilierror==0)&(jifenerror==0)&(weifenerror==0)
%***输入数据的范围正确***
disp(' ')
disp('输入数据的范围正确!')
disp(' ')
%********************** 显示:设定的控制参数 ******************
disp('设定的参数如下:')
disp(' ')
shedingdata=eval(get(h.sheding,'String')) %****** 获取参数 ******
bilidata=eval(get(h.bili,'String'))
jifendata=eval(get(h.jifen,'String'))
weifendata=eval(get(h.weifen,'String'))
val=get(h.suanfa,'Value'); %***** 选择控制算法 ******
i f val==1
disp('常规PID控制')
elseif val==2
disp('微分先行PID')
elseif val==3
disp('带死区的PID')
end
disp(' ')
%******************* 查询:是否发送数据?*******************
fasongqueding=questdlg(' 现在发送数据吗?','是否发送数据?','确定','取消','yes');
%************** 是否发送数据?*****************
if fasongqueding=='确定'
set(h.sheding,'Enable','inactive'); %***不能修改参数***
set(h.bili,'Enable','inactive');
set(h.jifen,'Enable','inactive');
set(h.weifen,'Enable','inactive');
set(h.suanfa,'Enable','inactive');
set(h.fasong,'Enable','off'); %***设置按钮状态***
set(h.jieshou,'Enable','off');
set(h.stopjieshou,'Enable','off');
set(h.fasong,'String','正在发送');
set(h.zhuangtai,'String','准备发送数据');
disp(' ')
disp('准备发送数据')
disp(' ')
i=3;
while i>=0;
set(h.zhuangtai,'Visible','off');
pause(0.5)
set(h.zhuangtai,'Visible','on');
pause(0.5)
i=i-1;
end
%*************************** 发送数据 *************************
disp('正在发送数据')
disp(' ')
s1 = serial('COM1', 'BaudRate', 1200,'timeout',2);
fopen(s1) %***打开串口***
val=val-1;
fprintf(s1,’%d’,val); %***发送控制算法***
set(h.zhuangtai,'String','发送控制算法');
disp('发送控制算法')
disp(' ')
pause(2)
set(h.zhuangtai,'String','发送设定温度');
fprintf(s1,'%d',shedingdata); %***发送设定温度***
disp('发送设定温度')
disp(' ')
pause(2)
set(h.zhuangtai,'String','发送比例系数');
fprintf (s1,'%d',bilidata); %***发送比例系数***
disp('发送比例系数')
disp(' ')
pause(2)
set(h.zhuangtai,'String','发送积分系数');
fprintf (s1,'%d',jifendata); %***发送积分系数***
disp('发送积分系数')
disp(' ')
pause(2)
set(h.zhuangtai,'String','发送微分系数');
fprintf (s1,'%d',weifendata); %***发送微分系数***
disp('发送微分系数')
disp(' ')
pause(2)
fclose(s1); %*** 关闭串口 ***
%*********************** 数据发送完毕 *******************
set(h.fasong,'Enable','on')
set(h.fasong,'String','发送数据')
disp('数据发送完毕')
disp(' ')
set(h.sheding,'Enable','on'); %***可以修改参数***
set(h.bili,'Enable','on');
set(h.jifen,'Enable','on');
set(h.weifen,'Enable','on');
set(h.suanfa,'Enable','on');
set(h.jieshou,'Enable','on');
set(h.fasong,'Enable','on');
disp('等待接收数据')
disp(' ')
i=5;
while i>0
set(h.zhuangtai,'String','数据发送完毕')
pause(1)
set(h.zhuangtai,'String','可以接收数据')
pause(1)
i=i-1;
end
set(h.zhuangtai,'String','可以接收数据')
pause
end %-- fasongqueding=='确定'--
end %-- 输入数据的范围正确 -- %****************************** 接收数据程序 *****************************
case 3
disp('准备接收数据')
disp(' ')
set(h.jieshou,'Enable','off');
set(h.jieshou,'String','准备接收');
set(h.stopjieshou,'Enable','on');
set(h.shujuhuifang,'Enable','off');
i=3;
while (i>0)
set(h.zhuangtai,'String','准备接收数据');
pause(0.5);
set(h.zhuangtai,'Visible','off');
pause(0.5);
set(h.zhuangtai,'Visible','on');
i=i-1;
end
set(h.zhuangtai,'String','正在接收数据');
set(h.jieshou,'String','正在接收');
disp('正在接收数据')
disp(' ')
%************************** 接收数据 *****************************
shedingdata=eval(get(h.sheding,'String'));
len=1; %***温度数组标志***
maxlength=25; %***显示数据标志***
x=0:maxlength;
display=20*ones(1,maxlength+1); %***显示数组标志***
shedingdata=shedingdata*ones(1,maxlength+1);
%***设定温度数组***
wendudata=zeros(1,25);
while 1
for j=1:maxlength %***数据预处理 ***
display(1,j)=display(1,j+1);
end
s1 = serial('COM1', 'BaudRate', 1200,'timeout',2);
fopen(s1) %***打开串口***
wendudata(i)=fscanf(s1); %***接收串口数据***
fclose(s1); %***关闭串口***
set(h.zhuangtai,'String',len);
set(h.dangqian,'String',wendudata(len));
display(1,maxlength+1)=wendudata(len);
plot(x,shedingdata,'r',x,display,'b');
grid on;
pause(2); %***接收数据时间间隔***
len=len+1;
end %-- i=1:1000 --
%****************************** 停止接收程序 ****************************
case 4
set(h.shujuhuifang,'Enable','on')
set(h.jieshou,'String','接收数据')
set(h.zhuangtai,'String','停止接收数据')
set(h.stopjieshou,'Enable','off');
set(h.jieshou,'Enable','on')
disp('停止接收数据')
disp(' ')
i=5;
while i>0;
pause(0.5)
set(h.zhuangtai,'Visible','off')
pause(0.5)
set(h.zhuangtai,'Visible','on')
i=i-1;
end
set(h.zhuangtai,'String','停止接收数据')
pause
%******************************** 数据回放 *****************************
case 5
shedingdata=eval(get(h.sheding,'String'));
shedingdata=shedingdata*ones(1,len);
plot(wendudata)
hold on
plot(shedingdata,'r')
hold off
grid on
set(h.shujuhuifang,'Enable','off');
set(h.zhuangtai,'String','回放温度数据')
i=5;
while i>0;
pause(0.5)
set(h.zhuangtai,'Visible','off')
pause(0.5)
set(h.zhuangtai,'Visible','on')
i=i-1;
end
set(h.zhuangtai,'String','回放温度数据')
pause %*************************************************************************
end
%********************************* THE END *****************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -