Files
matlab-python/Tilt/Fukuzono_Giornaliero.m

725 lines
35 KiB
Matlab
Executable File

function [alarm_STORICO,alarm_local_STORICO,DateGiorno,Tr_Loc_Sup_S,Tr_Loc_Inf_S,...
Tr_Loc_S,Tr_Sup_S,Tr_Inf_S,Tr_S,Tr_Loc_HR_S,Tr_mail_S,Tr_Loc_mail_S,DataFuK_S,...
DataFuK_local_S,DataFuK_local_HR_S,Number_S,Number_Loc_S,RQ_S,RQ_Loc_S] = ...
Fukuzono_Giornaliero(IDcentralina,DTcatena,date,ARRAYdate,yes3D,rNL,NodoTilt,...
NodoTiltHR,NodoTiltHR3D,conn,FileName)
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'Fukuzono_Giornaliero function started';
fprintf(fileID,fmt,text);
data_rif = ARRAYdate(end)-45; % 45
Tr_Loc_HR_S = [];
DataFuK_local_HR_S = [];
%% Scarico i dati da DB
% Tilt Link V
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
%% Calcolo una singola velocità media giornaliera
[rDate,~] = size(Date);
day = 0;
fine = rDate;
diffDate = 0;
n = 2;
period = 1; % calcolo giornaliero
Indici(1,1) = rDate;
while day <= rDate
while diffDate < period
day = day+1;
if day >= rDate
break
end
diffDate = Date(fine) - Date(rDate-day);
end
if day >= rDate
break
end
Indici(n,1) = rDate-day;
n = n+1;
diffDate = 0;
fine = rDate-day;
end
Indici = flipud(Indici);
[rI,~] = size(Indici);
DateGiorno(1,1) = Date(1,1);
if rI < 2
Speed = [];
Speed_local = [];
DateGiorno = [];
else
for s = 2:rI
Speed(s,:) = (HShift(Indici(s),:) - HShift(Indici(s-1),:))/(Date(Indici(s),1) - Date(Indici(s-1),:));
Speed_local(s,:) = (HShift_local(Indici(s),:) - HShift_local(Indici(s-1),:))/(Date(Indici(s),1) - Date(Indici(s-1),:));
DateGiorno(s,1) = Date(Indici(s),1);
end
end
% Velocità in metri/giorno
%% Criterio della velocità positiva - Criterio 0
[rS,cS] = size(Speed);
Criterio_0 = zeros(rS,cS);
Criterio_0_local = zeros(rS,cS);
for i = 1:cS % nodi
for j = 4:rS % date
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
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
text = 'Criterion 0 executed';
fprintf(fileID,fmt,text);
%% Faccio i calcoli
Delta_Speed_local = zeros(rS,cS);
Delta_Speed = zeros(rS,cS);
diff_Cum = diff(Speed);
diff_Loc = diff(Speed_local);
Delta_Speed(2:end,:) = diff_Cum;
Delta_Speed_local(2:end,:) = diff_Loc;
act = zeros(rS,cS);
act_local = zeros(rS,cS);
for i = 1:cS % nodi
for j = 2:rS % 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(rS,cS);
Criterio_1_local = zeros(rS,cS);
if rS > 10
for i = 1:cS % nodi
for j = 10:rS % 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;
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;
end
end
end
end
text = 'Criterion 1 executed';
fprintf(fileID,fmt,text);
%% Criterio delle parabole - Criterio 2
a = zeros(rS,cS);
a_Loc = zeros(rS,cS);
Criterio_2 = zeros(rS,cS);
Criterio_2_local = zeros(rS,cS);
for i = 1:cS % nodi
for j = 13:rS % date
if Criterio_1(j,i) == 1
% j-3
x = DateGiorno(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 = DateGiorno(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 = DateGiorno(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 = DateGiorno(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 = DateGiorno(j-12:j-3);
y = Speed_local(j-12:j-3,i);
f = fit(x,y,'poly2');
coeff = coeffvalues(f);
a_Loc(j-3,i) = coeff(1,1);
% j-2
x = DateGiorno(j-11:j-2);
y = Speed_local(j-11:j-2,i);
f = fit(x,y,'poly2');
coeff = coeffvalues(f);
a_Loc(j-2,i) = coeff(1,1);
% j-1
x = DateGiorno(j-10:j-1);
y = Speed_local(j-10:j-1,i);
f = fit(x,y,'poly2');
coeff = coeffvalues(f);
a_Loc(j-1,i) = coeff(1,1);
% j
x = DateGiorno(j-9:j);
y = Speed_local(j-9:j,i);
f = fit(x,y,'poly2');
coeff = coeffvalues(f);
a_Loc(j,i) = coeff(1,1);
if a_Loc(j,i) > 0 && a_Loc(j-1,i) > 0 && a_Loc(j-2,i) > 0 && a_Loc(j-3,i) > 0 || ...
a_Loc(j,i) > 0 && a_Loc(j-1,i) > 0 && a_Loc(j-2,i) > 0 || ...
a_Loc(j,i) > 0 && a_Loc(j-1,i) > 0 && a_Loc(j-3,i) > 0 || ...
a_Loc(j,i) > 0 && a_Loc(j-2,i) > 0 && a_Loc(j-3,i) > 0 || ...
a_Loc(j-1,i) > 0 && a_Loc(j-2,i) > 0 && a_Loc(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(rS,cS);
Delta_a_local = zeros(rS,cS);
diff_a = diff(a);
diff_a_Loc = diff(a_Loc);
Delta_a(2:end,:) = diff_a;
Delta_a_local(2:end,:) = diff_a_Loc;
Criterio_3 = zeros(rS,cS);
Criterio_3_local = zeros(rS,cS);
for i = 1:cS % nodi
for j = 13:rS % 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_STORICO = zeros(rS,cS);
alarm_local_STORICO = zeros(rS,cS);
RQ_S = zeros(rS,cS);
RQ_Loc_S = zeros(rS,cS);
Number_S = zeros(rS,cS);
Number_Loc_S = zeros(rS,cS);
Tr_S = zeros(rS,cS) - 99;
Tr_Inf_S = zeros(rS,cS) - 99;
Tr_Sup_S = zeros(rS,cS) - 99;
Tr_mail_S = zeros(rS,cS) - 99;
Tr_Loc_S = zeros(rS,cS) - 99;
Tr_Loc_Inf_S = zeros(rS,cS) - 99;
Tr_Loc_Sup_S = zeros(rS,cS) - 99;
Tr_Loc_mail_S = zeros(rS,cS) - 99;
DataFuK_S = zeros(rS,cS);
DataFuK_local_S = zeros(rS,cS);
for i = 1:cS % nodi
j = 13;
% -------------- Cumulati --------------------------
while j <=(rS-1)
hold off
DEPETRIS = 0;
if Criterio_3(j,i) == 1
Tempo = DateGiorno(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_S(j,i) = -q/m - DateGiorno(j);
if Tr_S(j,i) > 0 && Tr_S(j,i) < 30 % giorni
% RQ
RQ_S(j,i) = rsquare.rsquare;
% Grafico Inv V - T
Data_Img = datestr(DateGiorno(j-3),'dd-mm-yyyy');
Tempo_Img = datestr(DateGiorno(j-3),'HH-MM-SS');
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
hold on
legend(num2str(RQ_S(j,i)));
Y = m*Tempo + q;
plot(Tempo,Y);
title('Time of Failure prediction model');
xlabel('Date [dd/mm/yyyy]')
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]')
ylabel('Velocity [mm/d]')
datetick('x','dd/mm/yyyy HH:MM')
ylim([0 max(Vel)+max(Vel)/10])
end
% dato successivo
for n = 1:(rS-j)
if Criterio_3(n+j,i) == 1 || Criterio_3(n+j-1,i) == 1
Tempo = DateGiorno(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_S(j+n,i) = rsquare.rsquare;
retta = coeffvalues(f);
m = retta(1,1);
q = retta(1,2);
% Time of Failure
Tr_S(j+n,i) = -q/m - DateGiorno(j+n);
if Tr_S(j+n,i) > 0 && Tr_S(j+n,i) < 30 % giorni
if RQ_S(j+n,i) >= 0.85
Tr_mail_S(j+n,i) = -q/m - DateGiorno(j+n);% attivo
Tr_mail_S(j+n-1,i) = -99; % disattivo
alarm_STORICO(j+n-1,i) = 0; % disattivo
alarm_STORICO(j+n,i) = 1; % attivo
DataFuK_S(j+n,i) = DateGiorno(j-3);
DataFuK_S(j,i) = 0;
Data_Img = datestr(DateGiorno(j-3),'dd-mm-yyyy');
Tempo_Img = datestr(DateGiorno(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]')
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_Storico.jpg');
saveas(fig2,filename)
% Grafico inverso velocità
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
hold on
legend(num2str(RQ_S(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]')
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));
% Variazione statistica dei dati di
% monitoraggio
% Limite Superiore
Inv_Vel_Sup = Inv_Vel + mean(Inv_Vel)*(1-RQ_S(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_S(j+n,i) = -q_Sup/m_Sup;
Tr_Sup_S(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_S(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_S(j+n,i) = -q_Inf/m_Inf;
Tr_Inf_S(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')
DEPETRIS = 1;
N = n;
Number_S(j+N,i) = N+4;
end
end
else
break
end
end
if DEPETRIS == 1
hold on
fig = plot(DateGiorno(j+N)+Tr_S(j+N,i),0,'-d','LineStyle','none','Color','r');
plot(Tr_Sup_S(j+N,i),0,'-v','LineStyle','none','Color','k');
LIM_S = ceil(Tr_Sup_S(j+N,i));
plot(Tr_Inf_S(j+N,i),0,'-v','LineStyle','none','Color','k');
legend(['RQ: ' num2str(RQ_S(j+N,i))]);
h = gca; % Get axis to modify
xlim([LIM(1) LIM_S(end)])
h.XAxis.MinorTick = 'on'; % Must turn on minor ticks if they are off
h.XAxis.MinorTickValues = LIM(1):1/4:LIM_S(end); % Minor ticks which don't line up with majors
h.XAxis.TickValues = LIM(1):1:LIM_S(end);
datetick('x','dd/mm/yyyy')
grid on
grid minor
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img,'_',Tempo_Img,'_Storico.jpg');
saveas(fig,filename)
end
j = j+n+1;
else
j = j+1;
end
end
% -------------- Locali --------------------------
j = 13;
while j <=(rS-1)
hold off
GIOLITTI = 0;
if Criterio_3_local(j,i) == 1
Tempo = DateGiorno(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_S(j,i) = -q/m - DateGiorno(j);
if Tr_Loc_S(j,i) > 0 && Tr_Loc_S(j,i) < 30
% RQ
RQ_Loc_S(j,i) = rsquare.rsquare;
% Grafico Inv V - T
Data_Img = datestr(DateGiorno(j-3),'dd-mm-yyyy');
Tempo_Img = datestr(DateGiorno(j-3),'HH-MM-SS');
% Grafico
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
hold on
legend(num2str(RQ_Loc_S(j,i)));
Y = m*Tempo + q;
plot(Tempo,Y);
title('Time of Failure prediction model');
xlabel('Date [dd/mm/yyyy]')
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]')
ylabel('Velocity [mm/d]')
datetick('x','dd/mm/yyyy HH:MM')
ylim([0 max(Vel)+max(Vel)/10])
end
% dato successivo
for n = 1:(rS-j)
if Criterio_3_local(n+j,i) == 1 || Criterio_3_local(n+j-1,i) == 1
Tempo = DateGiorno(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_S(j+n,i) = rsquare.rsquare;
retta = coeffvalues(f);
m = retta(1,1);
q = retta(1,2);
% Time of Failure
Tr_Loc_S(j+n,i) = -q/m - DateGiorno(j+n);
if Tr_Loc_S(j+n,i) > 0 && Tr_Loc_S(j+n,i) < 30 % giorni
if RQ_Loc_S(j+n,i) >= 0.85
Tr_Loc_mail_S(j+n,i) = -q/m - DateGiorno(j+n);
Tr_Loc_mail_S(j+n-1,i) = -99; % disattivo
alarm_local_STORICO(j+n-1,i) = 0; % disattivo
alarm_local_STORICO(j+n,i) = 1; % attivo
DataFuK_local_S(j+n,i) = DateGiorno(j-3);
DataFuK_local_S(j,i) = 0;
Data_Img = datestr(DateGiorno(j-3),'dd-mm-yyyy');
Tempo_Img = datestr(DateGiorno(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]')
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_Storico.jpg');
saveas(fig2,filename)
% Grafico inverso velocità
fig = plot(Tempo,Inv_Vel,'-o','LineStyle','none');
hold on
legend(num2str(RQ_Loc_S(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]')
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));
% Variazione statistica dei dati di
% monitoraggio
% Limite Superiore
Inv_Vel_Sup = Inv_Vel + mean(Inv_Vel)*(1-RQ_Loc_S(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_S(j+n,i) = -q_Sup/m_Sup;
Tr_Loc_Sup_S(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_S(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_S(j+n,i) = -q_Inf/m_Inf;
Tr_Loc_Inf_S(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')
GIOLITTI = 1;
N = n;
Number_Loc_S(j+N,i) = N+4;
end
end
else
break
end
end
if GIOLITTI == 1
hold on
fig = plot(DateGiorno(j+N)+Tr_Loc_S(j+N,i),0,'-d','LineStyle','none','Color','r');
plot(Tr_Loc_Sup_S(j+N,i),0,'-v','LineStyle','none','Color','k');
LIM_S = ceil(Tr_Loc_Sup_S(j+N,i));
plot(Tr_Loc_Inf_S(j+N,i),0,'-v','LineStyle','none','Color','k');
legend(['RQ: ' num2str(RQ_Loc_S(j+N,i))]);
h = gca; % Get axis to modify
xlim([LIM(1) LIM_S(end)])
h.XAxis.MinorTick = 'on'; % Must turn on minor ticks if they are off
h.XAxis.MinorTickValues = LIM(1):1/4:LIM_S(end); % Minor ticks which don't line up with majors
h.XAxis.TickValues = LIM(1):1:LIM_S(end);
datetick('x','dd/mm/yyyy')
grid on
grid minor
filename = strcat(IDcentralina,'-',DTcatena,'-Node_',num2str(Nodo),'-',Data_Img,'_',Tempo_Img,'-Local_Storico.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);
HShift_local_HR = zeros(rT,1);
nHR = 1;
for tt = 1:rT+1
if tt == 1
Data_HR = datestr(DateGiorno(j-4),'yyyy-mm-dd');
Tempo_HR = datestr(DateGiorno(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));
comando1 = ['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,comando1);
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
%% Calcolo una singola velocità media giornaliera
[rI,~] = size(DateHR);
DateGiornoHR = DateHR(2:end);
for s = 2:rI
Speed_local_HR(s-1,:) = (HShift_local_HR(s,:) - HShift_local_HR(s-1,:))/(DateHR(s,1) - DateHR(s-1,:));
end
% Velocità in metri/giorno
jHR = find(DateGiornoHR == DateGiorno(j));
% ---Criterio della velocità positiva Criterio 0---
if Speed_local_HR(jHR,1) > 0 && ...
Speed_local_HR(jHR-1,1) > 0 ...
&& Speed_local_HR(jHR-2,1) > 0 ...
&& Speed_local_HR(jHR-3,1) > 0
% --- Calcolo Fukuzono ---
TempoHR = DateGiornoHR(jHR-3:jHR+N); % giorni
Vel_HR = 1000*Speed_local_HR(jHR-3:jHR+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_S(jHR+N,HRprog) = rsquare.rsquare;
retta = coeffvalues(f);
m = retta(1,1);
q = retta(1,2);
% Time of Failure
Tr_Loc_HR_S(jHR+N,HRprog) = -q/m - DateGiornoHR(jHR+N);
if Tr_Loc_HR_S(jHR+N,HRprog) > 0 && Tr_Loc_HR_S(jHR+N,HRprog) < 30 % giorni
if RQ_Loc_HR_S(jHR+N,i) >= 0.85
DataFuK_local_HR_S(jHR+N,HRprog) = DateGiornoHR(jHR-3);
Data_Img_HR = datestr(DateGiornoHR(jHR-3),'dd-mm-yyyy');
Tempo_Img_HR = datestr(DateGiornoHR(jHR-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]')
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_Storico.jpg');
saveas(fig2,filename)
% Grafico inverso velocità
fig = plot(TempoHR,Inv_Vel_HR,'-o','LineStyle','none');
hold on
legend(num2str(RQ_Loc_HR_S(jHR+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]')
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(jHR+N)+Tr_Loc_HR_S(jHR+N,HRprog),0,'-d','LineStyle','none','Color','r');
LIM_S = ceil(Tr_Loc_HR_S(jHR+N,HRprog)+DateGiornoHR(jHR+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_Storico.jpg');
saveas(fig,filename)
else
Tr_Loc_HR_S(jHR+N,HRprog) = 0;
end
else
Tr_Loc_HR_S(jHR+N,HRprog) = 0;
end
else
Tr_Loc_HR_S(jHR,HRprog) = 0;
end
end
end
end
j = j+n+1;
else
j = j+1;
end
end
end
text = 'Fukuzono_Giornaliero Calculation executed';
fprintf(fileID,fmt,text);
else
alarm_STORICO = zeros(rS,cS);
alarm_local_STORICO = zeros(rS,cS);
Tr_Loc_Sup_S = [];
Tr_Loc_Inf_S = [];
Tr_Loc_S = [];
Tr_Sup_S = [];
Tr_Inf_S = [];
Tr_S = [];
Tr_mail_S = [];
Tr_Loc_mail_S = [];
DataFuK_local_S = [];
DataFuK_S = [];
Number_S = [];
Number_Loc_S = [];
RQ_S = [];
RQ_Loc_S = [];
end
text = 'Fukuzono_Giornaliero function executed';
fprintf(fileID,fmt,text);
fclose(fileID);
end