故障分析基于matlab三容水箱故障诊断含Matlab源码 1485期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了故障分析基于matlab三容水箱故障诊断含Matlab源码 1485期相关的知识,希望对你有一定的参考价值。

一、获取代码方式

获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

获取代码方式2:
通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。

获取代码方式3:
完整代码已上传我的资源:【故障分析】基于matlab三容水箱故障诊断【含Matlab源码 1485期】

备注:开通CSDN会员,仅只能免费获得1份代码(有效期为开通日起,三天内有效);
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、部分源代码

clear;
clc;

%%%%%%%%四种故障%%%%%
t=1:1:3000        ;  %设定时间基准
for i=1:size(t)           %设定时间基准
   if i>=10;              
       pianyi(i)=1;
   else   pianyi(i)=0;
   end
   
   if i>=10&i<=20;              
       pianyi2(i)=1;
   else   pianyi2(i)=0;
   end
   
   if i>20;             
       pianyi3(i)=1;
   else   pianyi3(i)=0;
   end
   
      if i<=10;             
       pianyi4(i)=1;
   else   pianyi4(i)=0;
   end
   
  

  end                                                %设定误差出现基准
  
wave=0.01*randn(size(t));                             % matlab函数randn:产生正态分布的随机数或矩阵的函数
rootwave=7+wave;


PCHA=0.5*pianyi;                                          %设定误差类型 偏差故障
PYI=0.0125*pianyi.*(t-10);                                %设定误差类型 漂移故障
JDU=2*pianyi.*normrnd(0,0.05,size(t)) ;                   %设定误差类型 精度下降故障
WQUAN=0.5*pianyi3+0.05*pianyi2.*(t-10)+pianyi4.*wave;     %设定误差类型 完全故障
xmin=0 ; 
xmax=50;
ymin=6.5;
ymax=8;




%%%%%%%%%%%PID调节三水箱%%%%
kp1=30;ki1=0.2;kd1=5;
kp2=25;ki2=0.2;kd2=5;
h1set=25;h2set=20;
c1=0.450289;c2=0.611429;c3=0.461526;
noise1=rand(1)*0.01;noise2=rand(1)*0.01;noise3=rand(1)*0.01;
    %s = rand('state')
    %rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组。
    %Y = rand(n) 返回一个n x n的随机矩阵。如果n不是数量,则返回错误信息。
    %Y = rand(m,n) 或 Y = rand([m n]) 返回一个m x n的随机矩阵。
    %Y = rand(m,n,p,...) 或 Y = rand([m n p...]) 产生随机数组。
    %Y = rand(size(A)) 返回一个和A有相同尺寸的随机矩阵。
g=981;
Sp=0.5;
    %h10=0;h20=0;h30=0;
u1=0;u2=0;
A=154;
h1=0;h2=0;h3=0;   
Q23min=-80.5;Q23max=80.5;
Q13min=-60;Q13max=60;
Q20min=0;Q20max=60;
h1min=0;h1max=100;
h2min=0;h2max=100;
h3min=0;h3max=100;
u2min=0;u2max=100;
u1min=0;u1max=100;
error1=0;error2=0;

for k=1:3000
  
    
    
Q13(k)=0.5*c1*Sp*sign(h1(k)-h3(k))*sqrt(2*g*abs(h1(k)-h3(k)));
Q23(k)=0.5*c3*Sp*sign(h3(k)-h2(k))*sqrt(2*g*abs(h3(k)-h2(k)));
Q20(k)=0.5*c2*Sp*sqrt(2*g*h2(k));



if mod(k,10)==0 %取余数
error1(k)=h1set-h1(k);%确立偏差

    else
    if k==1
     error1(k)=error1;
    else
     error1(k)=error1(k-1);
end
end

if  k==1
    u1(k)=kp1*error1+ki1*error1*ones(k,1); %阀门1的PID算法在Matlab中的实现,u1=Q1
                                            %ones(m,n)表示生成一个m行n列且所有元素都是1的矩阵

    %WQUAN
end

 
    



if mod(k,5)==0
error2(k)=h2set-h2(k);
    else
    if k==1
     error2(k)=error2;
    else
     error2(k)=error2(k-1);
     end
end



if  k==1
     u2(k)=kp2*error2+ki2*error2*ones(k,1);
else
     u2(k)=kp2*error2(k)+ki2*error2*ones(k,1)+kd2*(error2(k)-error2(k-1));
    % u2(k)=kp2*error2(k)+ki2*error2*ones(k,1)+kd2*(error2(k)-error2(k-1))+PCHA(k);
    %PCHA(k)
    %PYI
    %JDU
    %WQUAN



end

h1(k+1)= h1(k)+0.1*((u1(k)-Q13(k))/A+noise1); 
h3(k+1)= h3(k)+0.1*((Q13(k)-Q23(k))/A+noise3); 
h2(k+1)= h2(k)+0.1*((u2(k)+Q23(k)-Q20(k))/A+noise2);
%h1(k+1)=a1(k);
%h2(k+1)=a2(k);
%h3(k+1)=a3(k);



 if h1(k)>h1max;
       h1(k)=h1max;                           %%%%%%%防止h1,h2,h3饱和输出,满液位后水自动溢出排掉
   end                                    %%%%%%%防止h1,h2,h3饱和输出,满液位后水自动溢出排掉
                                      %%%%%%%防止h1,h2,h3饱和输出,满液位后水自动溢出排掉

   if h3(k)>h3max;
       h3(k)=h3max;
   end



   if Q20(k)>Q20max;
       Q20(k)=Q20max;
   end

   if Q13(k)>Q13max;
       Q13(k)=Q13max;
   end
   
      if Q13(k)<Q13min;
       Q13(k)=Q13min;
      end
   
   
   if Q23(k)>Q23max;
      Q23(k)=Q23max;
   end

   if Q23(k)<Q23min;
      Q23(k)=Q23min;
   end

  if u1(k)<u1min;
     u1(k)=u1min;
  end
   
   if u1(k)>u1max;
      u1(k)=u1max;
   end

end


%%%%%%PID调节结束%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%液位高度变化图像%%%%%%%%%%%%%
figure(1)
subplot(1,3,1)
hold on
plot(h1);
x1=xlabel('执行次数');
x2=ylabel('液位高速');
title('液位 H1');

subplot(1,3,2)
plot(h3)
x1=xlabel('执行次数');
x2=ylabel('液位高速');
title('液位 H3');  

subplot(1,3,3)
hold on
plot(h2);
x1=xlabel('执行次数');
x2=ylabel('液位高速');
title('液位 H2');



%%%%%%%%%%%%%%%%%%%%%%%%Q13,Q23,Q20图像%%%%%%%%%%%%%%%%%%%%%%%
figure(2)
subplot(1,3,1)
plot(Q13);
title('Q13');

subplot(1,3,2)
plot(Q23);
title('Q23');


subplot(1,3,3)
plot(Q20);
title('Q20');


%%%%%%%%%%%%画 出 阀 门 U1 和 U2 开 度 的 图 形%%%%%%%%%%%%%%%%%%%
figure(3)
subplot(1,2,1)
plot(u1);
title('阀门U1流量');

subplot(1,2,2)
plot(u2);
title('阀门U2流量');


xlswrite('正常数据.xls',H1,'sheet1','A')
xlswrite('正常数据.xls',H2,'sheet1','B')
xlswrite('正常数据.xls',H3,'sheet1','C')
xlswrite('正常数据.xls',q13,'sheet1','D')
xlswrite('正常数据.xls',q23,'sheet1','E')
xlswrite('正常数据.xls',q20,'sheet1','F')

三、运行结果




四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

以上是关于故障分析基于matlab三容水箱故障诊断含Matlab源码 1485期的主要内容,如果未能解决你的问题,请参考以下文章

三容水箱系统故障诊断算法研究

故障诊断分析基于matlab FFT轴承故障诊断含Matlab源码 2001期

故障诊断分析基于matlab FFT轴承故障诊断(包络谱)含Matlab源码 2002期

故障诊断分析基于matlab概率神经网络柴油机故障诊断含Matlab源码 1754期

故障诊断分析基于matlab VMD内圈故障信号时域频域分析含Matlab源码 2344期

故障诊断分析基于matlab FFT轴承故障诊断含Matlab源码 1397期