Sync from remote server: 2025-10-12 18:56:41

This commit is contained in:
2025-10-12 18:56:59 +02:00
commit 7e8ee264aa
553 changed files with 161447 additions and 0 deletions

951
Tilt/threshold_TiltLinkHD.m Executable file
View File

@@ -0,0 +1,951 @@
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