⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matlab温度控制.txt

📁 这个是通过matlab这个软件编写程序可以控制温度!达到了理想的结果!开始的程序是用c写的!但是主要还是后面的matlab程序!
💻 TXT
📖 第 1 页 / 共 2 页
字号:
		'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 + -