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

📄 eex2.m

📁 一本关于控制系统仿真的书的程序 1、文件夹1中的程序是书中的一些仿真。 2、文件2中的是最近做的预测控制、PID控制及逻辑控制的对比综合研究。 3、文件夹3中是与maltab通信的数据采集板的设
💻 M
字号:
  function [step1,fix,tstop,idnt]=eex2(temp,t,Ts,kp,ki,kd);
%  temp  设置阶跃输入值
% t  设置采样点数
% step1   simulink阶跃输入设定值
% fix     simulink仿真的固定步长,即采样周期,建议最小选0.2s
% tstop    simulink仿真停止时间
% idnt    实时输出
% kp,ki,kd分别为PID控制器的三个参数
%运行步骤:1 计算得到实验箱上搭建系统的传递函数,在simulink中搭建闭环控制系统,
%            按照选定的采样周期将其离散化,运行ex2.mdl,调整PID参数满足性能要求。
%          2 运行eex2函数,格式  [step1,fix,tstop,idnt]=eex2(temp,t,Ts,kp,ki,kd)
%            kp,ki,kd为simulink仿真得到的参数值。
%          4 运行plot(out,'r-')
% 例如 temp=160;t=160;Ts=0.2;kp=0.1;ki=0.1;kd=0;
  s=serial('com1','baudrate',2400,'parity','none','databits',8,'stopbits',1);
   fopen(s);
     fwrite(s,85,'uchar');  %十进制85就是十六进制55H.
     fwrite(s,16,'uchar'); %十进制16就是十六进制10H.数据
     fwrite(s,00,'uchar');
     fwrite(s,temp,'uchar');
       
error_1=temp;
errori=0;

for i=1:t
   tic; 
    
  fwrite(s,85,'uchar');  %十进制85就是十六进制55H.
  fwrite(s,01,'uchar');   %十进制16就是十六进制01H.数据
  fwrite(s,00,'uchar');
  fwrite(s,00,'uchar');
  idn(i)=fread(s,1,'uint8')+8/255*temp;
 
 
  error=temp-idn(i);
  errord=(error-error_1)/Ts;
  errori=errori+error*Ts;
  
  idn1(i)=kp*error+kd*errord+ki*errori;
  error_1=error; 
  
      fwrite(s,85,'uchar');%十进制85就是十六进制55H.
      fwrite(s,16,'uchar');%十进制16就是十六进制10H.数据
      fwrite(s,00,'uchar');
      fwrite(s,idn1(i),'uint8'); 
      
  ts1=toc; %simulink仿真停止时间
  pause(Ts-ts1); 
  
end 

tstop=Ts*t %simulink仿真停止时间
step1=temp;  %simulink阶跃输入设定值
fix=Ts; %simulink仿真的固定步长
   
temp=00
      fwrite(s,85,'uchar'); %十进制85就是十六进制55H.
      fwrite(s,16,'uchar'); %十进制16就是十六进制10H.数据
      fwrite(s,00,'uchar');
      fwrite(s,temp,'uchar');  
      fwrite(s,85,'uchar');%十进制85就是十六进制55H.
      fwrite(s,16,'uchar');%十进制16就是十六进制10H.数据
      fwrite(s,00,'uchar');
      fwrite(s,temp,'uchar');   
      fwrite(s,85,'uchar');%十进制85就是十六进制55H.
      fwrite(s,16,'uchar');%十进制16就是十六进制10H.数据
      fwrite(s,00,'uchar');
      fwrite(s,temp,'uchar');   
 fclose(s);
 delete(s);
 clear s;
 
idnt=[ 0 idn(6)/6 idn(6)/4 idn(6)/2.5 idn(6)/1.5 idn(6:t) idn(t)]; %实时输出
plot(idnt);
 grid;
legend('实时输出');
hold on
%  plot(out,'r-')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -