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