Files
matlab-python/Tilt/Fukuzono.m

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