Sync from remote server: 2025-10-12 18:56:41
This commit is contained in:
951
Tilt/threshold_TiltLinkHD.m
Executable file
951
Tilt/threshold_TiltLinkHD.m
Executable 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
|
||||
Reference in New Issue
Block a user