function SirenON = alert_Levels(IDcentralina,DTcatena,ARRAYdateTrL,ARRAYdateSS,... ARRAYdateRSN,datainiRSN,ARRAYdateRSNHR,ARRAYdateLL,ARRAYdateGF,ARRAYdateGS,SEL,MEL,... val_TrL,val_SS,LoadDef,DatiGFLink,DatiGSLink,rTrL,rRSN,rRSNHR,rLL,yesTrL,yesSS,... yesRSN,yesRSNHR,yesLL,yesGF,yesGS,NomeSito,date,conn,FileName) fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'alert_Levels function started'; fprintf(fileID,fmt,text); fclose(fileID); % Scarico ID centralina comando = ['select id from units where name = ''' IDcentralina ''' ']; curs = exec(conn,comando); curs = fetch(curs); unitID = num2str(cell2mat(curs.Data)); SirenON = 0; % Creazione file di testo con data di riferimento per l'attivazione FileNameALA = ['' IDcentralina '-' DTcatena '-Alarm.txt']; if isfile(FileNameALA) == 1 A = importdata(FileNameALA); [rA,~] = size(A); if rA == 0 DataRifALE = 0; DataRifALA = 0; elseif rA == 1 DataRifALE = A(1,1); DataRifALA = 0; else DataRifALE = A(1,1); DataRifALA = A(2,1); end else DataRifALE = 0; DataRifALA = 0; end DATA_rif = max(DataRifALA,DataRifALE); % Data della mail fileID = fopen(FileName,'a'); fmt = '%s \r'; %% Allertamento % --- Trigger --- Tr = 0; [rT,cT] = size(val_TrL); if yesTrL == 1 nTr = 0; numTr1 = 1; numTr2 = 1; for t = 1:rT if val_TrL(t,1) == 1 dataTrig(numTr1,1) = cellstr(datestr(ARRAYdateTrL(t),'yyyy/mm/dd HH:MM:SS')); if strcmp(DTcatena,'LOC0060') == 1 % Vobarno Tr = 1; % Vobarno nTr = 1; % Trigger 1 text = 'Trigger detected at Vobarno'; fprintf(fileID,fmt,text); fclose(fileID); % Rielaboro i Moduli RSN di riferimento di default % --- Modulo 1 --- DTmodulo1 = 'DT0001'; rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '... IDcentralina ' ' DTmodulo1 '']; status = system(rilancio); fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'DT0001 BPM module re-elaborated correctly'; fprintf(fileID,fmt,text); fprintf(fileID,fmt,status); fclose(fileID); % --- Modulo 2 --- DTmodulo2 = 'DT0002'; rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '... IDcentralina ' ' DTmodulo2 '']; status = system(rilancio); fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'DT0002 BPM module re-elaborated correctly'; fprintf(fileID,fmt,text); fprintf(fileID,fmt,status); fclose(fileID); % --- Modulo 3 --- DTmodulo3 = 'DT0003'; rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '... IDcentralina ' ' DTmodulo3 '']; status = system(rilancio); fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'DT0003 BPM module re-elaborated correctly'; fprintf(fileID,fmt,text); fprintf(fileID,fmt,status); elseif strcmp(DTcatena,'LOC0102') == 1 || strcmp(DTcatena,'LOC0103') == 1 Tr = 2; % A27 - Trigger text = 'Trigger detected'; elseif strcmp(IDcentralina,'ID0153') == 1 Tr = 3; % A27 - Fadalto text = 'Trigger Nesa detected'; end numTr1 = numTr1+1; end if cT > 1 && val_TrL(t,2) == 1 dataTrig(numTr2,1) = cellstr(datestr(ARRAYdateTrL(t),'yyyy/mm/dd HH:MM:SS')); if nTr == 1 nTr = 3; % Trigger 1 e 2 contemporaneamente else nTr = 2; % Trigger 2 end if strcmp(DTcatena,'LOC0060') == 1 % Vobarno text = 'Trigger detected at Vobarno'; fprintf(fileID,fmt,text); fclose(fileID); % Rielaboro i Moduli RSN di riferimento di default % --- Modulo 1 --- DTmodulo4 = 'DT0004'; rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '... IDcentralina ' ' DTmodulo4 '']; status = system(rilancio); fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'DT0004 BPM module re-elaborated correctly'; fprintf(fileID,fmt,text); fprintf(fileID,fmt,status); fclose(fileID); % --- Modulo 2 --- DTmodulo5 = 'DT0005'; rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '... IDcentralina ' ' DTmodulo5 '']; status = system(rilancio); fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'DT0005 BPM module re-elaborated correctly'; fprintf(fileID,fmt,text); fprintf(fileID,fmt,status); end end end if Tr ~= 0 fprintf(fileID,fmt,text); end end % --- Shock Sensor --- SS = 0; % Non è scattato nessuno Shock Sensor if yesSS == 1 DataSS = []; [rS,~] = size(val_SS); ss = 1; for s = 1:rS if val_SS(s,1) == 1 SS = 1; DataSS(ss,1) = ARRAYdateSS(s,1); ss = ss+1; end end end % --- RSN Link --- if yesRSN == 1 if Tr == 1 DataScarico = datestr(ARRAYdateTrL(end)-30,'yyyy/mm/dd'); % scarico a partire da un mese prima elseif SS == 1 DataScarico = datestr(DataSS(end,1)-30,'yyyy/mm/dd'); % scarico a partire da un mese prima else DataScarico = datestr(ARRAYdateRSN(end)-30,'yyyy/mm/dd'); end NodeType = 'RSN Link'; if strcmp(IDcentralina,'ID0060') == 1 % Vobarno if nTr == 1 || nTr == 3 % --- DT0001 --- DTcatena1 = 'DT0001'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSN); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSN(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSN_Rif1 = T; end AlfaX_Rif1 = cell2mat(DATnodoRSN(:,3)); ErrRSNLink_Rif1 = cell2mat(DATnodoRSN(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; [rD,cD] = size(DATnodoRSN_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; AlfaX_1 = cell2mat(DATnodoRSN_0(1,3)); else AlfaX_1 = cell2mat(DATnodoRSN_0(1,3)); end % --- DT0002 --- DTcatena2 = 'DT0002'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSN); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSN(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSN_Rif2 = T; end AlfaX_Rif2 = cell2mat(DATnodoRSN(:,3)); ErrRSNLink_Rif2 = cell2mat(DATnodoRSN(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; [rD,cD] = size(DATnodoRSN_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; AlfaX_2 = cell2mat(DATnodoRSN_0(1,3)); else AlfaX_2 = cell2mat(DATnodoRSN_0(1,3)); end % --- DT0003 --- DTcatena3 = 'DT0003'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSN); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSN(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSN_Rif3 = T; end AlfaX_Rif3 = cell2mat(DATnodoRSN(:,3)); ErrRSNLink_Rif3 = cell2mat(DATnodoRSN(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; [rD,cD] = size(DATnodoRSN_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; AlfaX_3 = cell2mat(DATnodoRSN_0(1,3)); else AlfaX_3 = cell2mat(DATnodoRSN_0(1,3)); end end if nTr == 2 || nTr == 3 % --- DT0004 --- DTcatena4 = 'DT0004'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSN); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSN(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSN_Rif4 = T; end AlfaX_Rif4 = cell2mat(DATnodoRSN(:,3)); ErrRSNLink_Rif4 = cell2mat(DATnodoRSN(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; [rD,cD] = size(DATnodoRSN_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; AlfaX_4 = cell2mat(DATnodoRSN_0(1,3)); else AlfaX_4 = cell2mat(DATnodoRSN_0(1,3)); end % --- DT0005 --- DTcatena5 = 'DT0005'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSN); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSN(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSN_Rif5 = T; end AlfaX_Rif5 = cell2mat(DATnodoRSN(:,3)); ErrRSNLink_Rif5 = cell2mat(DATnodoRSN(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; [rD,cD] = size(DATnodoRSN_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; AlfaX_5 = cell2mat(DATnodoRSN_0(1,3)); else AlfaX_5 = cell2mat(DATnodoRSN_0(1,3)); end end text = 'Last month data of RSN Link sensors recovered for Vobarno site'; fprintf(fileID,fmt,text); else comando = ['select EventDate, EventTime, AlfaX, AlfaY, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSN); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSN(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSN_Rif = T; end AlfaX_Rif = cell2mat(DATnodoRSN(:,3)); AlfaY_Rif = cell2mat(DATnodoRSN(:,4)); ErrRSNLink_Rif = cell2mat(DATnodoRSN(:,5)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; [rD,cD] = size(DATnodoRSN_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN_0 = curs.Data; AlfaX_0 = cell2mat(DATnodoRSN_0(1,3)); else AlfaX_0 = cell2mat(DATnodoRSN_0(1,3)); end text = 'Last month data of RSN Link sensors recovered'; fprintf(fileID,fmt,text); end end % --- RSN Link HR --- if Tr == 1 DataScarico = datestr(ARRAYdateTrL(end)-30,'yyyy/mm/dd'); % scarico a partire da un mese prima NodeType = 'RSN Link HR'; if strcmp(IDcentralina,'ID0060') == 1 % Vobarno if nTr == 1 || nTr == 3 % --- DT0001 --- DTcatena1 = 'DT0001'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSNHR); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSNHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSNHR(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSNHR_Rif1 = T; end AlfaX_HR_Rif1 = cell2mat(DATnodoRSNHR(:,3)); ErrRSNLink_HR_Rif1 = cell2mat(DATnodoRSNHR(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; [rD,cD] = size(DATnodoRSNHR_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; AlfaX_HR_1 = cell2mat(DATnodoRSNHR_0(1,3)); else AlfaX_HR_1 = cell2mat(DATnodoRSNHR_0(1,3)); end % --- DT0002 --- DTcatena2 = 'DT0002'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSNHR); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSNHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSNHR(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSNHR_Rif2 = T; end AlfaX_HR_Rif2 = cell2mat(DATnodoRSNHR(:,3)); ErrRSNLink_HR_Rif2 = cell2mat(DATnodoRSNHR(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; [rD,cD] = size(DATnodoRSNHR_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; AlfaX_HR_2 = cell2mat(DATnodoRSNHR_0(1,3)); else AlfaX_HR_2 = cell2mat(DATnodoRSNHR_0(1,3)); end % --- DT0003 --- DTcatena3 = 'DT0003'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSNHR); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSNHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSNHR(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSNHR_Rif3 = T; end AlfaX_HR_Rif3 = cell2mat(DATnodoRSNHR(:,3)); ErrRSNLink_HR_Rif3 = cell2mat(DATnodoRSNHR(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; [rD,cD] = size(DATnodoRSNHR_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; AlfaX_HR_3 = cell2mat(DATnodoRSNHR_0(1,3)); else AlfaX_HR_3 = cell2mat(DATnodoRSNHR_0(1,3)); end end if nTr == 2 || nTr == 3 % --- DT0004 --- DTcatena4 = 'DT0004'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSNHR); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSNHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSNHR(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSNHR_Rif4 = T; end AlfaX_HR_Rif4 = cell2mat(DATnodoRSNHR(:,3)); ErrRSNLink_HR_Rif4 = cell2mat(DATnodoRSNHR(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; [rD,cD] = size(DATnodoRSNHR_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; AlfaX_HR_4 = cell2mat(DATnodoRSNHR_0(1,3)); else AlfaX_HR_4 = cell2mat(DATnodoRSNHR_0(1,3)); end % --- DT0005 --- DTcatena5 = 'DT0005'; comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoRSNHR); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoRSNHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoRSNHR(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataRSNHR_Rif5 = T; end AlfaX_HR_Rif5 = cell2mat(DATnodoRSNHR(:,3)); ErrRSNLink_HR_Rif5 = cell2mat(DATnodoRSNHR(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; [rD,cD] = size(DATnodoRSNHR_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, AlfaX, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR_0 = curs.Data; AlfaX_HR_5 = cell2mat(DATnodoRSNHR_0(1,3)); else AlfaX_HR_5 = cell2mat(DATnodoRSNHR_0(1,3)); end end text = 'Last month data of RSN HR Link sensors recovered for Vobarno site'; fprintf(fileID,fmt,text); end end % --- Load Link --- if Tr == 1 DataScarico = datestr(ARRAYdateTrL(end)-30,'yyyy/mm/dd'); % scarico a partire da un mese prima NodeType = 'Load Link'; if strcmp(IDcentralina,'ID0060') == 1 % Vobarno if nTr == 1 || nTr == 3 % --- DT0001 --- DTcatena1 = 'DT0001'; comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoLL); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoLL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataLL_Rif1 = T; end Load_Rif1 = cell2mat(DATnodoLL(:,3)); ErrLoadLink_Rif1 = cell2mat(DATnodoLL(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; [rD,cD] = size(DATnodoLL_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena1 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; Load_1 = cell2mat(DATnodoLL_0(1,3)); else Load_1 = cell2mat(DATnodoLL_0(1,3)); end % --- DT0002 --- DTcatena2 = 'DT0002'; comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoLL); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoLL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataLL_Rif2 = T; end Load_Rif2 = cell2mat(DATnodoLL(:,3)); ErrLoadLink_Rif2 = cell2mat(DATnodoLL(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; [rD,cD] = size(DATnodoLL_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena2 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; Load_2 = cell2mat(DATnodoLL_0(1,3)); else Load_2 = cell2mat(DATnodoLL_0(1,3)); end % --- DT0003 --- DTcatena3 = 'DT0003'; comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoLL); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoLL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataLL_Rif3 = T; end Load_Rif3 = cell2mat(DATnodoLL(:,3)); ErrLoadLink_Rif3 = cell2mat(DATnodoLL(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; [rD,cD] = size(DATnodoLL_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena3 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; Load_3 = cell2mat(DATnodoLL_0(1,3)); else Load_3 = cell2mat(DATnodoLL_0(1,3)); end end if nTr == 2 || nTr == 3 % --- DT0004 --- DTcatena4 = 'DT0004'; comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoLL); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoLL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataLL_Rif4 = T; end Load_Rif4 = cell2mat(DATnodoLL(:,3)); ErrLoadLink_Rif4 = cell2mat(DATnodoLL(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; [rD,cD] = size(DATnodoLL_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena4 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; Load_4 = cell2mat(DATnodoLL_0(1,3)); else Load_4 = cell2mat(DATnodoLL_0(1,3)); end % --- DT0005 --- DTcatena5 = 'DT0005'; comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate >= ''' ... DataScarico ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL = curs.Data; % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATnodoLL); if rD ~=1 && cD ~=1 T = [cell2mat(DATnodoLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATnodoLL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DataLL_Rif5 = T; end Load_Rif5 = cell2mat(DATnodoLL(:,3)); ErrLoadLink_Rif5 = cell2mat(DATnodoLL(:,4)); % Primo valore elaborato comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate = ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; [rD,cD] = size(DATnodoLL_0); if rD == 1 && cD == 1 comando = ['select EventDate, EventTime, load_value, calcerr from ElabDataView where EventDate > ''' ... date ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena5 ... ''' and NodeType = ''' NodeType ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoLL_0 = curs.Data; Load_5 = cell2mat(DATnodoLL_0(1,3)); else Load_5 = cell2mat(DATnodoLL_0(1,3)); end end text = 'Last month data of Load Link sensors recovered for Vobarno site'; fprintf(fileID,fmt,text); end end %% ---SOGLIE--- % Allerta alarm = 0; alert = 0; AL = 1; % --- Trigger --- if yesTrL == 1 if Tr == 1 % Vobarno if ARRAYdateTrL(end) > DATA_rif DataRifALE = datestr(ARRAYdateTrL(end),'yyyy/mm/dd HH:MM:SS'); % data attivazione allerta % Codice if nTr == 1 || nTr == 3 text = 'Inizio confronto soglie relative per il sito di Vobarno'; fprintf(fileID,fmt,text); % --- CALCOLO SOGLIE RELATIVE --- % --- Modulo RSN 1 --- % MEMS indexRSN_1 = find(DataRSN_Rif1(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSN_1 = AlfaX_Rif1(indexRSN_1(end),1)-AlfaX_Rif1(indexRSN_1(end)-1,1); TrendRSN_1 = AlfaX_Rif1(indexRSN_1(1:end-1),1); if abs(TrigRSN_1) > 3*std(abs(diff(TrendRSN_1))) RSN_1 = 1; elseif ErrRSNLink_Rif1(indexRSN_1(end),1) == 1 && ErrRSNLink_Rif1(indexRSN_1(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_1 = 0.5; else RSN_1 = 0; end % Ampolla indexRSNHR_1 = find(DataRSNHR_Rif1(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSNHR_1 = AlfaX_HR_Rif1(indexRSNHR_1(end),1)-AlfaX_HR_Rif1(indexRSNHR_1(end)-1,1); TrendRSNHR_1 = AlfaX_HR_Rif1(indexRSNHR_1(1:end-1),1); if abs(TrigRSNHR_1) > 3*std(abs(diff(TrendRSNHR_1))) RSNHR_1 = 1; elseif ErrRSNLink_HR_Rif1(indexRSNHR_1(end),1) == 1 && ErrRSNLink_HR_Rif1(indexRSNHR_1(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_1 = 0.5; else RSNHR_1 = 0; end % Cella di carico indexLL_1 = find(DataLL_Rif1(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigLL_1 = Load_Rif1(indexLL_1(end),1)-Load_Rif1(indexLL_1(end)-1,1); TrendLL_1 = Load_Rif1(indexLL_1(1:end-1),1); if abs(TrigLL_1) > 3*std(abs(diff(TrendLL_1))) LL_1 = 1; elseif ErrLoadLink_Rif1(indexLL_1(end),1) == 1 && ErrLoadLink_Rif1(indexLL_1(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_1 = 0.5; else LL_1 = 0; end Somma_1 = RSN_1+RSNHR_1+LL_1; if Somma_1 >= 2 Level_1 = 2; else Level_1 = 1; end % --- Modulo RSN 2 --- % MEMS indexRSN_2 = find(DataRSN_Rif2(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSN_2 = AlfaX_Rif2(indexRSN_2(end),1)-AlfaX_Rif2(indexRSN_2(end)-1,1); TrendRSN_2 = AlfaX_Rif2(indexRSN_2(1:end-1),1); if abs(TrigRSN_2) > 3*std(abs(diff(TrendRSN_2))) RSN_2 = 1; elseif ErrRSNLink_Rif2(indexRSN_2(end),1) == 1 && ErrRSNLink_Rif2(indexRSN_2(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_2 = 0.5; else RSN_2 = 0; end % Ampolla indexRSNHR_2 = find(DataRSNHR_Rif2(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSNHR_2 = AlfaX_HR_Rif2(indexRSNHR_2(end),1)-AlfaX_HR_Rif2(indexRSNHR_2(end)-1,1); TrendRSNHR_2 = AlfaX_HR_Rif2(indexRSNHR_2(1:end-1),1); if abs(TrigRSNHR_2) > 3*std(abs(diff(TrendRSNHR_2))) RSNHR_2 = 1; elseif ErrRSNLink_HR_Rif2(indexRSNHR_2(end),1) == 1 && ErrRSNLink_HR_Rif2(indexRSNHR_2(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_2 = 0.5; else RSNHR_2 = 0; end % Cella di carico indexLL_2 = find(DataLL_Rif2(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigLL_2 = Load_Rif2(indexLL_2(end),1)-Load_Rif2(indexLL_2(end)-1,1); TrendLL_2 = Load_Rif2(indexLL_2(1:end-1),1); if abs(TrigLL_2) > 3*std(abs(diff(TrendLL_2))) LL_2 = 1; elseif ErrLoadLink_Rif2(indexLL_2(end),1) == 1 && ErrLoadLink_Rif2(indexLL_2(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_2 = 0.5; else LL_2 = 0; end Somma_2 = RSN_2+RSNHR_2+LL_2; if Somma_2 >= 2 Level_2 = 2; else Level_2 = 1; end % --- Modulo RSN 3 --- % MEMS indexRSN_3 = find(DataRSN_Rif3(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSN_3 = AlfaX_Rif3(indexRSN_3(end),1)-AlfaX_Rif3(indexRSN_3(end)-1,1); TrendRSN_3 = AlfaX_Rif3(indexRSN_3(1:end-1),1); if abs(TrigRSN_3) > 3*std(abs(diff(TrendRSN_3))) RSN_3 = 1; elseif ErrRSNLink_Rif3(indexRSN_3(end),1) == 1 && ErrRSNLink_Rif3(indexRSN_3(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_3 = 0.5; else RSN_3 = 0; end % Ampolla indexRSNHR_3 = find(DataRSNHR_Rif3(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSNHR_3 = AlfaX_HR_Rif3(indexRSNHR_3(end),1)-AlfaX_HR_Rif3(indexRSNHR_3(end)-1,1); TrendRSNHR_3 = AlfaX_HR_Rif3(indexRSNHR_3(1:end-1),1); if abs(TrigRSNHR_3) > 3*std(abs(diff(TrendRSNHR_3))) RSNHR_3 = 1; elseif ErrRSNLink_HR_Rif3(indexRSNHR_3(end),1) == 1 && ErrRSNLink_HR_Rif3(indexRSNHR_3(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_3 = 0.5; else RSNHR_3 = 0; end % Cella di carico indexLL_3 = find(DataLL_Rif3(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigLL_3 = Load_Rif3(indexLL_3(end),1)-Load_Rif3(indexLL_3(end)-1,1); TrendLL_3 = Load_Rif3(indexLL_3(1:end-1),1); if abs(TrigLL_3) > 3*std(abs(diff(TrendLL_3))) LL_3 = 1; elseif ErrLoadLink_Rif3(indexLL_3(end),1) == 1 && ErrLoadLink_Rif3(indexLL_3(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_3 = 0.5; else LL_3 = 0; end Somma_3 = RSN_3+RSNHR_3+LL_3; if Somma_3 >= 2 Level_3 = 2; else Level_3 = 1; end % --- CALCOLO SOGLIE ASSOLUTE --- text = 'Inizio confronto soglie assolute per il sito di Vobarno'; fprintf(fileID,fmt,text); % --- Modulo RSN 1 --- if Level_1 == 2 % MEMS if AlfaX_Rif1(indexRSN_1(end),1)-AlfaX_1 > 5 % Gradi RSN_1 = 1; elseif ErrRSNLink_Rif1(indexRSN_1(end),1) == 1 && ErrRSNLink_Rif1(indexRSN_1(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_1 = 0.5; else RSN_1 = 0; end % Ampolla if AlfaX_HR_Rif1(indexRSNHR_1(end),1)-AlfaX_HR_1 > 5 % Gradi RSNHR_1 = 1; elseif ErrRSNLink_HR_Rif1(indexRSNHR_1(end),1) == 1 && ErrRSNLink_HR_Rif1(indexRSNHR_1(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_1 = 0.5; else RSNHR_1 = 0; end % Cella di carico if Load_Rif1(indexLL_1(end),1)-Load_1 > 65 % kN LL_1 = 1; elseif ErrLoadLink_Rif1(indexLL_1(end),1) == 1 && ErrLoadLink_Rif1(indexLL_1(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_1 = 0.5; else LL_1 = 0; end Somma_1_A = RSN_1+RSNHR_1+LL_1; if Somma_1_A >= 2 Level_1 = 3; end end % --- Modulo RSN 2 --- if Level_2 == 2 % MEMS if AlfaX_Rif2(indexRSN_2(end),1)-AlfaX_2 > 5 % Gradi RSN_2 = 1; elseif ErrRSNLink_Rif2(indexRSN_2(end),1) == 1 && ErrRSNLink_Rif2(indexRSN_2(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_2 = 0.5; else RSN_2 = 0; end % Ampolla if AlfaX_HR_Rif2(indexRSNHR_2(end),1)-AlfaX_HR_2 > 5 % Gradi RSNHR_2 = 1; elseif ErrRSNLink_HR_Rif2(indexRSNHR_2(end),1) == 1 && ErrRSNLink_HR_Rif2(indexRSNHR_2(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_2 = 0.5; else RSNHR_2 = 0; end % Cella di carico if Load_Rif2(indexLL_2(end),1)-Load_2 > 65 % kN LL_2 = 1; elseif ErrLoadLink_Rif2(indexLL_2(end),1) == 1 && ErrLoadLink_Rif2(indexLL_2(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_2 = 0.5; else LL_2 = 0; end Somma_2_A = RSN_2+RSNHR_2+LL_2; if Somma_2_A >= 2 Level_2 = 3; end end % --- Modulo RSN 3 --- if Level_3 == 2 % MEMS if AlfaX_Rif3(indexRSN_3(end),1)-AlfaX_3 > 5 % Gradi RSN_3 = 1; elseif ErrRSNLink_Rif3(indexRSN_3(end),1) == 1 && ErrRSNLink_Rif3(indexRSN_3(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_3 = 0.5; else RSN_3 = 0; end % Ampolla if AlfaX_HR_Rif3(indexRSNHR_3(end),1)-AlfaX_HR_3 > 5 % Gradi RSNHR_3 = 1; elseif ErrRSNLink_HR_Rif3(indexRSNHR_3(end),1) == 1 && ErrRSNLink_HR_Rif3(indexRSNHR_3(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_3 = 0.5; else RSNHR_3 = 0; end % Cella di carico if Load_Rif3(indexLL_3(end),1)-Load_3 > 65 % kN LL_3 = 1; elseif ErrLoadLink_Rif3(indexLL_3(end),1) == 1 && ErrLoadLink_Rif3(indexLL_3(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_3 = 0.5; else LL_3 = 0; end Somma_3_A = RSN_3+RSNHR_3+LL_3; if Somma_3_A >= 2 Level_3 = 3; end end end if nTr == 2 || nTr == 3 text = 'Inizio confronto soglie relative per il sito di Vobarno'; fprintf(fileID,fmt,text); % --- CALCOLO SOGLIE RELATIVE --- % --- Modulo RSN 4 --- % MEMS indexRSN_4 = find(DataRSN_Rif4(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSN_4 = AlfaX_Rif4(indexRSN_4(end),1)-AlfaX_Rif4(indexRSN_4(end)-1,1); TrendRSN_4 = AlfaX_Rif4(indexRSN_4(1:end-1),1); if abs(TrigRSN_4) > 3*std(abs(diff(TrendRSN_4))) RSN_4 = 1; elseif ErrRSNLink_Rif4(indexRSN_4(end),1) == 1 && ErrRSNLink_Rif4(indexRSN_4(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_4 = 0.5; else RSN_4 = 0; end % Ampolla indexRSNHR_4 = find(DataRSNHR_Rif4(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSNHR_4 = AlfaX_HR_Rif4(indexRSNHR_4(end),1)-AlfaX_HR_Rif4(indexRSNHR_4(end)-1,1); TrendRSNHR_4 = AlfaX_HR_Rif4(indexRSNHR_4(1:end-1),1); if abs(TrigRSNHR_4) > 3*std(abs(diff(TrendRSNHR_4))) RSNHR_4 = 1; elseif ErrRSNLink_HR_Rif4(indexRSNHR_4(end),1) == 1 && ErrRSNLink_HR_Rif4(indexRSNHR_4(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_4 = 0.5; else RSNHR_4 = 0; end % Cella di carico indexLL_4 = find(DataLL_Rif4(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigLL_4 = Load_Rif4(indexLL_4(end),1)-Load_Rif4(indexLL_4(end)-1,1); TrendLL_4 = Load_Rif4(indexLL_4(1:end-1),1); if abs(TrigLL_4) > 3*std(abs(diff(TrendLL_4))) LL_4 = 1; elseif ErrLoadLink_Rif4(indexLL_4(end),1) == 1 && ErrLoadLink_Rif4(indexLL_4(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_4 = 0.5; else LL_4 = 0; end Somma_4 = RSN_4+RSNHR_4+LL_4; if Somma_4 >= 2 Level_4 = 2; else Level_4 = 1; end % --- Modulo RSN 5 --- % MEMS indexRSN_5 = find(DataRSN_Rif5(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSN_5 = AlfaX_Rif5(indexRSN_5(end),1)-AlfaX_Rif5(indexRSN_5(end)-1,1); TrendRSN_5 = AlfaX_Rif5(indexRSN_5(1:end-1),1); if abs(TrigRSN_5) > 3*std(abs(diff(TrendRSN_5))) RSN_5 = 1; elseif ErrRSNLink_Rif5(indexRSN_5(end),1) == 1 && ErrRSNLink_Rif5(indexRSN_5(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_5 = 0.5; else RSN_5 = 0; end % Ampolla indexRSNHR_5 = find(DataRSNHR_Rif5(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigRSNHR_5 = AlfaX_HR_Rif5(indexRSNHR_5(end),1)-AlfaX_HR_Rif5(indexRSNHR_5(end)-1,1); TrendRSNHR_5 = AlfaX_HR_Rif5(indexRSNHR_5(1:end-1),1); if abs(TrigRSNHR_5) > 3*std(abs(diff(TrendRSNHR_5))) RSNHR_5 = 1; elseif ErrRSNLink_HR_Rif5(indexRSNHR_5(end),1) == 1 && ErrRSNLink_HR_Rif5(indexRSNHR_5(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_5 = 0.5; else RSNHR_5 = 0; end % Cella di carico indexLL_5 = find(DataLL_Rif5(:,1)<=datenum(dataTrig)); % Dati precedenti al trigger TrigLL_5 = Load_Rif5(indexLL_5(end),1)-Load_Rif5(indexLL_5(end)-1,1); TrendLL_5 = Load_Rif5(indexLL_5(1:end-1),1); if abs(TrigLL_5) > 3*std(abs(diff(TrendLL_5))) LL_5 = 1; elseif ErrLoadLink_Rif5(indexLL_5(end),1) == 1 && ErrLoadLink_Rif5(indexLL_5(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_5 = 0.5; else LL_5 = 0; end Somma_5 = RSN_5+RSNHR_5+LL_5; if Somma_5 >= 2 Level_5 = 2; else Level_5 = 1; end % --- CALCOLO SOGLIE ASSOLUTE --- text = 'Inizio confronto soglie assolute per il sito di Vobarno'; fprintf(fileID,fmt,text); % --- Modulo RSN 4 --- if Level_4 == 2 % MEMS if AlfaX_Rif4(indexRSN_4(end),1)-AlfaX_4 > 5 % Gradi RSN_4 = 1; elseif ErrRSNLink_Rif4(indexRSN_4(end),1) == 1 && ErrRSNLink_Rif4(indexRSN_4(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_4 = 0.5; else RSN_4 = 0; end % Ampolla if AlfaX_HR_Rif4(indexRSNHR_4(end),1)-AlfaX_HR_4 > 5 % Gradi RSNHR_4 = 1; elseif ErrRSNLink_HR_Rif4(indexRSNHR_4(end),1) == 1 && ErrRSNLink_HR_Rif4(indexRSNHR_4(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_4 = 0.5; else RSNHR_4 = 0; end % Cella di carico if Load_Rif4(indexLL_4(end),1)-Load_4 > 65 % kN LL_4 = 1; elseif ErrLoadLink_Rif4(indexLL_4(end),1) == 1 && ErrLoadLink_Rif4(indexLL_4(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_4 = 0.5; else LL_4 = 0; end Somma_4_A = RSN_4+RSNHR_4+LL_4; if Somma_4_A >= 2 Level_4 = 3; end end % --- Modulo RSN 5 --- if Level_5 == 2 % MEMS if AlfaX_Rif5(indexRSN_5(end),1)-AlfaX_5 > 5 % Gradi RSN_5 = 1; elseif ErrRSNLink_Rif5(indexRSN_5(end),1) == 1 && ErrRSNLink_Rif5(indexRSN_5(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSN_5 = 0.5; else RSN_5 = 0; end % Ampolla if AlfaX_HR_Rif5(indexRSNHR_5(end),1)-AlfaX_HR_5 > 5 % Gradi RSNHR_5 = 1; elseif ErrRSNLink_HR_Rif5(indexRSNHR_5(end),1) == 1 && ErrRSNLink_HR_Rif5(indexRSNHR_5(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima RSNHR_5 = 0.5; else RSNHR_5 = 0; end % Cella di carico if Load_Rif5(indexLL_5(end),1)-Load_5 > 65 % kN LL_5 = 1; elseif ErrLoadLink_Rif5(indexLL_5(end),1) == 1 && ErrLoadLink_Rif5(indexLL_5(end-1),1) == 0 % In errore dopo il trigger, NON in errore prima LL_5 = 0.5; else LL_5 = 0; end Somma_5_A = RSN_5+RSNHR_5+LL_5; if Somma_5_A >= 2 Level_5 = 3; end end end AL = 1; % --- Solo Trigger --- if nTr == 1 && Level_1 == 1 && Level_2 == 1 && Level_3 == 1 sms = 0; Level = 1; NodeNum = 1; Data = dataTrig; Somma = max([Somma_1,Somma_2,Somma_3]); desc = ['Punteggio ' num2str(Somma)]; 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alert = 1; end if nTr == 2 && Level_4 == 1 && Level_5 == 1 sms = 0; Level = 1; NodeNum = 2; Data = dataTrig; Somma = max([Somma_4,Somma_5]); desc = ['Punteggio ' num2str(Somma)]; 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alert = 1; end if nTr == 3 && Level_1 == 1 && Level_2 == 1 && Level_3 == 1 sms = 0; Level = 1; NodeNum = 1; Data = dataTrig; Somma = max([Somma_1,Somma_2,Somma_3]); desc = ['Punteggio ' num2str(Somma)]; 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alert = 1; end if nTr == 3 && Level_4 == 1 && Level_5 == 1 sms = 0; Level = 1; NodeNum = 2; Data = dataTrig; Somma = max([Somma_4,Somma_5]); desc = ['Punteggio ' num2str(Somma)]; 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alert = 1; end % --- Modulo 1 --- if Level_1 >= 2 if Level_1 == 3 sms = 1; alarm = 1; SirenON = 1; DataRifALA = datenum(dataTrig); else sms = 0; alert = 1; DataRifALE = datenum(dataTrig); end Level = Level_1; Data = dataTrig; NodeNum = 1; desc = ['Punteggio Livello 2: ' num2str(Somma_1) ', Punteggio Livello 3: ' num2str(Somma_1_A) ]; DATAinsert{AL,1} = 3; % Allarme tipologia Soglie tradizionali DATAinsert{AL,2} = IDcentralina; DATAinsert{AL,3} = 'DT0001'; DATAinsert{AL,4} = NodeNum; DATAinsert{AL,5} = Data; DATAinsert{AL,6} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; end % --- Modulo 2 --- if Level_2 >= 2 if Level_2 == 3 sms = 1; alarm = 1; SirenON = 1; DataRifALA = datenum(dataTrig); else sms = 0; alert = 1; DataRifALE = datenum(dataTrig); end Level = Level_2; Data = dataTrig; NodeNum = 1; desc = ['Punteggio Livello 2: ' num2str(Somma_2) ', Punteggio Livello 3: ' num2str(Somma_2_A) ]; DATAinsert{AL,1} = 3; % Allarme tipologia Soglie tradizionali DATAinsert{AL,2} = IDcentralina; DATAinsert{AL,3} = 'DT0002'; DATAinsert{AL,4} = NodeNum; DATAinsert{AL,5} = Data; DATAinsert{AL,6} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; end % --- Modulo 3 --- if Level_3 >= 2 if Level_3 == 3 sms = 1; alarm = 1; SirenON = 1; DataRifALA = datenum(dataTrig); else sms = 0; alert = 1; DataRifALE = datenum(dataTrig); end Level = Level_3; Data = dataTrig; NodeNum = 1; desc = ['Punteggio Livello 2: ' num2str(Somma_3) ', Punteggio Livello 3: ' num2str(Somma_3_A) ]; DATAinsert{AL,1} = 3; % Allarme tipologia Soglie tradizionali DATAinsert{AL,2} = IDcentralina; DATAinsert{AL,3} = 'DT0003'; DATAinsert{AL,4} = NodeNum; DATAinsert{AL,5} = Data; DATAinsert{AL,6} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; end % --- Modulo 4 --- if Level_4 >= 2 if Level_4 == 3 sms = 1; alarm = 1; SirenON = 1; DataRifALA = datenum(dataTrig); else sms = 0; alert = 1; DataRifALE = datenum(dataTrig); end Level = Level_4; Data = dataTrig; NodeNum = 1; desc = ['Punteggio Livello 2: ' num2str(Somma_4) ', Punteggio Livello 3: ' num2str(Somma_4_A) ]; DATAinsert{AL,1} = 3; % Allarme tipologia Soglie tradizionali DATAinsert{AL,2} = IDcentralina; DATAinsert{AL,3} = 'DT0004'; DATAinsert{AL,4} = NodeNum; DATAinsert{AL,5} = Data; DATAinsert{AL,6} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; end % --- Modulo 5 --- if Level_5 >= 2 if Level_5 == 3 sms = 1; alarm = 1; SirenON = 1; DataRifALA = datenum(dataTrig); else sms = 0; alert = 1; DataRifALE = datenum(dataTrig); end Level = Level_5; Data = dataTrig; NodeNum = 1; desc = ['Punteggio Livello 2: ' num2str(Somma_5) ', Punteggio Livello 3: ' num2str(Somma_5_A) ]; DATAinsert{AL,1} = 3; % Allarme tipologia Soglie tradizionali DATAinsert{AL,2} = IDcentralina; DATAinsert{AL,3} = 'DT0005'; DATAinsert{AL,4} = NodeNum; DATAinsert{AL,5} = Data; DATAinsert{AL,6} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; end end elseif Tr == 2 % A27 - Trigger if datenum(dataTrig) > DataRifALE DataRifALE = datenum(dataTrig); sms = 1; NodeNum = 1; Level = 1; Data = dataTrig; desc = 'sensore finecorsa'; 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alarm = 1; end elseif Tr == 3 % A27 - Fadalto if datenum(dataTrig) > DataRifALE DataRifALE = datenum(dataTrig); sms = 0; NodeNum = 1; Level = 1; Data = dataTrig; comando = ['select `desc` from tools where unit_id = ''' ... unitID ''' and name = ''' DTcatena ''' ']; curs = exec(conn,comando); curs = fetch(curs); desc = char(curs.Data); 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alarm = 1; end end end NoValue = 1; % --- Shock Sensor --- if yesSS == 1 if SS == 1 % Ne è scattato almeno uno [rSS,~] = size(DataSS); if rSS > 0 s = 1; while s <= rSS if DataSS(s) > DATA_rif % Cerco per ogni Impatto e mi ricordo che esistono 3 letture per impatto Level = 1; if yesRSN == 1 % Livello 2 -> Controllo se la prima lettura ha % provocato una rotazione del montante verso valle text = 'Inizio confronto soglie moduli D-Fence'; fprintf(fileID,fmt,text); % --- CALCOLO SOGLIE RELATIVE 1° LETTURA --- indexRSN = find(DataRSN_Rif(:,1)= ''' DataScarico ''' and type_id = ''' type ... ''' order by date_time']; curs = exec(conn,comando); curs = fetch(curs); StoricoAllarmi = curs.Data; [rSA,cSA] = size(StoricoAllarmi); index = []; if cSA > 1 I = 1; for ii = 1:rSA check = find(datenum(StoricoAllarmi(ii,2))==DataRSN_Rif); if isempty(check) == 0 index(I) = check; I = I+1; end end I = I-1; % Numero di indici da eliminare else I = 0; end AttX = 0; AttY = 0; NUM = 0; if I > 0 for i = 1:I dim = size(TrendRSN_X); if index(i)-NUM <= dim(1) TrendRSN_X(index(i)-NUM)=[]; TrendRSN_Y(index(i)-NUM)=[]; NUM = NUM+1; end end end SogliaX = 10*std(abs(diff(TrendRSN_X)))+mean(abs(diff(TrendRSN_X))); % Soglia di 10 dev.st. SogliaY = 10*std(abs(diff(TrendRSN_Y)))+mean(abs(diff(TrendRSN_X))); % Soglia di 10 dev.st. if abs(TrigRSN_X) > SogliaX || abs(TrigRSN_Y) > SogliaY RSN = 1; if abs(TrigRSN_X) > SogliaX && abs(TrigRSN_Y) > SogliaY AttX = 1; AttY = 1; elseif abs(TrigRSN_X) > SogliaX AttX = 1; elseif abs(TrigRSN_Y) > SogliaY AttY = 1; end elseif ErrRSNLink_Rif(indexRSN(end)+1,1) == 1 && ErrRSNLink_Rif(indexRSN(end),1) == 0 % In errore dopo il trigger, NON in errore prima RSN = 0.5; else RSN = 0; end Somma = RSN; if Somma >= 1 Level = 2; Value_X = abs(TrigRSN_X); Value_Y = abs(TrigRSN_Y); end % --- CALCOLO SOGLIE RELATIVE 3° LETTURA--- % Livello 3 TrigRSN_X = AlfaX_Rif(indexRSN(end)+1,1)-AlfaX_Rif(indexRSN(end),1); TrigRSN_Y = AlfaY_Rif(indexRSN(end)+1,1)-AlfaY_Rif(indexRSN(end),1); if abs(TrigRSN_X) > SogliaX || abs(TrigRSN_Y) > SogliaY RSN = 1; if abs(TrigRSN_X) > SogliaX && abs(TrigRSN_Y) > SogliaY AttX = 1; AttY = 1; elseif abs(TrigRSN_X) > SogliaX AttX = 1; AttY = 0; elseif abs(TrigRSN_Y) > SogliaY AttX = 0; AttY = 1; end elseif ErrRSNLink_Rif(indexRSN(end)+1,1) == 1 && ErrRSNLink_Rif(indexRSN(end),1) == 0 % In errore dopo il trigger, NON in errore prima RSN = 0.5; else RSN = 0; end Somma = RSN; if Somma >= 1 Level = 3; Value_X = abs(TrigRSN_X); Value_Y = abs(TrigRSN_Y); end % --- CALCOLO SOGLIE ASSOLUTE --- % Livello 4 -> Soglie SEL if Level == 3 || Level == 2 % MEMS if abs(AlfaX_Rif(indexRSN(end)+1,1)-AlfaX_0) > SEL % Gradi RSN = 1; else RSN = 0; end Somma_S = RSN; if Somma_S >= 1 Level = 4; Value_X = abs(TrigRSN_X); end end % Livello 5 -> Soglie MEL if Level == 4 % MEMS if abs(AlfaX_Rif(indexRSN(end)+1,1)-AlfaX_0) > MEL % Gradi RSN = 1; else RSN = 0; end Somma_M = RSN; if Somma_M >= 1 Level = 5; Value_X = abs(TrigRSN_X); end end % Scrivo if Level == 1 % Shock DataRifALE = DataSS(s); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alert = 1; NodeNum = 2; elseif Level == 2 % Soglie relative Prima lettura DataRifALE = DataSS(s); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alert = 1; NodeNum = 1; elseif Level == 3 % Soglie relative terza lettura DataRifALE = DataSS(s); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alert = 1; NodeNum = 1; elseif Level == 4 % Soglia SEL DataRifALA = DataSS(s); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alarm = 1; NodeNum = 1; elseif Level == 5 % Soglia MEL DataRifALA = DataSS(s); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alarm = 1; NodeNum = 1; end Data = datestr(DataSS(s),'yyyy/mm/dd HH:MM:SS'); comando = ['select `desc` from tools where unit_id = ''' ... unitID ''' and name = ''' DTcatena ''' ']; curs = exec(conn,comando); curs = fetch(curs); desc = char(curs.Data); 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; if Level ~= 1 if Level > 3 DATAinsert{AL,9} = Value_X; else if AttX == 1 DATAinsert{AL,9} = Value_X; elseif AttY == 1 DATAinsert{AL,9} = Value_Y; end end NoValue = 0; end AL = AL+1; else DataRifALE = Data(ss); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end NodeNum = cell2mat(NodoSS(2)); Level = 1; Data = datestr(Data(ss),'yyyy/mm/dd HH:MM:SS'); comando = ['select `desc` from tools where unit_id = ''' ... unitID ''' and name = ''' DTcatena ''' ']; curs = exec(conn,comando); curs = fetch(curs); desc = char(curs.Data); 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alert = 1; end end s = s+1; end end else if yesRSN == 1 % Anche se non è scattato lo Shock Sensor, controllo se % l'ultima lettura si discosta molto dalle precedenti text = 'Inizio confronto soglie moduli D-Fence'; fprintf(fileID,fmt,text); % --- CALCOLO SOGLIE RELATIVE --- index_RSN = find(DataRSN_Rif>=datenum(datainiRSN)); % cerco i dati nuovi [rI,~] = size(index_RSN); RSN_X = zeros(rI,1); RSN_Y = zeros(rI,1); for jj = 1:rI if index_RSN(jj) ~= 1 RSN_X(jj,1) = AlfaX_Rif(index_RSN(jj),1)-AlfaX_Rif(index_RSN(jj)-1,1); RSN_Y(jj,1) = AlfaY_Rif(index_RSN(jj),1)-AlfaY_Rif(index_RSN(jj)-1,1); end end % Scarico eventuali alert già attivati nNodo = num2str(1); type = num2str(3); % tipologia soglie tradizionali comando = ['select type_id, date_time from alarms where unit_name = ''' ... IDcentralina ''' and tool_name = ''' DTcatena ''' and node_num = ''' ... nNodo ''' and date_time >= ''' DataScarico ''' and type_id = ''' type ... ''' order by date_time']; curs = exec(conn,comando); curs = fetch(curs); StoricoAllarmi = curs.Data; [rSA,cSA] = size(StoricoAllarmi); index = []; if cSA > 1 I = 1; for ii = 1:rSA check = find(datenum(StoricoAllarmi(ii,2))==DataRSN_Rif); if isempty(check) == 0 index(I) = check; I = I+1; end end I = I-1; % Numero di indici da eliminare else I = 0; end for aa = 1:rI TrendRSN_X = AlfaX_Rif(1:index_RSN(aa),1); TrendRSN_Y = AlfaY_Rif(1:index_RSN(aa),1); NUM = 0; if I > 0 for i = 1:I dim = size(TrendRSN_X); if index(i)-NUM <= dim(1) TrendRSN_X(index(i)-NUM)=[]; TrendRSN_Y(index(i)-NUM)=[]; NUM = NUM+1; end end end SogliaX = 10*std(abs(diff(TrendRSN_X)))+mean(abs(diff(TrendRSN_X))); % Soglia di 10 dev.st. SogliaY = 10*std(abs(diff(TrendRSN_Y)))+mean(abs(diff(TrendRSN_Y))); % Soglia di 10 dev.st. AttX = 0; AttY = 0; Level = 0; % --- Livello 0.1 --- if abs(RSN_X(aa)) > SogliaX || abs(RSN_Y(aa)) > SogliaY % L'ultima lettura è fuori trend RSN = 1; if abs(RSN_X(aa)) > SogliaX || abs(RSN_Y(aa)) > SogliaY AttX = 1; AttY = 1; elseif abs(RSN_X(aa)) > SogliaX AttX = 1; elseif abs(RSN_Y(aa)) > SogliaY AttY = 1; end elseif ErrRSNLink_Rif(index_RSN(aa),1) == 1 && ErrRSNLink_Rif(index_RSN(aa)-1,1) == 0 % In errore all'ultima lettura ma non in quella prima RSN = 0.5; else RSN = 0; end Somma = RSN; if Somma >= 1 Level = 0.1; Value_X = abs(RSN_X(aa)); Value_Y = abs(RSN_Y(aa)); end % --- CALCOLO SOGLIE ASSOLUTE --- % Livello 0.2 -> Soglie SEL if Level == 0.1 % MEMS if abs(AlfaX_Rif(index_RSN(aa),1)) > SEL % Gradi Level = 0.2; Value_X = abs(RSN_X(aa)); end end % Livello 0.3 -> Soglie MEL if Level == 0.1 || Level == 0.2 % MEMS if abs(AlfaX_Rif(index_RSN(aa),1)) > MEL % Gradi Level = 0.3; Value_X = abs(RSN_X(aa)); end end % Scrivo if DataRSN_Rif(aa) > DATA_rif if Level == 0.1 % Lettura fuori trend DataRifALE = DataRSN_Rif(aa); sms = 0; alert = 1; NodeNum = 1; elseif Level == 0.2 % Soglia SEL DataRifALA = DataRSN_Rif(aa); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alarm = 1; NodeNum = 1; elseif Level == 0.3 % Soglia MEL DataRifALA = DataRSN_Rif(aa); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alarm = 1; NodeNum = 1; end end if Level > 0 Data = datestr(DataRSN_Rif(aa),'yyyy/mm/dd HH:MM:SS'); comando = ['select `desc` from tools where unit_id = ''' ... unitID ''' and name = ''' DTcatena ''' ']; curs = exec(conn,comando); curs = fetch(curs); desc = char(curs.Data); 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; if Level > 0.1 DATAinsert{AL,9} = Value_X; NoValue = 0; else if AttX == 1 DATAinsert{AL,9} = Value_X; NoValue = 0; elseif AttY == 1 DATAinsert{AL,9} = Value_Y; NoValue = 0; end end AL = AL+1; end end else DataRifALE = Data(ss); sms = 0; NodeNum = 2; Level = 1; Data = datestr(Data(ss),'yyyy/mm/dd HH:MM:SS'); comando = ['select `desc` from tools where unit_id = ''' ... unitID ''' and name = ''' DTcatena ''' ']; curs = exec(conn,comando); curs = fetch(curs); desc = char(curs.Data); 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; AL = AL+1; alert = 1; end end elseif yesRSN == 1 && yesTrL == 0 % Anche se non è scattato il trigger, controllo se % l'ultima lettura si discosta molto dalle precedenti text = 'Inizio confronto soglie moduli D-Fence'; fprintf(fileID,fmt,text); % --- CALCOLO SOGLIE RELATIVE --- index_RSN = find(DataRSN_Rif>=datenum(datainiRSN)); % cerco i dati nuovi [rI,~] = size(index_RSN); RSN_X = zeros(rI,1); RSN_Y = zeros(rI,1); for jj = 1:rI if index_RSN(jj) ~= 1 RSN_X(jj,1) = AlfaX_Rif(index_RSN(jj),1)-AlfaX_Rif(index_RSN(jj)-1,1); RSN_Y(jj,1) = AlfaY_Rif(index_RSN(jj),1)-AlfaY_Rif(index_RSN(jj)-1,1); end end % Scarico eventuali alert già attivati nNodo = num2str(1); type = num2str(3); % tipologia soglie tradizionali comando = ['select type_id, date_time from alarms where unit_name = ''' ... IDcentralina ''' and tool_name = ''' DTcatena ''' and node_num = ''' ... nNodo ''' and date_time >= ''' DataScarico ''' and type_id = ''' type ... ''' order by date_time']; curs = exec(conn,comando); curs = fetch(curs); StoricoAllarmi = curs.Data; [rSA,cSA] = size(StoricoAllarmi); index = []; if cSA > 1 I = 1; for ii = 1:rSA check = find(datenum(StoricoAllarmi(ii,2))==DataRSN_Rif); if isempty(check) == 0 index(I) = check; I = I+1; end end I = I-1; % Numero di indici da eliminare else I = 0; end for aa = 1:rI TrendRSN_X = AlfaX_Rif(1:index_RSN(aa),1); TrendRSN_Y = AlfaY_Rif(1:index_RSN(aa),1); NUM = 0; if I > 0 for i = 1:I dim = size(TrendRSN_X); if index(i)-NUM <= dim(1) TrendRSN_X(index(i)-NUM)=[]; TrendRSN_Y(index(i)-NUM)=[]; NUM = NUM+1; end end end SogliaX = 10*std(abs(diff(TrendRSN_X)))+mean(abs(diff(TrendRSN_X))); % Soglia di 10 dev.st. SogliaY = 10*std(abs(diff(TrendRSN_Y)))+mean(abs(diff(TrendRSN_Y))); % Soglia di 10 dev.st. AttX = 0; AttY = 0; Level = 0; % --- Livello 0.1 --- if abs(RSN_X(aa)) > SogliaX || abs(RSN_Y(aa)) > SogliaY % L'ultima lettura è fuori trend RSN = 1; if abs(RSN_X(aa)) > SogliaX || abs(RSN_Y(aa)) > SogliaY AttX = 1; AttY = 1; elseif abs(RSN_X(aa)) > SogliaX AttX = 1; elseif abs(RSN_Y(aa)) > SogliaY AttY = 1; end elseif ErrRSNLink_Rif(index_RSN(aa),1) == 1 && ErrRSNLink_Rif(index_RSN(aa)-1,1) == 0 % In errore all'ultima lettura ma non in quella prima RSN = 0.5; else RSN = 0; end Somma = RSN; if Somma >= 1 Level = 0.1; Value_X = abs(RSN_X(aa)); Value_Y = abs(RSN_Y(aa)); end % --- CALCOLO SOGLIE ASSOLUTE --- % Livello 0.2 -> Soglie SEL if Level == 0.1 % MEMS if abs(AlfaX_Rif(index_RSN(aa),1)) > SEL % Gradi Level = 0.2; Value_X = abs(RSN_X(aa)); end end % Livello 0.3 -> Soglie MEL if Level == 0.1 || Level == 0.2 % MEMS if abs(AlfaX_Rif(end,1)) > MEL % Gradi Level = 0.3; Value_X = abs(RSN_X(aa)); end end % Scrivo if DataRSN_Rif(aa) > DATA_rif if Level == 0.1 % Lettura fuori trend DataRifALE = DataRSN_Rif(aa); sms = 0; alert = 1; NodeNum = 1; elseif Level == 0.2 % Soglia SEL DataRifALA = DataRSN_Rif(aa); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alarm = 1; NodeNum = 1; elseif Level == 0.3 % Soglia MEL DataRifALA = DataRSN_Rif(aa); if strcmp(NomeSito,'Sede ASE S.r.l.') == 1 sms = 0; else sms = 1; end alarm = 1; NodeNum = 1; end end if Level > 0 Data = datestr(DataRSN_Rif(aa),'yyyy/mm/dd HH:MM:SS'); comando = ['select `desc` from tools where unit_id = ''' ... unitID ''' and name = ''' DTcatena ''' ']; curs = exec(conn,comando); curs = fetch(curs); desc = char(curs.Data); 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = desc; if Level > 0.1 DATAinsert{AL,9} = Value_X; NoValue = 0; else if AttX == 1 DATAinsert{AL,9} = Value_X; NoValue = 0; elseif AttY == 1 DATAinsert{AL,9} = Value_Y; NoValue = 0; end end AL = AL+1; end end end % --- G-Flow --- if yesGF == 1 % Cerco il trend di date del G-Flow Freq = diff(ARRAYdateGF); [rF,~] = size(Freq); indexALA = []; indexALE = []; vALA = 1; vALE = 1; nALE = 1; nALA = 1; for f = 1:rF if Freq(1,1) == 0 if DatiGFLink(f,4) > 1.3 && ARRAYdateGF(f,1) > DATA_rif indexALA(nALA,1) = f; ValueALA(vALA,1) = DatiGFLink(f,4); alarm = 1; nALA = nALA+1; vALA = vALA+1; elseif ARRAYdateGF(f,1) > DATA_rif indexALE(nALE,1) = f; ValueAle(vALE,1) = DatiGFLink(f,4); alert = 1; nALE = nALE+1; vALE = vALE+1; end elseif Freq(f,1) == 0 && Freq(f-1,1) ~= 0 if DatiGFLink(f,4) > 1.3 && ARRAYdateGF(f,1) > DATA_rif indexALA(nALA,1) = f; ValueALA(vALA,1) = DatiGFLink(f,4); alarm = 1; nALA = nALA+1; vALA = vALA+1; elseif ARRAYdateGF(f,1) > DATA_rif indexALE(nALE,1) = f; Valueale(vALE,1) = DatiGFLink(f,4); alert = 1; nALE = nALE+1; vALE = vALE+1; end end end nTot = nALE-1+nALA-1; if nALE-1 > 0 && nALA-1 > 0 indexG = [indexALA;indexALE]; Value = [ValueALA;Valueale]; DataRifALA = ARRAYdateGF(indexALA(end)); DataRifALE = ARRAYdateGF(indexALE(end)); elseif nALA-1 > 0 indexG = indexALA; Value = ValueALA; DataRifALA = ARRAYdateGF(indexALA(end)); elseif indexALE-1 > 0 indexG = indexALE; Value = Valueale; DataRifALE = ARRAYdateGF(indexALE(end)); end if alarm == 1 || alert == 1 for t = 1:nTot sms = 0; NodeNum = 1; Data = datestr(ARRAYdateGF(t),'yyyy/mm/dd HH:MM:SS'); if t <= nALA-1 Level = 2; NoValue = 0; else Level = 1; 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} = Level; DATAinsert{AL,7} = sms; DATAinsert{AL,8} = ''; DATAinsert{AL,9} = Value(AL); AL = AL+1; end end end % --- G-Shock --- if yesGS == 1 % Verificare che il GShock sia scattato e poi verificare la relativa % accelerazione !!!!!!!!!!!!! end if alarm == 1 || alert == 1 AL = AL-1; % Numero totale di allarmi for a = 1:AL % Cerco se il dato è già presente Data = DATAinsert{a,5}; nNodo = num2str(DATAinsert{a,4}); % Numero nodo type = num2str(DATAinsert{a,1}); % tipologia level = num2str(DATAinsert{a,6}); % livello allarme 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 ''' 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'; if NoValue == 0 colnames = {'type_id','unit_name','tool_name','node_num','date_time',... 'alarm_level','send_sms','description','registered_value'}; 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)]; else colnames = {'type_id','unit_name','tool_name','node_num','date_time',... 'alarm_level','send_sms','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)]; end if idElabData == 0 % Scrivo fastinsert(conn,tablename,colnames,data); end end end fileID = fopen(FileNameALA,'a'); outdat = fopen(FileNameALA,'wt+'); fmt = '%.10f \r'; fprintf(fileID,fmt,DataRifALE); fmt = '%.10f \r'; fprintf(fileID,fmt,DataRifALA); fclose(fileID); text = ('alert_Levels function worked correctly'); fileID = fopen(FileName,'a'); fmt = '%s \r'; fprintf(fileID,fmt,text); fclose(fileID); end