951 lines
39 KiB
Matlab
Executable File
951 lines
39 KiB
Matlab
Executable File
function threshold_TiltLinkHD(value,ARRAYdateHD,HShift_local_HD,HShift_HD,...
|
|
Xlocal_HD,Ylocal_HD,X_HD,Y_HD,Riferimento,dataRif,timeRif,...
|
|
NodoTiltLinkHD,IDcentralina,DTcatena,conn,FileName)
|
|
|
|
fileID = fopen(FileName,'a');
|
|
fmt = '%s \r';
|
|
text = 'threshold_TiltLinkHD function started';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
[rHD,cHD]=size(HShift_local_HD); % riga nodi - colonna valori
|
|
XLoc_rif = zeros(rHD,1);
|
|
YLoc_rif = zeros(rHD,1);
|
|
X_rif = zeros(rHD,1);
|
|
Y_rif = zeros(rHD,1);
|
|
|
|
if Riferimento == 1
|
|
|
|
NodeType = 'Tilt Link HD';
|
|
NTiltLinkHD = cell2mat(NodoTiltLinkHD(:,2));
|
|
for ii = 1:rHD
|
|
nN = num2str(NTiltLinkHD(ii,1));
|
|
% Scarico di dati di spostamenti
|
|
comando = ['select EventDate, EventTime, XShift, YShift, X, Y '...
|
|
'from ElabDataView where EventDate = ''' dataRif ''' and EventTime >= ''' timeRif...
|
|
''' and UnitName = ''' IDcentralina ''' and ToolNameID = '''...
|
|
DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ''' nN ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHDd = curs.Data;
|
|
% Giorni successivi
|
|
comando = ['select EventDate, EventTime, XShift, YShift, X, Y '...
|
|
'from ElabDataView where EventDate > ''' dataRif ''' and UnitName = ''' IDcentralina ''' and ToolNameID = '''...
|
|
DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ''' nN ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHD = curs.Data;
|
|
[~,c1] = size(DATnodoHD);
|
|
[~,c2] = size(DATnodoHDd);
|
|
if c1 == c2
|
|
DATnodoHD = [DATnodoHDd; DATnodoHD];
|
|
elseif c1 < c2 % solo giorno di riferimento
|
|
DATnodoHD = DATnodoHDd;
|
|
end
|
|
XLoc_rif(ii,1) = cell2mat(DATnodoHD(1,3));
|
|
YLoc_rif(ii,1) = cell2mat(DATnodoHD(1,4));
|
|
X_rif(ii,1) = cell2mat(DATnodoHD(1,5));
|
|
Y_rif(ii,1) = cell2mat(DATnodoHD(1,6));
|
|
end
|
|
|
|
Xloc_HD = Xlocal_HD-XLoc_rif;
|
|
Yloc_HD = Ylocal_HD-YLoc_rif;
|
|
HShift_local_HD = sqrt(Xloc_HD.^2+Yloc_HD.^2);
|
|
X_HD = X_HD-X_rif;
|
|
Y_HD = Y_HD-Y_rif;
|
|
HShift_HD = sqrt(X_HD.^2+Y_HD.^2);
|
|
end
|
|
|
|
for i=1:length(value)
|
|
if strcmp(value(i).type,'Tilt Link HD')
|
|
Valori = value(i).data;
|
|
break
|
|
end
|
|
end
|
|
attivaX = Valori.cumx;
|
|
attivaY = Valori.cumy;
|
|
attiva2D = Valori.cum2d;
|
|
attivaLoc2D = Valori.loc2d;
|
|
alert = 0;
|
|
if attivaX == 0 && attivaY == 0 && attiva2D == 0 && attivaLoc2D == 0 % Nessuna soglia attiva
|
|
else
|
|
% X Cum
|
|
SogliaX = zeros(3,4); % Riga 1 - Livello 1, Riga 2 - Livello 2, Colonna 1 - Attivo/Disattivo, Colonna 2 - Mail, Colonna 3 - SMS, COlonna 4 - Valore
|
|
if attivaX == 1
|
|
% Livello 1
|
|
if Valori.cumx_uno == 1
|
|
SogliaX(1,1) = 1;
|
|
SogliaX(1,4) = str2double(Valori.cumx_uno_value);
|
|
if Valori.cumx_uno_email == 1
|
|
SogliaX(1,2) = 1;
|
|
end
|
|
if Valori.cumx_uno_sms == 1
|
|
SogliaX(1,3) = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Valori.cumx_due == 1
|
|
SogliaX(2,1) = 1;
|
|
SogliaX(2,4) = str2double(Valori.cumx_due_value);
|
|
if Valori.cumx_due_email == 1
|
|
SogliaX(2,2) = 1;
|
|
end
|
|
if Valori.cumx_due_sms == 1
|
|
SogliaX(2,3) = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Valori.cumx_tre == 1
|
|
SogliaX(3,1) = 1;
|
|
SogliaX(3,4) = str2double(Valori.cumx_tre_value);
|
|
if Valori.cumx_tre_email == 1
|
|
SogliaX(3,2) = 1;
|
|
end
|
|
if Valori.cumx_tre_sms == 1
|
|
SogliaX(3,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Y Cum
|
|
SogliaY = zeros(3,4); % Riga 1 - Livello 1, Riga 2 - Livello 2, Colonna 1 - Attivo/Disattivo, Colonna 2 - Mail, Colonna 3 - SMS, COlonna 4 - Valore
|
|
if attivaY == 1
|
|
% Livello 1
|
|
if Valori.cumy_uno == 1
|
|
SogliaY(1,1) = 1;
|
|
SogliaY(1,4) = str2double(Valori.cumy_uno_value);
|
|
if Valori.cumy_uno_email == 1
|
|
SogliaY(1,2) = 1;
|
|
end
|
|
if Valori.cumy_uno_sms == 1
|
|
SogliaY(1,3) = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Valori.cumy_due == 1
|
|
SogliaY(2,1) = 1;
|
|
SogliaY(2,4) = str2double(Valori.cumy_due_value);
|
|
if Valori.cumy_due_email == 1
|
|
SogliaY(2,2) = 1;
|
|
end
|
|
if Valori.cumy_due_sms == 1
|
|
SogliaY(2,3) = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Valori.cumy_tre == 1
|
|
SogliaY(3,1) = 1;
|
|
SogliaY(3,4) = str2double(Valori.cumy_tre_value);
|
|
if Valori.cumy_tre_email == 1
|
|
SogliaY(3,2) = 1;
|
|
end
|
|
if Valori.cumy_tre_sms == 1
|
|
SogliaY(3,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
% 2D Cum
|
|
Soglia2D = zeros(3,4); % Riga 1 - Livello 1, Riga 2 - Livello 2, Colonna 1 - Attivo/Disattivo, Colonna 2 - Mail, Colonna 3 - SMS, COlonna 4 - Valore
|
|
if attiva2D == 1
|
|
% Livello 1
|
|
if Valori.cum2d_uno == 1
|
|
Soglia2D(1,1) = 1;
|
|
Soglia2D(1,4) = str2double(Valori.cum2d_uno_value);
|
|
if Valori.cum2d_uno_email == 1
|
|
Soglia2D(1,2) = 1;
|
|
end
|
|
if Valori.cum2d_uno_sms == 1
|
|
Soglia2D(1,3) = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Valori.cum2d_due == 1
|
|
Soglia2D(2,1) = 1;
|
|
Soglia2D(2,4) = str2double(Valori.cum2d_due_value);
|
|
if Valori.cum2d_due_email == 1
|
|
Soglia2D(2,2) = 1;
|
|
end
|
|
if Valori.cum2d_due_sms == 1
|
|
Soglia2D(2,3) = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Valori.cum2d_tre == 1
|
|
Soglia2D(3,1) = 1;
|
|
Soglia2D(3,4) = str2double(Valori.cum2d_tre_value);
|
|
if Valori.cum2d_tre_email == 1
|
|
Soglia2D(3,2) = 1;
|
|
end
|
|
if Valori.cum2d_tre_sms == 1
|
|
Soglia2D(3,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
% 2D Loc
|
|
Soglia2DLoc = zeros(3,4); % Riga 1 - Livello 1, Riga 2 - Livello 2, Colonna 1 - Attivo/Disattivo, Colonna 2 - Mail, Colonna 3 - SMS, COlonna 4 - Valore
|
|
if attivaLoc2D == 1
|
|
% Livello 1
|
|
if Valori.loc2d_uno == 1
|
|
Soglia2DLoc(1,1) = 1;
|
|
Soglia2DLoc(1,4) = str2double(Valori.loc2d_uno_value);
|
|
if Valori.loc2d_uno_email == 1
|
|
Soglia2DLoc(1,2) = 1;
|
|
end
|
|
if Valori.loc2d_uno_sms == 1
|
|
Soglia2DLoc(1,3) = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Valori.loc2d_due == 1
|
|
Soglia2DLoc(2,1) = 1;
|
|
Soglia2DLoc(2,4) = str2double(Valori.loc2d_due_value);
|
|
if Valori.loc2d_due_email == 1
|
|
Soglia2DLoc(2,2) = 1;
|
|
end
|
|
if Valori.loc2d_due_sms == 1
|
|
Soglia2DLoc(2,3) = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Valori.loc2d_tre == 1
|
|
Soglia2DLoc(3,1) = 1;
|
|
Soglia2DLoc(3,4) = str2double(Valori.loc2d_tre_value);
|
|
if Valori.loc2d_tre_email == 1
|
|
Soglia2DLoc(3,2) = 1;
|
|
end
|
|
if Valori.loc2d_tre_sms == 1
|
|
Soglia2DLoc(3,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
|
|
NomeFile = [IDcentralina '-' DTcatena '-HD.mat'];
|
|
if isfile(NomeFile)==1
|
|
load(NomeFile);
|
|
else
|
|
ALARM_HD = [];
|
|
end
|
|
|
|
File = 0;
|
|
Data_HD = zeros(rHD,1);
|
|
value_HD = zeros(rHD,7); % colonna 1: valore, colonna 2: livello, colonna 3: nodo, colonna 4: x(1), y(2), 2D Cum(3) o 2D Loc(4), colonna 5: email S/N, colonna 6: sms S/N, colonna 7: ultimo valore in allarme (1) o rientrato (0)
|
|
% Per ogni livello (colonna) mi segno se l'ultimo valore è fuori soglia
|
|
ultimoX = zeros(rHD,3);
|
|
ultimoY = zeros(rHD,3);
|
|
ultimo2D = zeros(rHD,3);
|
|
ultimo2DLoc = zeros(rHD,3);
|
|
a = 1;
|
|
for d=1:rHD
|
|
% Nodo
|
|
Nodo = cell2mat(NodoTiltLinkHD(d,2));
|
|
for k=2:cHD
|
|
Continua = 0;
|
|
% Soglia X
|
|
Tipologia = 1;
|
|
if attivaX == 1
|
|
Livello = 0;
|
|
% Livello 1
|
|
if SogliaX(1,1)==1
|
|
if abs(1000*X_HD(d,k))>SogliaX(1,4)
|
|
Livello = 1;
|
|
Continua = 1;
|
|
if 1000*X_HD(d,cHD)>SogliaX(1,4)
|
|
ultimoX(d,1) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 2
|
|
if SogliaX(2,1)==1
|
|
if abs(1000*X_HD(d,k))>SogliaX(2,4)
|
|
Livello = 2;
|
|
Continua = 1;
|
|
if 1000*X_HD(d,cHD)>SogliaX(2,4)
|
|
ultimoX(d,2) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 3
|
|
if SogliaX(3,1)==1
|
|
if abs(1000*X_HD(d,k))>SogliaX(3,4)
|
|
Livello = 3;
|
|
Continua = 1;
|
|
if 1000*X_HD(d,cHD)>SogliaX(3,4)
|
|
ultimoX(d,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
% controlli
|
|
if isempty(ALARM_HD)==0 % Ci sono già degli allarmi
|
|
Check = find(ALARM_HD(:,1)==ARRAYdateHD(k,1)); % Data
|
|
if isempty(Check)==0 % C'è già quella data
|
|
ALARM_HD1 = ALARM_HD(Check,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
else
|
|
% Cerco la data immediatamente precedente
|
|
Check5 = find(ALARM_HD(:,1)==ARRAYdateHD(k-1,1)); % Data
|
|
ALARM_HD1 = ALARM_HD(Check5,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if Continua == 1
|
|
% Livello 1
|
|
if Livello == 1 && SogliaX(1,1) == 1 % Livello attivo
|
|
if SogliaX(1,2) == 1 || SogliaX(1,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*X_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if SogliaX(1,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if SogliaX(1,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimoX(d,1) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Livello == 2 && SogliaX(2,1) == 1 % Livello attivo
|
|
if SogliaX(2,2) == 1 || SogliaX(2,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*X_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if SogliaX(2,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if SogliaX(2,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimoX(d,2) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Livello == 3 && SogliaX(3,1) == 1 % Livello attivo
|
|
if SogliaX(3,2) == 1 || SogliaX(3,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*X_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if SogliaX(3,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if SogliaX(3,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimoX(d,3) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
end
|
|
|
|
Continua = 0;
|
|
% ---- Soglia Y ---
|
|
Tipologia = 2;
|
|
if attivaY == 1
|
|
Livello = 0;
|
|
% Livello 1
|
|
if SogliaY(1,1)==1
|
|
if abs(1000*Y_HD(d,k))>SogliaY(1,4)
|
|
Livello = 1;
|
|
Continua = 1;
|
|
if 1000*Y_HD(d,cHD)>SogliaY(1,4)
|
|
ultimoY(d,1) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 2
|
|
if SogliaY(2,1)==1
|
|
if abs(1000*Y_HD(d,k))>SogliaY(2,4)
|
|
Livello = 2;
|
|
Continua = 1;
|
|
if 1000*Y_HD(d,cHD)>SogliaY(2,4)
|
|
ultimoY(d,2) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 3
|
|
if SogliaY(3,1)==1
|
|
if abs(1000*Y_HD(d,k))>SogliaY(3,4)
|
|
Livello = 3;
|
|
Continua = 1;
|
|
if 1000*Y_HD(d,cHD)>SogliaY(3,4)
|
|
ultimoY(d,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
% controlli
|
|
if isempty(ALARM_HD)==0 % Ci sono già degli allarmi
|
|
Check = find(ALARM_HD(:,1)==ARRAYdateHD(k,1)); % Data
|
|
if isempty(Check)==0 % C'è già quella data
|
|
ALARM_HD1 = ALARM_HD(Check,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
else
|
|
% Cerco la data immediatamente precedente
|
|
Check5 = find(ALARM_HD(:,1)==ARRAYdateHD(k-1,1)); % Data
|
|
ALARM_HD1 = ALARM_HD(Check5,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if Continua == 1
|
|
% Livello 1
|
|
if Livello == 1 && SogliaY(1,1) == 1 % Livello attivo
|
|
if SogliaY(1,2) == 1 || SogliaY(1,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*Y_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if SogliaY(1,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if SogliaY(1,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimoY(d,1) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Livello == 2 && SogliaY(2,1) == 1 % Livello attivo
|
|
if SogliaY(2,2) == 1 || SogliaY(2,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*Y_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if SogliaY(2,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if SogliaY(2,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimoY(d,2) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Livello == 3 && SogliaY(3,1) == 1 % Livello attivo
|
|
if SogliaY(3,2) == 1 || SogliaY(3,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*Y_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if SogliaY(3,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if SogliaY(3,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimoY(d,3) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
end
|
|
|
|
Continua = 0;
|
|
% --- Soglia 2D ---
|
|
Tipologia = 3;
|
|
if attiva2D == 1
|
|
Livello = 0;
|
|
% Livello 1
|
|
if Soglia2D(1,1)==1
|
|
if 1000*HShift_HD(d,k)>Soglia2D(1,4)
|
|
Livello = 1;
|
|
Continua = 1;
|
|
if 1000*HShift_HD(d,cHD)>Soglia2D(1,4)
|
|
ultimo2D(d,1) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Soglia2D(2,1)==1
|
|
if 1000*HShift_HD(d,k)>Soglia2D(2,4)
|
|
Livello = 2;
|
|
Continua = 1;
|
|
if 1000*HShift_HD(d,cHD)>Soglia2D(2,4)
|
|
ultimo2D(d,2) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Soglia2D(3,1)==1
|
|
if 1000*HShift_HD(d,k)>Soglia2D(3,4)
|
|
Livello = 3;
|
|
Continua = 1;
|
|
if 1000*HShift_HD(d,cHD)>Soglia2D(3,4)
|
|
ultimo2D(d,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
% controlli
|
|
if isempty(ALARM_HD)==0 % Ci sono già degli allarmi
|
|
Check = find(ALARM_HD(:,1)==ARRAYdateHD(k,1)); % Data
|
|
if isempty(Check)==0 % C'è già quella data
|
|
ALARM_HD1 = ALARM_HD(Check,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
else
|
|
% Cerco la data immediatamente precedente
|
|
Check5 = find(ALARM_HD(:,1)==ARRAYdateHD(k-1,1)); % Data
|
|
ALARM_HD1 = ALARM_HD(Check5,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if Continua == 1
|
|
% Livello 1
|
|
if Livello == 1 && Soglia2D(1,1) == 1 % Livello attivo
|
|
if Soglia2D(1,2) == 1 || Soglia2D(1,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*HShift_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if Soglia2D(1,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if Soglia2D(1,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimo2D(d,1) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Livello == 2 && Soglia2D(2,1) == 1 % Livello attivo
|
|
if Soglia2D(2,2) == 1 || Soglia2D(2,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*HShift_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if Soglia2D(2,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if Soglia2D(2,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimo2D(d,2) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Livello == 3 && Soglia2D(3,1) == 1 % Livello attivo
|
|
if Soglia2D(3,2) == 1 || Soglia2D(3,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*HShift_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if Soglia2D(3,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if Soglia2D(3,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimo2D(d,3) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
end
|
|
|
|
Continua = 0;
|
|
% --- Soglia 2D locale ---
|
|
Tipologia = 4;
|
|
if attivaLoc2D == 1
|
|
Livello = 0;
|
|
% Livello 1
|
|
if Soglia2DLoc(1,1)==1
|
|
if 1000*HShift_local_HD(d,k)>Soglia2DLoc(1,4)
|
|
Livello = 1;
|
|
Continua = 1;
|
|
if 1000*HShift_local_HD(d,cHD)>Soglia2DLoc(1,4)
|
|
ultimo2DLoc(d,1) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Soglia2DLoc(2,1)==1
|
|
if 1000*HShift_local_HD(d,k)>Soglia2DLoc(2,4)
|
|
Livello = 2;
|
|
Continua = 1;
|
|
if 1000*HShift_local_HD(d,cHD)>Soglia2DLoc(2,4)
|
|
ultimo2DLoc(d,2) = 1;
|
|
end
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Soglia2DLoc(3,1)==1
|
|
if 1000*HShift_local_HD(d,k)>Soglia2DLoc(3,4)
|
|
Livello = 3;
|
|
Continua = 1;
|
|
if 1000*HShift_local_HD(d,cHD)>Soglia2DLoc(3,4)
|
|
ultimo2DLoc(d,3) = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
% controlli
|
|
if isempty(ALARM_HD)==0 % Ci sono già degli allarmi
|
|
Check = find(ALARM_HD(:,1)==ARRAYdateHD(k,1)); % Data
|
|
if isempty(Check)==0 % C'è già quella data
|
|
ALARM_HD1 = ALARM_HD(Check,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
else
|
|
% Cerco la data immediatamente precedente
|
|
Check5 = find(ALARM_HD(:,1)==ARRAYdateHD(k-1,1)); % Data
|
|
ALARM_HD1 = ALARM_HD(Check5,:);
|
|
Check2 = find(ALARM_HD1(:,4)==Nodo); % Nodo
|
|
if isempty(Check2)==0
|
|
ALARM_HD2 = ALARM_HD1(Check2,:);
|
|
Check3 = find(ALARM_HD2(:,3)>=Livello); % Livello
|
|
if isempty(Check3)==0
|
|
ALARM_HD3 = ALARM_HD2(Check3,:);
|
|
Check4 = find(ALARM_HD3(:,5)==Tipologia); % Tipologia
|
|
if isempty(Check4)==0
|
|
Continua = 0; % L'allerta esiste già (o è precedente)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if Continua == 1
|
|
% Livello 1
|
|
if Livello == 1 && Soglia2DLoc(1,1) == 1 % Livello attivo
|
|
if Soglia2DLoc(1,2) == 1 || Soglia2DLoc(1,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*HShift_local_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if Soglia2DLoc(1,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if Soglia2DLoc(1,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimo2DLoc(d,1) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 2
|
|
if Livello == 2 && Soglia2DLoc(2,1) == 1 % Livello attivo
|
|
if Soglia2DLoc(2,2) == 1 || Soglia2DLoc(2,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*HShift_local_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if Soglia2DLoc(2,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if Soglia2DLoc(2,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimo2DLoc(d,2) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
% Livello 3
|
|
if Livello == 3 && Soglia2DLoc(3,1) == 1 % Livello attivo
|
|
if Soglia2DLoc(3,2) == 1 || Soglia2DLoc(3,3) == 1 % c'è uno fra email e sms
|
|
Data_HD(a,1) = ARRAYdateHD(k,1);
|
|
value_HD(a,1) = 1000*HShift_local_HD(d,k); % mm
|
|
value_HD(a,2) = Livello;
|
|
value_HD(a,3) = Nodo;
|
|
value_HD(a,4) = Tipologia;
|
|
if Soglia2DLoc(3,2) == 1
|
|
value_HD(a,5) = 1; % mando la mail
|
|
else
|
|
value_HD(a,5) = 0;
|
|
end
|
|
if Soglia2DLoc(3,3) == 1
|
|
value_HD(a,6) = 1; % mando sms
|
|
else
|
|
value_HD(a,6) = 0;
|
|
end
|
|
if ultimo2DLoc(d,3) == 1
|
|
value_HD(a,7) = 1;
|
|
else
|
|
value_HD(a,7) = 0;
|
|
end
|
|
a=a+1;
|
|
File = 1;
|
|
alert = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
Data_HD(a:end)=[];
|
|
value_HD(a:end,:)=[];
|
|
if File == 1
|
|
ALARM_HD = [ALARM_HD; Data_HD value_HD];
|
|
save(NomeFile,'ALARM_HD')
|
|
end
|
|
end
|
|
|
|
if alert == 1
|
|
AL = 1;
|
|
DATAinsert = cell(1,9);
|
|
[rAL,~]=size(value_HD);
|
|
for ii = 1:rAL % numero di allerte
|
|
Data = datestr(Data_HD(ii,1),'yyyy-mm-dd HH:MM:SS');
|
|
Valore = value_HD(ii,1);
|
|
Level = value_HD(ii,2);
|
|
NodeNum = value_HD(ii,3);
|
|
Tipologia = value_HD(ii,4);
|
|
Email = value_HD(ii,5);
|
|
sms = value_HD(ii,6);
|
|
if value_HD(ii,7) == 1
|
|
desc = 'L''ultima lettura del sensore risulta fuori soglia';
|
|
else
|
|
desc = 'L''ultima lettura del sensore NON risulta fuori soglia';
|
|
end
|
|
|
|
DATAinsert{AL,1} = 3; % Allarme tipologia Soglie tradizionali
|
|
DATAinsert{AL,2} = IDcentralina;
|
|
DATAinsert{AL,3} = DTcatena;
|
|
DATAinsert{AL,4} = NodeNum;
|
|
DATAinsert{AL,5} = Data;
|
|
DATAinsert{AL,6} = Valore;
|
|
DATAinsert{AL,7} = Level;
|
|
DATAinsert{AL,8} = Email;
|
|
DATAinsert{AL,9} = sms;
|
|
DATAinsert{AL,10} = Tipologia;
|
|
DATAinsert{AL,11} = desc;
|
|
AL = AL+1;
|
|
end
|
|
|
|
AL = AL-1; % Numero totale di allarmi
|
|
for a = 1:AL
|
|
% Cerco se il dato è già presente
|
|
Data = DATAinsert{a,5}; % Data
|
|
nNodo = num2str(DATAinsert{a,4}); % Numero nodo
|
|
type = num2str(DATAinsert{a,1}); % tipologia soglia
|
|
level = num2str(DATAinsert{a,7}); % livello allarme
|
|
value = num2str(DATAinsert{a,6}); % Valore
|
|
grandezza = num2str(DATAinsert{a,10}); % grandezza fisica soglia (X,Y,etc.)
|
|
desc = DATAinsert{a,11}; % Descrizione
|
|
comando = ['select id, type_id, date_time from alarms where unit_name = ''' ...
|
|
IDcentralina ''' and tool_name = ''' DTcatena ''' and node_num = ''' ...
|
|
nNodo ''' and date_time = ''' Data ''' and type_id = ''' type ...
|
|
''' and alarm_level = ''' level ''' and registered_value = ''' value ...
|
|
''' and tipologia = ''' grandezza ''' and description like ''' desc ''' order by date_time'];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
idDate = curs.Data;
|
|
[~,cI] = size(idDate);
|
|
if cI == 1
|
|
idElabData = 0; % 0 indica che il dato non è presente su DB
|
|
else
|
|
idElabData = cell2mat(idDate(:,1));
|
|
end
|
|
tablename = 'alarms';
|
|
colnames = {'type_id','unit_name','tool_name','node_num','date_time',...
|
|
'registered_value','alarm_level','send_email','send_sms','tipologia','description'};
|
|
data = [DATAinsert(a,1),DATAinsert(a,2),DATAinsert(a,3),DATAinsert(a,4),...
|
|
DATAinsert(a,5),DATAinsert(a,6),DATAinsert(a,7),DATAinsert(a,8),DATAinsert(a,9),...
|
|
DATAinsert(a,10),DATAinsert(a,11)];
|
|
if idElabData == 0 % Scrivo
|
|
fastinsert(conn,tablename,colnames,data);
|
|
end
|
|
end
|
|
|
|
text = 'threshold_TiltLinkHD function closed';
|
|
fprintf(fileID,fmt,text);
|
|
fclose(fileID);
|
|
end |