Files
matlab-python/RSN/Triggercheck.m

838 lines
38 KiB
Matlab
Executable File

function [sogliaRSN,trigRSN,sogliaHR,trigHR,sogliaLL,trigLL,tipomail_MOD,...
codice_mail,codice_SMS,MATsoglie,DT_BPM] = Triggercheck...
(IDcentralina,DTcatena,conn,ARRAYdateTrL,TrigMod,i,j,date,FileName)
%% Individuo i moduli associati al Trigger
%scrivo nel logfile
text = 'Funzione Triggercheck per il controllo delle soglie di trend inizializzata';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
DT_BPM=TrigMod(:,j); %indice j --> numero trigger
%% Scarico i dati del Trigger Link
data_rif = ARRAYdateTrL(i,1)-7; %7--> n° giorni su cui calcolare il trend
if data_rif > datenum(date)
data = datestr(data_rif,'yyyy-mm-dd');
else
data = date;
end
NodeNum = num2str(j);
comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora in DATini.
[rD,~] = size(Dati);
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
DateTrigger = datenum(T);
dataindex = find(DateTrigger(:,1) == ARRAYdateTrL(i,1));
DataRifTRIGGER = DateTrigger(dataindex-1); % ultima data PRIMA dell'attivazione del trigger
% Scarico i dati di attivazione del Trigger
comando = ['select Xshift from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
DatiTrigger = cell2mat(curs.Data);
%% scarico dati per calcolo trend e confronto soglie
%inizializzo variabili
[rBPM,~]=size(DT_BPM);
sogliaRSN = zeros(rBPM,1); %soglie disattivate
sogliaHR = zeros(rBPM,1);
sogliaLL = zeros(rBPM,1);
tipomail_MOD = zeros(rBPM,1); %tipo di mail da inviare
tipomail_RSN = zeros(rBPM,1); %stato singoli sensori
tipomail_HR = zeros(rBPM,1);
tipomail_LL = zeros(rBPM,1);
codice_SMS = 0; %livello di allerta SMS
trigRSN(1:rBPM,1) = 99999; %valore "neutro" di incremento
trigHR(1:rBPM,1) = 99999;
trigLL(1:rBPM,1) = 99999;
for n=1:rBPM
if isempty(DT_BPM{n}) == 0 % ho un modulo BPM da elaborare
DTmodulo = char(DT_BPM(n));
AlfaX_RSN = []; % matrici di dati (azzerate per evitare problemi di dimensioni tra array)
AlfaX_HR = [];
DatiCella = [];
%scrivo nel logfile
text = ['Inizio confronto soglia di trend per modulo ' DTmodulo ''];
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
%% A partire dal nome della catena, risalgo all'identificativo con cui è
% definita nel Database (mi serve successivamente)
comando = ['select id from units where name = ''' IDcentralina ''' '];
unitID = num2str(cell2mat(fetch(conn,comando)));
comando = ['select id from tools where name = ''' DTmodulo ''' and unit_id = ''' unitID ''' '];
idTool = num2str(cell2mat(fetch(conn,comando))); % leggo e converto in stringa
%% Determino sensori per ciascun modulo RSN
comando = ['select nodetype_id, num from nodes where tool_id = ''' idTool ''' order by num'];
modulo = fetch(conn,comando);
usoRSN = find(cell2mat(modulo(:,1)) == 38); % controllo presenza di RSN Link
usoRSNHR = find(cell2mat(modulo(:,1)) == 39); % controllo presenza di RSNHR Link
usoLOAD = find(cell2mat(modulo(:,1)) == 15); % controllo presenza di Load Link
% RSN Link
if isempty(usoRSN)== 0
data_rif = ARRAYdateTrL(i,1)-7; %7--> n° giorni su cui calcolare il trend
if data_rif > datenum(date)
data = datestr(data_rif,'yyyy-mm-dd');
else
data = date;
end
NodeNum = num2str(cell2mat(modulo(usoRSN,2)));
comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora in DATini.
[rD,~] = size(Dati);
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
DateRSN = datenum(T);
indexRSN = find(DateRSN(:,1)<=DateTrigger(dataindex));
LastDataRSN = DateRSN(indexRSN(end));
% Scarico i dati X
comando = ['select AlfaX from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
AlfaX_RSN(:,1) = cell2mat(curs.Data);
% Scarico i dati calcerr
comando = ['select calcerr from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
AlfaX_RSN(:,2) = cell2mat(curs.Data);
%scrivo nel logfile
text = 'Dati elaborati scaricati per RSN Link';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
% RSNHR Link
if isempty(usoRSNHR)== 0
data_rif = ARRAYdateTrL(i,1)-7; %7--> n° giorni su cui calcolare il trend
if data_rif > datenum(date)
data = datestr(data_rif,'yyyy-mm-dd');
else
data = date;
end
NodeNum = num2str(cell2mat(modulo(usoRSNHR,2)));
comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora in DATini.
[rD,~] = size(Dati);
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
DateHR = datenum(T);
indexHR = find(DateHR(:,1)<=DateTrigger(dataindex));
LastDataHR = DateHR(indexHR(end));
% Scarico i dati X
comando = ['select AlfaX from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
AlfaX_HR(:,1) = cell2mat(curs.Data);
% Scarico i dati calcerr
comando = ['select calcerr from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
AlfaX_HR(:,2) = cell2mat(curs.Data);
%scrivo nel logfile
text = 'Dati elaborati scaricati per RSNHR Link';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
% Load Link
if isempty(usoLOAD)== 0
data_rif = ARRAYdateTrL(i,1)-7; %7--> n° giorni su cui calcolare il trend
if data_rif > datenum(date)
data = datestr(data_rif,'yyyy-mm-dd');
else
data = date;
end
NodeNum = num2str(cell2mat(modulo(usoLOAD,2)));
comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora in DATini.
[rD,~] = size(Dati);
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
DateLL = datenum(T);
indexLL = find(DateLL(:,1)<=DateTrigger(dataindex));
LastDataLOAD = DateLL(indexLL(end));
% Scarico i dati di carico
comando = ['select load_value from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
DatiCella(:,1) = cell2mat(curs.Data);
% Scarico i dati calcerr
comando = ['select calcerr from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
DatiCella(:,2) = cell2mat(curs.Data);
%scrivo nel logfile
text = 'Dati elaborati scaricati per Load Link';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
%% Rimuovo le letture dei moduli eseguite all'attivazione di un Trigger,
% non necessarie per il calcolo del trend
rT = dataindex; %contatore dati
MatRSN = AlfaX_RSN;
MatRSNHR = AlfaX_HR;
MatLOAD = DatiCella;
%creo nuovi indici da aggiornare per "seguire" la dimensione della
%matrice su cui calcolare il trend
indextrendRSN = indexRSN(end);
indextrendHR = indexHR(end);
indextrendLL = indexLL(end);
del = 0;
for k=1:rT
if DatiTrigger(k,1)>=1
del = del + 1 ;
if isempty(usoRSN)== 0
indextrendRSN = indextrendRSN - 1;
precedRSN = find(DateRSN(:,1) <= DateTrigger(k,1));
MatRSN(precedRSN(end),:) = [];
DateRSN(precedRSN(end),:) = [];
end
if isempty(usoRSNHR)== 0
indextrendHR = indextrendHR - 1;
precedRSNHR = find(DateHR(:,1) <= DateTrigger(k,1));
MatRSNHR(precedRSNHR(end),:)=[];
DateHR(precedRSNHR(end),:) = [];
end
if isempty(usoLOAD)== 0
indextrendLL = indextrendLL - 1;
precedLL = find(DateLL(:,1) <= DateTrigger(k,1));
MatLOAD(precedLL(end),:)=[];
DateLL(precedLL(end),:)=[];
end
end
end
%scrivo nel logfile
text = ['Creazione matrice di trend: Rimosse ' num2str(del) ' letture relative al modulo ' DTmodulo ''];
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
%% Calcolo il trend di ciascun sensore presente nel modulo
if isempty(usoRSN)== 0
nRSN = indextrendRSN;
toterrRSN = sum(MatRSN(1:indextrendRSN,2));
if toterrRSN/nRSN > 0.5 % dati insufficienti a calcolare un trend significativo
trendRSN=99999;
else
trendRSN = mean(diff(MatRSN(1:indextrendRSN,1)));
end
end
if isempty(usoRSNHR)== 0
nRSNHR = indextrendHR;
toterrRSNHR = sum(MatRSNHR(1:indextrendHR,2));
if toterrRSNHR/nRSNHR > 0.5 % dati insufficienti a calcolare un trend significativo
trendHR=99999;
else
trendHR = mean(diff(MatRSNHR(1:indextrendHR,1)));
end
end
if isempty(usoLOAD)== 0
nLL = indextrendLL;
toterrLL = sum(MatLOAD(1:indextrendLL,2));
if toterrLL/nLL > 0.5 % dati insufficienti a calcolare un trend significativo
trendLL=99999;
else
trendLL = mean(diff(MatLOAD(1:indextrendLL,1)));
end
end
%scrivo nel logfile
text = ['Trend calcolati per il modulo ' DTmodulo ''];
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
%% Controllo che il modulo BPM sia già stato elaborato, altrimenti forzo
% la funzione RSN per quel modulo in modo da avere l'ultimo dato elaborato
% RSN Link
%scrivo nel logfile
text = 'Inizio controllo soglie di trend per RSN';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
nuovidati = 0;
incRSN=1;
if isempty(usoRSN)== 0
if LastDataRSN >= DataRifTRIGGER
if AlfaX_RSN(indexRSN(end),2)==0 %lettura valida, calcolo incremento
valRSN = AlfaX_RSN(indexRSN(end),1);
trigRSN(n,1) = valRSN - AlfaX_RSN(indexRSN(end-1),1); %incremento allo scatto del trigger
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN - nessun ricalcolo eseguito, incremento calcolato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif AlfaX_RSN(indexRSN(end),2)==1 && AlfaX_RSN(indexRSN(end-1),2)==0 %la lettura precedente NON è in errore, allarme
sogliaRSN(n,1)=1;
incRSN=0;
tipomail_RSN(n,1)=0.33;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN - nessun ricalcolo eseguito, incremento NON calcolato/allarme per lettura precedente NON errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif AlfaX_RSN(indexRSN(end),2)==1 && AlfaX_RSN(indexRSN(end-1),2)==1 %letture in errore, trigger disattivato
sogliaRSN(n,1)=0;
incRSN=0;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN - nessun ricalcolo eseguito, incremento NON calcolato/modulo in errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
else
rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '...
IDcentralina ' ' DTmodulo ''];
status = system(rilancio); %forzo RSN
nuovidati = 1; %ultimi dati elaborati disponibili per tutti i sensori successivi
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN - il software e'''' stato rilanciato!';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
data_rif = ARRAYdateTrL(i-1,1);
if data_rif > datenum(date)
data = datestr(data_rif,'yyyy-mm-dd');
else
data = date;
end
NodeNum = num2str(cell2mat(modulo(usoRSN,2)));
comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora in DATini.
[rD,~] = size(Dati);
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
Date = datenum(T);
indexRSN = indexRSN +1; % la data del Trigger è quella aggiunta dalla rielaborazione
% Scarico i dati X
comando = ['select AlfaX from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
valRSN = cell2mat(curs.Data); %valore post attivazione Trigger
valRSN = valRSN(indexRSN(end));
% Scarico i dati calcerr
comando = ['select calcerr from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
erroreRSN = cell2mat(curs.Data); %lettura valida-0 o in errore-1
erroreRSN = erroreRSN(indexRSN(end));
if erroreRSN ==0 %lettura valida, calcolo incremento
trigRSN(n,1) = valRSN - AlfaX_RSN(indexRSN(end),1); %incremento allo scatto del trigger
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN - ricalcolo eseguito, incremento calcolato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif erroreRSN==1 && AlfaX_RSN(indexRSN(end),2)==0 %la lettura precedente NON è in errore, allarme
sogliaRSN(n,1)=1;
incRSN=0;
tipomail_RSN(n,1)=0.33;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN - ricalcolo eseguito, incremento NON calcolato/allarme per lettura precedente NON errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif erroreRSN==1 && AlfaX_RSN(indexRSN(end),2)==1 %letture in errore, trigger disattivato
sogliaRSN(n,1)=0;
incRSN=0;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN - ricalcolo eseguito, incremento NON calcolato/modulo in errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
end
if incRSN==1 && trendRSN ~= 99999 %devo calcolare un incremento
if abs(trigRSN(n,1))/abs(trendRSN) >= 1.3 %SOGLIA DI TREND SUPERATA!
sogliaRSN(n,1) = 1;
tipomail_RSN(n,1)=1;
%scrivo nel logfile
text = 'Soglia di trend per RSN Link superata!';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
else
sogliaRSN(n,1) = 0;
%scrivo nel logfile
text = 'Soglia di trend per RSN Link non superata!';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
end
else
trigRSN(n,1)=99999; %manca il sensore RSN oppure dati insufficienti per calcolare trend
%scrivo nel logfile
text = 'RSN assente o dati insufficienti: impossibile calcolare la soglia di trend per RSN';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
% RSNHR Link
%scrivo nel logfile
text = 'Inizio controllo soglie di trend per RSNHR';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
incHR=1;
if isempty(usoRSNHR)== 0
if LastDataHR >= DataRifTRIGGER
if AlfaX_HR(indexHR(end),2)==0 %lettura valida, calcolo incremento
valHR = AlfaX_HR(indexHR(end),1);
trigHR(n,1) = valHR - AlfaX_HR(indexHR(end-1),1); %incremento allo scatto del trigger
%scrivo nel logfile
text = 'Confronto con soglia di trend RSNHR - nessun ricalcolo eseguito, incremento calcolato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif AlfaX_HR(indexHR(end),2)==1 && AlfaX_HR(indexHR(end-1),2)==0 %la lettura precedente NON è in errore, allarme
sogliaHR(n,1)=1;
incHR=0;
tipomail_HR(n,1)=0.33;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSNHR - nessun ricalcolo eseguito, incremento NON calcolato/allarme per lettura precedente NON errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif AlfaX_HR(indexHR(end),2)==1 && AlfaX_HR(indexHR(end-1),2)==1 %letture in errore, trigger disattivato
sogliaHR(n,1)=0;
incHR=0;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSNHR - nessun ricalcolo eseguito, incremento NON calcolato/modulo in errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
else
if nuovidati == 0 %nessun sensore ha già forzato RSN
rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '...
IDcentralina ' ' DTmodulo ''];
status = system(rilancio); %forzo RSN
nuovidati = 1;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSN HR - il software e'''' stato rilanciato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
data_rif = ARRAYdateTrL(i-1,1);
if data_rif > datenum(date)
data = datestr(data_rif,'yyyy-mm-dd');
else
data = date;
end
NodeNum = num2str(cell2mat(modulo(usoRSNHR,2)));
comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora in DATini.
[rD,~] = size(Dati);
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
Date = datenum(T);
indexHR = indexHR + 1; % la data del Trigger è quella aggiunta dalla rielaborazione
% Scarico i dati X
comando = ['select AlfaX from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
valHR = cell2mat(curs.Data); %valore post attivazione Trigger
valHR = valHR(indexHR(end));
% Scarico i dati calcerr
comando = ['select calcerr from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
erroreHR = cell2mat(curs.Data);
erroreHR = erroreHR(indexHR(end));
if erroreHR ==0 %lettura valida, calcolo incremento
trigHR(n,1) = valHR - AlfaX_HR(indexHR(end),1); %incremento allo scatto del trigger
%scrivo nel logfile
text = 'Confronto con soglia di trend RSNHR - ricalcolo eseguito, incremento calcolato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif erroreHR==1 && AlfaX_HR(indexHR(end),2)==0 %la lettura precedente NON è in errore, allarme
sogliaHR(n,1)=1;
incHR=0;
tipomail_HR(n,1)=0.33;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSNHR - ricalcolo eseguito, incremento NON calcolato/allarme per lettura precedente NON errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif erroreHR==1 && AlfaX_HR(indexHR(end),2)==1 %letture in errore, trigger disattivato
sogliaRSN(n,1)=0;
incHR=0;
%scrivo nel logfile
text = 'Confronto con soglia di trend RSNHR - ricalcolo eseguito, incremento NON calcolato/trigger in errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
end
if incHR==1 && trendHR ~= 99999
if abs(trigHR(n,1))/abs(trendHR) >= 1.3 %SOGLIA DI TREND SUPERATA!
sogliaHR(n,1) = 1;
tipomail_HR(n,1)=1;
%scrivo nel logfile
text = 'Soglia di trend per RSNHR Link superata!';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
else
sogliaHR(n,1) = 0;
%scrivo nel logfile
text = 'Soglia di trend per RSNHR Link non superata!';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
end
else
trigHR(n,1)=99999; %manca il sensore RSN HR oppure dati insufficienti per calcolare trend
%scrivo nel logfile
text = 'RSNHR assente, letture in errore o dati insufficienti: impossibile calcolare la soglia di trend per RSNHR';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
% Load Link
%scrivo nel logfile
text = 'Inizio controllo soglie di trend per LL';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
incLL=1;
if isempty(usoLOAD)== 0
if LastDataLOAD >= DataRifTRIGGER
if DatiCella(indexLL(end),2)==0 %lettura valida, calcolo incremento
valLL = DatiCella(indexLL(end),1);
trigLL(n,1) = valLL - DatiCella(indexLL(end-1),1); %incremento allo scatto del trigger
%scrivo nel logfile
text = 'Confronto con soglia di trend LL - nessun ricalcolo eseguito, incremento calcolato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif DatiCella(indexLL(end),2)==1 && DatiCella(indexLL(end-1),2)==0 %la lettura precedente NON è in errore, allarme
sogliaLL(n,1)=1;
incLL=0;
tipomail_LL(n,1)=0.33;
%scrivo nel logfile
text = 'Confronto con soglia di trend LL - nessun ricalcolo eseguito, incremento NON calcolato/allarme per lettura precedente NON errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif DatiCella(indexLL(end),2)==1 && DatiCella(indexLL(end-1),2)==1 %la misura precedente è in errore, trigger disattivato
sogliaLL(n,1)=0;
incLL=0;
%scrivo nel logfile
text = 'Confronto con soglia di trend LL - nessun ricalcolo eseguito, incremento NON calcolato/trigger in errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
else
if nuovidati == 0 %nessun sensore ha già forzato RSN
rilancio = ['/usr/local/matlab_func/run_RSN_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 '...
IDcentralina ' ' DTmodulo ''];
status = system(rilancio); %forzo RSN
nuovidati = 1;
%scrivo nel logfile
text = 'Confronto con soglia di trend LL - il software e'''' stato rilanciato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
data_rif = ARRAYdateTrL(i-1,1);
if data_rif > datenum(date)
data = datestr(data_rif,'yyyy-mm-dd');
else
data = date;
end
NodeNum = num2str(cell2mat(modulo(usoLOAD,2)));
comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora in DATini.
[rD,~] = size(Dati);
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
Date = datenum(T);
indexLL = indexLL + 1; % la lettura del Trigger è quella aggiunta dalla rielaborazione
comando = ['select load_value from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
valLL = cell2mat(curs.Data); %valore post attivazione Trigger
valLL = valLL(indexLL(end));
% Scarico i dati calcerr
comando = ['select calcerr from ElabDataView where EventDate >= ''' ...
data ''' and ToolNameID = ''' DTmodulo ''' and UnitName = ''' IDcentralina ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
erroreLL = cell2mat(curs.Data);
erroreLL = erroreLL(indexLL(end));
if erroreLL==0 %lettura valida, calcolo incremento
trigLL(n,1) = valLL - DatiCella(indexLL(end),1); %incremento allo scatto del trigger
%scrivo nel logfile
text = 'Confronto con soglia di trend LL - ricalcolo eseguito, incremento calcolato';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif erroreLL==1 && DatiCella(indexLL(end),2)==0 %la lettura precedente NON è in errore, allarme
sogliaLL(n,1)=1;
incLL=0;
tipomail_LL(n,1)=0.33;
%scrivo nel logfile
text = 'Confronto con soglia di trend LL - ricalcolo eseguito, incremento NON calcolato/allarme per lettura precedente NON errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
elseif erroreLL==1 && DatiCella(indexLL(end),2)==1 %la misura precedente è in errore, trigger disattivato
sogliaLL(n,1)=0;
incLL=0;
%scrivo nel logfile
text = 'Confronto con soglia di trend LL - ricalcolo eseguito, incremento NON calcolato/trigger in errore';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
end
if incLL==1 && trendLL ~= 99999
if abs(trigLL(n,1))/abs(trendLL) >= 1.3 %SOGLIA DI TREND SUPERATA!
sogliaLL(n,1) = 1;
tipomail_LL(n,1)=1;
%scrivo nel logfile
text = 'Soglia di trend per Load Link superata!';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
else
sogliaLL(n,1) = 0;
%scrivo nel logfile
text = 'Soglia di trend per Load Link non superata!';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
end
else
trigLL(n,1)=99999; %manca il sensore LL oppure dati insufficienti per calcolare trend
%scrivo nel logfile
text = 'LL assente, letture in errore o dati insufficienti: impossibile calcolare la soglia di trend per LL';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
soglie_modulo = [tipomail_RSN(n,1) tipomail_HR(n,1) tipomail_LL(n,1)];
MATsoglie = [];
if sum(soglie_modulo) == 0 || sum(soglie_modulo) == 1
tipomail_MOD(n,1) = 0;
elseif sum(soglie_modulo) > 0 && sum(soglie_modulo) < 2
tipomail_MOD(n,1) = 0.5;
elseif sum(soglie_modulo) >= 2
tipomail_MOD(n,1) = 1;
end
%scrivo nel logfile
text = ['Codice di invio mail definito per modulo ' DTmodulo ''];
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);
end
end
codice_mail = max(tipomail_MOD); %LIVELLO DI ALLERTAMENTO PER L'INVIO MAIL
%scrivo nel logfile
text = 'Funzione Triggercheck per il controllo delle soglie di trend eseguita correttamente';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
fclose(fileID);