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);

