712 lines
35 KiB
Matlab
Executable File
712 lines
35 KiB
Matlab
Executable File
function [alert,alert_local,alarm,alarm_local,Date,RQ,RQ_Loc,DataFuK,...
|
|
DataFuK_local,Tr_mail,Tr_Loc_mail,Tr_Inf,Tr_Inf_Loc,Tr_Sup,Tr_Sup_Loc,...
|
|
Tr_Loc_HR,DataFuK_local_HR,Number,Number_Loc] = Fukuzono(IDcentralina,...
|
|
DTcatena,date,ARRAYdate,yes3D,rNL,NodoTilt,NodoTiltHR,NodoTiltHR3D,conn,FileName)
|
|
|
|
fileID = fopen(FileName,'a');
|
|
fmt = '%s \r';
|
|
|
|
text = 'Fukuzono function started';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
Tr_Loc_HR = [];
|
|
DataFuK_local_HR = [];
|
|
|
|
%% Scarico i dati da DB
|
|
data_rif = ARRAYdate(end)-30; %30
|
|
if data_rif > datenum(date)
|
|
data = datestr(data_rif,'yyyy-mm-dd');
|
|
else
|
|
data = date;
|
|
end
|
|
for n = 1:rNL
|
|
NodeNum = num2str(cell2mat(NodoTilt(n,2)));
|
|
comando = ['select EventDate, EventTime, HShift_local, HShift from ElabDataView where EventDate >= ''' ...
|
|
data ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina ...
|
|
''' and NodeNum = ''' NodeNum ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
Dati = curs.Data;
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,~] = size(Dati);
|
|
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
|
|
Date = datenum(T); % Data
|
|
HShift_local(:,n) = cell2mat(Dati(:,3)); % Loc 2D
|
|
HShift(:,n) = cell2mat(Dati(:,4)); % Cum 2D
|
|
end
|
|
|
|
%% Criterio della velocità positiva - Criterio 0
|
|
[rS,cS] = size(HShift);
|
|
Criterio_0 = zeros(rS-1,cS);
|
|
Criterio_0_local = zeros(rS-1,cS);
|
|
Speed = zeros(rS-1,cS);
|
|
Speed_local = zeros(rS-1,cS);
|
|
for i = 1:cS % nodi
|
|
for j = 4:rS-1 % date
|
|
% Cumulati
|
|
Speed(j,i) = (HShift(j+1,i) - HShift(j,i))/(Date(j+1)-Date(j)); % m/g
|
|
if j == 4
|
|
Speed(j-1,i) = (HShift(j,i) - HShift(j-1,i))/(Date(j)-Date(j-1)); % m/g
|
|
Speed(j-2,i) = (HShift(j-1,i) - HShift(j-2,i))/(Date(j-1)-Date(j-2)); % m/g
|
|
Speed(j-3,i) = (HShift(j-2,i) - HShift(j-3,i))/(Date(j-2)-Date(j-3)); % m/g
|
|
Speed_local(j-1,i) = (HShift_local(j,i) - HShift_local(j-1,i))/(Date(j)-Date(j-1)); % m/g
|
|
Speed_local(j-2,i) = (HShift_local(j-1,i) - HShift_local(j-2,i))/(Date(j-1)-Date(j-2)); % m/g
|
|
Speed_local(j-3,i) = (HShift_local(j-2,i) - HShift_local(j-3,i))/(Date(j-2)-Date(j-3)); % m/g
|
|
end
|
|
if Speed(j,i) > 0 && Speed(j-1,i) > 0 && Speed(j-2,i) > 0 && Speed(j-3,i) > 0
|
|
Criterio_0(j,i) = 1;
|
|
end
|
|
% Locali
|
|
Speed_local(j,i) = (HShift_local(j+1,i) - HShift_local(j,i))/(Date(j+1)-Date(j)); % m/g
|
|
if Speed_local(j,i) > 0 && Speed_local(j-1,i) > 0 && Speed_local(j-2,i) > 0 && Speed_local(j-3,i) > 0
|
|
Criterio_0_local(j,i) = 1;
|
|
end
|
|
|
|
end
|
|
end
|
|
Date = Date(2:end);
|
|
text = 'Criterion 0 executed';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
%% Faccio i calcoli
|
|
[r,c] = size(Speed_local);
|
|
Delta_Speed_local = zeros(r,c);
|
|
Delta_Speed = zeros(r,c);
|
|
diff_Cum = diff(Speed);
|
|
diff_Loc = diff(Speed_local);
|
|
Delta_Speed(2:end,:) = diff_Cum;
|
|
Delta_Speed_local(2:end,:) = diff_Loc;
|
|
act = zeros(r,c);
|
|
act_local = zeros(r,c);
|
|
for i = 1:c % nodi
|
|
for j = 2:r % date
|
|
if Delta_Speed(j,i) > 0
|
|
act(j,i) = 1;
|
|
elseif Delta_Speed(j,i) < 0
|
|
act(j,i) = -1;
|
|
end
|
|
if Delta_Speed_local(j,i) > 0
|
|
act_local(j,i) = 1;
|
|
elseif Delta_Speed_local(j,i) < 0
|
|
act_local(j,i) = -1;
|
|
end
|
|
end
|
|
end
|
|
|
|
%% Criterio della Velocità Crescente - Criterio 1
|
|
Criterio_1 = zeros(r,c);
|
|
Criterio_1_local = zeros(r,c);
|
|
alert = zeros(r,c);
|
|
alert_local = zeros(r,c);
|
|
if r > 10
|
|
for i = 1:c % nodi
|
|
for j = 10:r % date
|
|
if act(j,i) == 1 && act(j-1,i) == 1 && act(j-2,i) == 1 && act(j-3,i) == 1 || ...
|
|
act(j,i) == 1 && act(j-1,i) == 1 && act(j-2,i) == 1 || ...
|
|
act(j,i) == 1 && act(j-1,i) == 1 && act(j-3,i) == 1 || ...
|
|
act(j,i) == 1 && act(j-2,i) == 1 && act(j-3,i) == 1 || ...
|
|
act(j-1,i) == 1 && act(j-2,i) == 1 && act(j-3,i) == 1
|
|
if Criterio_0(j,i) == 1
|
|
Criterio_1(j,i) = 1;
|
|
if act(j,i) == 1 && act(j-1,i) == 1 && act(j-2,i) == 1 && act(j-3,i) == 1 && act(j-4,i) == 1
|
|
alert(j,i) = 1;
|
|
end
|
|
end
|
|
end
|
|
if act_local(j,i) == 1 && act_local(j-1,i) == 1 && act_local(j-2,i) == 1 && act_local(j-3,i) == 1 || ...
|
|
act_local(j,i) == 1 && act_local(j-1,i) == 1 && act_local(j-2,i) == 1 || ...
|
|
act_local(j,i) == 1 && act_local(j-1,i) == 1 && act_local(j-3,i) == 1 || ...
|
|
act_local(j,i) == 1 && act_local(j-2,i) == 1 && act_local(j-3,i) == 1 || ...
|
|
act_local(j-1,i) == 1 && act_local(j-2,i) == 1 && act_local(j-3,i) == 1
|
|
if Criterio_0_local(j,i) == 1
|
|
Criterio_1_local(j,i) = 1;
|
|
if act_local(j,i) == 1 && act_local(j-1,i) == 1 && act_local(j-2,i) == 1 && act_local(j-3,i) == 1 && act_local(j-4,i) == 1
|
|
alert_local(j,i) = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
text = 'Criterion 1 executed';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
%% Criterio delle parabole - Criterio 2
|
|
a = zeros(r,c);
|
|
a_local = zeros(r,c);
|
|
Criterio_2 = zeros(r,c);
|
|
Criterio_2_local = zeros(r,c);
|
|
for i = 1:c % nodi
|
|
for j = 13:r % date
|
|
if Criterio_1(j,i) == 1
|
|
% j-3
|
|
x = Date(j-12:j-3);
|
|
y = Speed(j-12:j-3,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a(j-3,i) = coeff(1,1);
|
|
% j-2
|
|
x = Date(j-11:j-2);
|
|
y = Speed(j-11:j-2,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a(j-2,i) = coeff(1,1);
|
|
% j-1
|
|
x = Date(j-10:j-1);
|
|
y = Speed(j-10:j-1,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a(j-1,i) = coeff(1,1);
|
|
% j
|
|
x = Date(j-9:j);
|
|
y = Speed(j-9:j,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a(j,i) = coeff(1,1);
|
|
% Criterio 2
|
|
if a(j,i) > 0 && a(j-1,i) > 0 && a(j-2,i) > 0 && a(j-3,i) > 0 ||...
|
|
a(j,i) > 0 && a(j-1,i) > 0 && a(j-2,i) > 0 ||...
|
|
a(j,i) > 0 && a(j-1,i) > 0 && a(j-3,i) > 0 ||...
|
|
a(j,i) > 0 && a(j-2,i) > 0 && a(j-3,i) > 0 ||...
|
|
a(j-1,i) > 0 && a(j-2,i) > 0 && a(j-3,i) > 0
|
|
|
|
Criterio_2(j,i) = 1;
|
|
end
|
|
end
|
|
if Criterio_1_local(j,i) == 1
|
|
% j-3
|
|
x = Date(j-12:j-3);
|
|
y = Speed_local(j-12:j-3,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a_local(j-3,i) = coeff(1,1);
|
|
% j-2
|
|
x = Date(j-11:j-2);
|
|
y = Speed_local(j-11:j-2,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a_local(j-2,i) = coeff(1,1);
|
|
% j-1
|
|
x = Date(j-10:j-1);
|
|
y = Speed_local(j-10:j-1,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a_local(j-1,i) = coeff(1,1);
|
|
% j
|
|
x = Date(j-9:j);
|
|
y = Speed_local(j-9:j,i);
|
|
f = fit(x,y,'poly2');
|
|
coeff = coeffvalues(f);
|
|
a_local(j,i) = coeff(1,1);
|
|
if a_local(j,i) > 0 && a_local(j-1,i) > 0 && a_local(j-2,i) > 0 && a_local(j-3,i) > 0 || ...
|
|
a_local(j,i) > 0 && a_local(j-1,i) > 0 && a_local(j-2,i) > 0 || ...
|
|
a_local(j,i) > 0 && a_local(j-1,i) > 0 && a_local(j-3,i) > 0 || ...
|
|
a_local(j,i) > 0 && a_local(j-2,i) > 0 && a_local(j-3,i) > 0 || ...
|
|
a_local(j-1,i) > 0 && a_local(j-2,i) > 0 && a_local(j-3,i) > 0
|
|
|
|
Criterio_2_local(j,i) = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
text = 'Criterion 2 executed';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
%% Criterio della concavità crescente - Criterio 3
|
|
Delta_a = zeros(r,c);
|
|
Delta_a_local = zeros(r,c);
|
|
diff_a = diff(a);
|
|
diff_a_Loc = diff(a_local);
|
|
Delta_a(2:end,:) = diff_a;
|
|
Delta_a_local(2:end,:) = diff_a_Loc;
|
|
Criterio_3 = zeros(r,c);
|
|
Criterio_3_local = zeros(r,c);
|
|
for i = 1:c % nodi
|
|
for j = 13:r % date
|
|
if Criterio_2(j,i) == 1
|
|
if Delta_a(j,i) > 0 && Delta_a(j-1,i) > 0 && Delta_a(j-2,i) > 0 && Delta_a(j-3,i) > 0 || ...
|
|
Delta_a(j,i) > 0 && Delta_a(j-1,i) > 0 && Delta_a(j-2,i) > 0 || ...
|
|
Delta_a(j,i) > 0 && Delta_a(j-1,i) > 0 && Delta_a(j-3,i) > 0 || ...
|
|
Delta_a(j,i) > 0 && Delta_a(j-2,i) > 0 && Delta_a(j-3,i) > 0 || ...
|
|
Delta_a(j-1,i) > 0 && Delta_a(j-2,i) > 0 && Delta_a(j-3,i) > 0
|
|
|
|
Criterio_3(j,i) = 1;
|
|
end
|
|
end
|
|
if Criterio_2_local(j,i) == 1
|
|
if Delta_a_local(j,i) > 0 && Delta_a_local(j-1,i) > 0 && Delta_a_local(j-2,i) > 0 && Delta_a_local(j-3,i) > 0 ||...
|
|
Delta_a_local(j,i) > 0 && Delta_a_local(j-1,i) > 0 && Delta_a_local(j-2,i) > 0 ||...
|
|
Delta_a_local(j,i) > 0 && Delta_a_local(j-1,i) > 0 && Delta_a_local(j-3,i) > 0 ||...
|
|
Delta_a_local(j,i) > 0 && Delta_a_local(j-2,i) > 0 && Delta_a_local(j-3,i) > 0 ||...
|
|
Delta_a_local(j-1,i) > 0 && Delta_a_local(j-2,i) > 0 && Delta_a_local(j-3,i) > 0
|
|
|
|
Criterio_3_local(j,i) = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
text = 'Criterion 3 executed';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
%% Criterio di Fukuzono
|
|
alarm = zeros(r,c);
|
|
alarm_local = zeros(r,c);
|
|
RQ = zeros(r,c);
|
|
Number = zeros(r,c);
|
|
RQ_Loc = zeros(r,c);
|
|
Number_Loc = zeros(r,c);
|
|
Tr = zeros(r,c) - 99;
|
|
Tr_Inf = zeros(r,c) - 99;
|
|
Tr_Sup = zeros(r,c) - 99;
|
|
Tr_mail = zeros(r,c) - 99;
|
|
Tr_Loc = zeros(r,c) - 99;
|
|
Tr_Inf_Loc = zeros(r,c) - 99;
|
|
Tr_Sup_Loc = zeros(r,c) - 99;
|
|
Tr_Loc_mail = zeros(r,c) - 99;
|
|
DataFuK = zeros(r,c);
|
|
DataFuK_local = zeros(r,c);
|
|
for i = 1:c % nodi
|
|
j = 13;
|
|
% -------------- Cumulati --------------------------
|
|
while j <=(r-1)
|
|
hold off
|
|
GIGI = 0;
|
|
if Criterio_3(j,i) == 1
|
|
Tempo = Date(j-3:j); % giorni
|
|
Vel = 1000*Speed(j-3:j,i); % mm/g
|
|
Vel(Vel==0) = 0.0000000001;
|
|
Inv_Vel = 1./Vel;
|
|
[f,rsquare] = fit(Tempo,Inv_Vel,'poly1');
|
|
retta = coeffvalues(f);
|
|
m = retta(1,1); % m
|
|
q = retta(1,2); % q
|
|
% Time of failure
|
|
Tr(j,i) = -q/m - Date(j);
|
|
if Tr(j,i) > 0 && Tr(j,i) < 30 % giorni
|
|
% RQ
|
|
RQ(j,i) = rsquare.rsquare;
|
|
% Grafico Inv V - T
|
|
Data_Img = datestr(Date(j-3),'dd-mm-yyyy');
|
|
Tempo_Img = datestr(Date(j-3),'HH-MM-SS');
|
|
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
|
|
hold on
|
|
legend(num2str(RQ(j,i)));
|
|
Y = m*Tempo + q;
|
|
plot(Tempo,Y);
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Inverse of Velocity [d/mm]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Inv_Vel)+max(Inv_Vel)/10])
|
|
% Grafico Vel - T
|
|
hold off
|
|
fig2 = plot(Tempo,Vel,'-o','LineStyle','none');
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Velocity [mm/d]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Vel)+max(Vel)/10])
|
|
end
|
|
% dato successivo
|
|
for n = 1:(r-j)
|
|
if Criterio_3(n+j,i) == 1 || Criterio_3(n+j-1,i) == 1
|
|
Tempo = Date(j-3:j+n); % giorni
|
|
Vel = 1000*Speed(j-3:j+n,i); % mm/g
|
|
Vel(Vel==0) = 0.0000000001;
|
|
Inv_Vel = 1./Vel;
|
|
[f,rsquare] = fit(Tempo,Inv_Vel,'poly1');
|
|
RQ(j+n,i) = rsquare.rsquare;
|
|
retta = coeffvalues(f);
|
|
m = retta(1,1);
|
|
q = retta(1,2);
|
|
% Time of Failure
|
|
Tr(j+n,i) = -q/m - Date(j+n);
|
|
if Tr(j+n,i) > 0 && Tr(j+n,i) < 30 % giorni
|
|
if RQ(j+n,i) >= 0.85
|
|
Tr_mail(j+n,i) = -q/m - Date(j+n);% attivo
|
|
Tr_mail(j+n-1,i) = -99; % disattivo
|
|
alarm(j+n-1,i) = 0; % disattivo
|
|
alarm(j+n,i) = 1; % attivo
|
|
DataFuK(j+n,i) = Date(j-3);
|
|
DataFuK(j,i) = 0;
|
|
Data_Img = datestr(Date(j-3),'dd-mm-yyyy');
|
|
Tempo_Img = datestr(Date(j-3),'HH-MM-SS');
|
|
% Grafico asintotico
|
|
hold off
|
|
fig2 = plot(Tempo,Vel,'-o','LineStyle','none');
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Velocity [mm/d]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Vel)+max(Vel)/10])
|
|
Nodo = cell2mat(NodoTilt(i,2));
|
|
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img,'_',Tempo_Img,'_Vel.jpg');
|
|
saveas(fig2,filename)
|
|
% Grafico inverso velocità
|
|
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
|
|
hold on
|
|
legend(num2str(RQ(j+n,i)));
|
|
Y = m*Tempo + q;
|
|
Y = [Y; 0];
|
|
Tempo_End = -q/m;
|
|
Tempo_G = [Tempo; Tempo_End];
|
|
plot(Tempo_G,Y);
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Inverse of Velocity [d/mm]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Inv_Vel)+max(Inv_Vel)/10])
|
|
LIM = floor(fig.XData(1));
|
|
Nodo = cell2mat(NodoTilt(i,2));
|
|
% Variazione statistica dei dati di
|
|
% monitoraggio
|
|
% Limite Superiore
|
|
Inv_Vel_Sup = Inv_Vel + mean(Inv_Vel)*(1-RQ(j+n,i));
|
|
[f,rsquare] = fit(Tempo,Inv_Vel_Sup,'poly1');
|
|
retta = coeffvalues(f);
|
|
m_Sup = retta(1,1);
|
|
q_Sup = retta(1,2);
|
|
Tr_Sup(j+n,i) = -q_Sup/m_Sup;
|
|
Tr_Sup(j+n-1,i) = 99;
|
|
Y_Sup = m_Sup*Tempo + q_Sup;
|
|
Y_Sup = [Y_Sup; 0];
|
|
Tempo_End = -q_Sup/m_Sup;
|
|
Tempo_G = [Tempo; Tempo_End];
|
|
plot(Tempo_G,Y_Sup,'--');
|
|
% Limite Inferiore
|
|
Inv_Vel_Inf = Inv_Vel - mean(Inv_Vel)*(1-RQ(j+n,i));
|
|
[f,rsquare] = fit(Tempo,Inv_Vel_Inf,'poly1');
|
|
retta = coeffvalues(f);
|
|
m_Inf = retta(1,1);
|
|
q_Inf = retta(1,2);
|
|
Tr_Inf(j+n,i) = -q_Inf/m_Inf;
|
|
Tr_Inf(j+n-1,i) = 99;
|
|
Y_Inf = m_Inf*Tempo + q_Inf;
|
|
Y_Inf = [Y_Inf; 0];
|
|
Tempo_End = -q_Inf/m_Inf;
|
|
Tempo_G = [Tempo; Tempo_End];
|
|
plot(Tempo_G,Y_Inf,'--');
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
GIGI = 1;
|
|
N = n;
|
|
Number(j+N,i) = N+4;
|
|
end
|
|
end
|
|
else
|
|
break
|
|
end
|
|
end
|
|
if GIGI == 1
|
|
hold on
|
|
fig = plot(Date(j+N)+Tr(j+N,i),0,'-d','LineStyle','none','Color','r');
|
|
plot(Tr_Sup(j+N,i),0,'-v','LineStyle','none','Color','k');
|
|
LIM_S = ceil(Tr_Sup(j+N,i));
|
|
plot(Tr_Inf(j+N,i),0,'-v','LineStyle','none','Color','k');
|
|
legend(['RQ: ' num2str(RQ(j+N,i))]);
|
|
h = gca; % Get axis to modify
|
|
h.XAxis.MinorTick = 'on'; % Must turn on minor ticks if they are off
|
|
h.XAxis.MinorTickValues = LIM(1):1/24:LIM_S(end); % Minor ticks which don't line up with majors
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
grid on
|
|
grid minor
|
|
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img,'_',Tempo_Img,'.jpg');
|
|
saveas(fig,filename)
|
|
end
|
|
j = j+n+1;
|
|
else
|
|
j = j+1;
|
|
end
|
|
end
|
|
% -------------- Locali --------------------------
|
|
j = 13;
|
|
while j <=(r-1)
|
|
hold off
|
|
DIBBA = 0;
|
|
if Criterio_3_local(j,i) == 1
|
|
Tempo = Date(j-3:j); % giorni
|
|
Vel = 1000*Speed_local(j-3:j,i); % mm/g
|
|
Vel(Vel==0) = 0.0000000001;
|
|
Inv_Vel = 1./Vel;
|
|
[f,rsquare] = fit(Tempo,Inv_Vel,'poly1');
|
|
retta = coeffvalues(f);
|
|
m = retta(1,1);
|
|
q = retta(1,2);
|
|
% Time of Failure
|
|
Tr_Loc(j,i) = -q/m - Date(j);
|
|
if Tr_Loc(j,i) > 0 && Tr_Loc(j,i) < 30
|
|
% RQ
|
|
RQ_Loc(j,i) = rsquare.rsquare;
|
|
% Grafico Inv V - T
|
|
Data_Img = datestr(Date(j-3),'dd-mm-yyyy');
|
|
Tempo_Img = datestr(Date(j-3),'HH-MM-SS');
|
|
% Grafico
|
|
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
|
|
hold on
|
|
legend(num2str(RQ_Loc(j,i)));
|
|
Y = m*Tempo + q;
|
|
plot(Tempo,Y);
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Inverse of Velocity [d/mm]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Inv_Vel)+max(Inv_Vel)/10])
|
|
% Grafico Vel - T
|
|
hold off
|
|
fig2 = plot(Tempo,Vel,'-o','LineStyle','none');
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Velocity [mm/d]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Vel)+max(Vel)/10])
|
|
end
|
|
% dato successivo
|
|
for n = 1:(r-j)
|
|
if Criterio_3_local(n+j,i) == 1 || Criterio_3_local(n+j-1,i) == 1
|
|
Tempo = Date(j-3:j+n); % giorni
|
|
Vel = 1000*Speed_local(j-3:j+n,i); % mm/g
|
|
Vel(Vel==0) = 0.0000000001;
|
|
Inv_Vel = 1./Vel;
|
|
[f,rsquare] = fit(Tempo,Inv_Vel,'poly1');
|
|
RQ_Loc(j+n,i) = rsquare.rsquare;
|
|
retta = coeffvalues(f);
|
|
m = retta(1,1);
|
|
q = retta(1,2);
|
|
% Time of Failure
|
|
Tr_Loc(j+n,i) = -q/m - Date(j+n);
|
|
if Tr_Loc(j+n,i) > 0 && Tr_Loc(j+n,i) < 30 % giorni
|
|
if RQ_Loc(j+n,i) >= 0.85
|
|
Tr_Loc_mail(j+n,i) = -q/m - Date(j+n);
|
|
Tr_Loc_mail(j+n-1,i) = -99; % disattivo
|
|
alarm_local(j+n-1,i) = 0; % disattivo
|
|
alarm_local(j+n,i) = 1; % attivo
|
|
DataFuK_local(j+n,i) = Date(j-3);
|
|
DataFuK_local(j,i) = 0;
|
|
Data_Img = datestr(Date(j-3),'dd-mm-yyyy');
|
|
Tempo_Img = datestr(Date(j-3),'HH-MM-SS');
|
|
% Grafico Asintotico
|
|
hold off
|
|
fig2 = plot(Tempo,Vel,'-o','LineStyle','none');
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Velocity [mm/d]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Vel)+max(Vel)/10])
|
|
Nodo = cell2mat(NodoTilt(i,2));
|
|
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img,'_',Tempo_Img,'-Local_Vel.jpg');
|
|
saveas(fig2,filename)
|
|
% Grafico inverso velocità
|
|
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
|
|
hold on
|
|
legend(num2str(RQ_Loc(j+n,i)));
|
|
Y = m*Tempo + q;
|
|
Y = [Y; 0];
|
|
Tempo_End = -q/m;
|
|
Tempo_G = [Tempo; Tempo_End];
|
|
plot(Tempo_G,Y);
|
|
title('Time of Failure prediction model');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Inverse of Velocity [d/mm]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Inv_Vel)+max(Inv_Vel)/10])
|
|
LIM = floor(fig.XData(1));
|
|
Nodo = cell2mat(NodoTilt(i,2));
|
|
% Variazione statistica dei dati di
|
|
% monitoraggio
|
|
% Limite Superiore
|
|
Inv_Vel_Sup = Inv_Vel + mean(Inv_Vel)*(1-RQ_Loc(j+n,i));
|
|
[f,rsquare] = fit(Tempo,Inv_Vel_Sup,'poly1');
|
|
retta = coeffvalues(f);
|
|
m_Sup = retta(1,1);
|
|
q_Sup = retta(1,2);
|
|
Tr_Loc_Sup(j+n,i) = -q_Sup/m_Sup;
|
|
Tr_Loc_Sup(j+n-1,i) = 99;
|
|
Y_Sup = m_Sup*Tempo + q_Sup;
|
|
Y_Sup = [Y_Sup; 0];
|
|
Tempo_End = -q_Sup/m_Sup;
|
|
Tempo_G = [Tempo; Tempo_End];
|
|
plot(Tempo_G,Y_Sup,'--');
|
|
% Limite Inferiore
|
|
Inv_Vel_Inf = Inv_Vel - mean(Inv_Vel)*(1-RQ_Loc(j+n,i));
|
|
[f,rsquare] = fit(Tempo,Inv_Vel_Inf,'poly1');
|
|
retta = coeffvalues(f);
|
|
m_Inf = retta(1,1);
|
|
q_Inf = retta(1,2);
|
|
Tr_Loc_Inf(j+n,i) = -q_Inf/m_Inf;
|
|
Tr_Loc_Inf(j+n-1,i) = 99;
|
|
Y_Inf = m_Inf*Tempo + q_Inf;
|
|
Y_Inf = [Y_Inf; 0];
|
|
Tempo_End = -q_Inf/m_Inf;
|
|
Tempo_G = [Tempo; Tempo_End];
|
|
plot(Tempo_G,Y_Inf,'--');
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
DIBBA = 1;
|
|
N = n;
|
|
Number_Loc(j+N,i) = N+4;
|
|
end
|
|
end
|
|
else
|
|
break
|
|
end
|
|
end
|
|
if DIBBA == 1
|
|
hold on
|
|
fig = plot(Date(j+N)+Tr_Loc(j+N,i),0,'-d','LineStyle','none','Color','r');
|
|
plot(Tr_Loc_Sup(j+N,i),0,'-v','LineStyle','none','Color','k');
|
|
LIM_S = ceil(Tr_Sup(j+N,i));
|
|
plot(Tr_Loc_Inf(j+N,i),0,'-v','LineStyle','none','Color','k');
|
|
legend(['RQ: ' num2str(RQ_Loc(j+N,i))]);
|
|
h = gca; % Get axis to modify
|
|
h.XAxis.MinorTick = 'on'; % Must turn on minor ticks if they are off
|
|
h.XAxis.MinorTickValues = LIM(1):1/24:LIM_S(end); % Minor ticks which don't line up with majors
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
grid on
|
|
grid minor
|
|
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img,'_',Tempo_Img,'-Local.jpg');
|
|
saveas(fig,filename)
|
|
if yes3D == 1
|
|
HRindex = find(cell2mat(NodoTiltHR3D(:,2))==Nodo);
|
|
if isempty(HRindex) ~= 1
|
|
NodeHR = NodoTiltHR3D(HRindex,3);
|
|
HRprog = find(cell2mat(NodoTiltHR(:,2))==cell2mat(NodeHR));
|
|
[rT,~] = size(Tempo);
|
|
DateHR = zeros(rT+1,1);
|
|
HShift_local_HR = zeros(rT,1);
|
|
nHR = 1;
|
|
for tt = 1:rT+1
|
|
if tt == 1
|
|
Data_HR = datestr(Date(j-4),'yyyy-mm-dd');
|
|
Tempo_HR = datestr(Date(j-4),'HH:MM:SS');
|
|
else
|
|
Data_HR = datestr(Tempo(tt-1),'yyyy-mm-dd');
|
|
Tempo_HR = datestr(Tempo(tt-1),'HH:MM:SS');
|
|
end
|
|
NodeNum = num2str(cell2mat(NodeHR));
|
|
comando = ['select EventDate, EventTime, HShift_local from ElabDataView where EventDate = ''' ...
|
|
Data_HR ''' and EventTime = ''' Tempo_HR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
Dati_HR = curs.Data;
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,~] = size(Dati_HR);
|
|
T = [cell2mat(Dati_HR(:,1)) repmat(' ', [rD,1]) cell2mat(Dati_HR(:,2))];
|
|
DateHR(nHR,1) = datenum(T); % Data
|
|
HShift_local_HR(nHR,1) = cell2mat(Dati_HR(:,3)); % Loc 2D
|
|
nHR = nHR+1;
|
|
end
|
|
[rS,~] = size(HShift_local_HR);
|
|
Speed_local_HR = zeros(rS-1,1);
|
|
DateGiornoHR = DateHR(2:end);
|
|
for jH = 4:rS-1 % date
|
|
% Locali
|
|
Speed_local_HR(jH,1) = (HShift_local(jH+1,1) - HShift_local(jH,1))/(DateHR(jH+1)-DateHR(jH)); % m/g
|
|
if jH == 4
|
|
Speed_local_HR(jH-1,1) = (HShift_local_HR(jH,1) - HShift_local_HR(jH-1,1))/(DateHR(jH)-DateHR(jH-1)); % m/g
|
|
Speed_local_HR(jH-2,1) = (HShift_local_HR(jH-1,1) - HShift_local_HR(jH-2,1))/(DateHR(jH-1)-DateHR(jH-2)); % m/g
|
|
Speed_local_HR(jH-3,1) = (HShift_local_HR(jH-2,1) - HShift_local_HR(jH-3,1))/(DateHR(jH-2)-DateHR(jH-3)); % m/g
|
|
end
|
|
end
|
|
|
|
% Velocità in metri/giorno
|
|
jH = find(DateHR == Date(j))-1;
|
|
|
|
% ---Criterio della velocità positiva Criterio 0---
|
|
if Speed_local_HR(jH,1) > 0 && ...
|
|
Speed_local_HR(jH-1,1) > 0 ...
|
|
&& Speed_local_HR(jH-2,1) > 0 ...
|
|
&& Speed_local_HR(jH-3,1) > 0
|
|
|
|
% --- Calcolo Fukuzono ---
|
|
TempoHR = DateGiornoHR(jH-3:jH+N); % giorni
|
|
Vel_HR = 1000*Speed_local_HR(jH-3:jH+N,1); % mm/g
|
|
Vel_HR(Vel_HR==0) = 0.0000000001;
|
|
Inv_Vel_HR = 1./Vel_HR;
|
|
[f,rsquare] = fit(TempoHR,Inv_Vel_HR,'poly1');
|
|
RQ_Loc_HR(jH+N,HRprog) = rsquare.rsquare;
|
|
retta = coeffvalues(f);
|
|
m = retta(1,1);
|
|
q = retta(1,2);
|
|
% Time of Failure
|
|
Tr_Loc_HR(jH+N,HRprog) = -q/m - DateGiornoHR(jH+N);
|
|
if Tr_Loc_HR(jH+N,HRprog) > 0 && Tr_Loc_HR(jH+N,HRprog) < 30 % giorni
|
|
if RQ_Loc_HR(jH+N,i) >= 0.85
|
|
DataFuK_local_HR(jH+N,HRprog) = DateGiornoHR(jH-3);
|
|
Data_Img_HR = datestr(DateGiornoHR(jH-3),'dd-mm-yyyy');
|
|
Tempo_Img_HR = datestr(DateGiornoHR(jH-3),'HH-MM-SS');
|
|
% Grafico Asintotico
|
|
fig2 = plot(TempoHR,Vel_HR,'-o','LineStyle','none');
|
|
title('Time of Failure prediction model evaluated with Electrolytic Cell');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Velocity [mm/d]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Vel_HR)+max(Vel_HR)/10])
|
|
Nodo = cell2mat(NodoTiltHR(HRprog,2));
|
|
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img_HR,'_',Tempo_Img_HR,'-Local_Vel.jpg');
|
|
saveas(fig2,filename)
|
|
% Grafico inverso velocità
|
|
fig = plot(TempoHR,Inv_Vel_HR,'-o','LineStyle','none');
|
|
hold on
|
|
legend(num2str(RQ_Loc_HR(jH+N,i)));
|
|
Y_HR = m*TempoHR + q;
|
|
plot(Tempo,Y_HR);
|
|
title('Time of Failure prediction model evaluated with Electrolytic Cell');
|
|
xlabel('Date [dd/mm/yyyy HH:MM]')
|
|
ylabel('Inverse of Velocity [d/mm]')
|
|
datetick('x','dd/mm/yyyy HH:MM')
|
|
ylim([0 max(Inv_Vel_HR)+max(Inv_Vel_HR)/10])
|
|
LIM = floor(fig.XData(1));
|
|
fig = plot(DateGiornoHR(jH+N)+Tr_Loc_HR(jH+N,HRprog),0,'-d','LineStyle','none','Color','r');
|
|
LIM_S = ceil(Tr_Loc_HR(jH+N,HRprog)+DateGiornoHR(jH+N));
|
|
h = gca; % Get axis to modify
|
|
xlim([LIM LIM_S])
|
|
h.XAxis.MinorTick = 'on'; % Must turn on minor ticks if they are off
|
|
h.XAxis.MinorTickValues = LIM:1/4:LIM_S; % Minor ticks which don't line up with majors
|
|
h.XAxis.TickValues = LIM:1:LIM_S;
|
|
datetick('x','dd/mm/yyyy')
|
|
grid on
|
|
grid minor
|
|
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img_HR,'_',Tempo_Img_HR,'-Local.jpg');
|
|
saveas(fig,filename)
|
|
else
|
|
Tr_Loc_HR(jH+N,HRprog) = 0;
|
|
end
|
|
else
|
|
Tr_Loc_HR(jH+N,HRprog) = 0;
|
|
end
|
|
else
|
|
Tr_Loc_HR(jH,HRprog) = 0;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
j = j+n+1;
|
|
else
|
|
j = j+1;
|
|
end
|
|
end
|
|
end
|
|
text = 'Fukuzono Calculation executed';
|
|
fprintf(fileID,fmt,text);
|
|
else
|
|
alert = zeros(r,c);
|
|
alert_local = zeros(r,c);
|
|
alarm = zeros(r,c);
|
|
alarm_local = zeros(r,c);
|
|
RQ = zeros(r,c);
|
|
Number = zeros(r,c);
|
|
RQ_Loc = zeros(r,c);
|
|
Number_Loc = zeros(r,c);
|
|
Tr_Inf = zeros(r,c) - 99;
|
|
Tr_Sup = zeros(r,c) - 99;
|
|
Tr_mail = zeros(r,c) - 99;
|
|
Tr_Inf_Loc = zeros(r,c) - 99;
|
|
Tr_Sup_Loc = zeros(r,c) - 99;
|
|
Tr_Loc_mail = zeros(r,c) - 99;
|
|
DataFuK = zeros(r,c);
|
|
DataFuK_local = zeros(r,c);
|
|
end
|
|
|
|
text = 'Fukuzono Function ended';
|
|
fprintf(fileID,fmt,text);
|
|
fclose(fileID);
|
|
|
|
end |