725 lines
35 KiB
Matlab
Executable File
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 |