% Questa funzione legge i dati di ogni tipologia di nodo (se presente)

function [Batteria,Batteria_LoRa,Type,DatiRSNLink,ErrRSNLink,DatiRSNLinkHR,ErrRSNLinkHR,DatiTriggerLink,ErrTriggerLink,...
    DatiShockSensor,ErrShockSensor,DatiLoadLink,ErrLoadLink,DatiDebrisLink,ErrDebrisLink,DatiGFLink,ErrGFLink,...
    DatiGSLink,ErrGSLink,yesRSN,yesRSNHR,yesTrL,yesLL,yesDL] = lettura(IDcentralina,DTcatena,MEMS,datainiRSN,tempoiniRSN,...
    NodoRSNLink,NuovoZeroRSN,datainiSS,tempoiniSS,NodoSS,NuovoZeroSS,datainiRSNHR,tempoiniRSNHR,NodoRSNLinkHR,...
    NuovoZeroRSNHR,datainiTrL,tempoiniTrL,NodoTriggerLink,NuovoZeroTrL,datainiLL,tempoiniLL,NodoLoadLink,NuovoZeroLL,...
    datainiGF,tempoiniGF,datainiGS,tempoiniGS,datainiDL,tempoiniDL,NodoDebrisLink,yesRSN,yesSS,yesRSNHR,yesTrL,yesLL,...
    yesGF,yesGS,yesDL,rRSN,rSS,rRSNHR,rTrL,rLL,rDL,conn,catena,date,time,FileName)

% Log file
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'lettura function started';
fprintf(fileID,fmt,text);

%% Batteria
% cerco la batteria nel primo nodo
i = 1;
z = 0;
while z==0
    if cell2mat(catena(i,3)) == 1
        z = 1;
    else
        i = i+1; % nodo numero 1
    end
end
i = cell2mat(catena(i,1));
if i == 38
   dataini = datainiRSN;
   tempoini = tempoiniRSN;
elseif i == 39
       dataini = datainiRSNHR;
       tempoini = tempoiniRSNHR;
elseif i == 15
       dataini = datainiLL;
       tempoini = tempoiniLL;
elseif i == 40
       dataini = datainiTrL;
       tempoini = tempoiniTrL;
elseif i == 48
       dataini = datainiGF;
       tempoini = tempoiniGF;
elseif i == 50
       dataini = datainiGS;
       tempoini = tempoiniGS;
elseif i == 49
       dataini = datainiDL;
       tempoini = tempoiniDL;
elseif i == 54
       dataini = datainiSS;
       tempoini = tempoiniSS;
end
    
% Batteria Centralina
NodeNum = '1';
comando = ['select Date, Time, BatLevel from RawDataView where Date = ''' ...
        dataini ''' and Time >= ''' tempoini ''' and  ToolNameID = ''' DTcatena...
        ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
BatTempo = curs.Data;
comando = ['select Date, Time, BatLevel from RawDataView where Date > ''' ...
        dataini ''' and  ToolNameID = ''' DTcatena...
        ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
BatData = curs.Data;
if strcmp(char(BatData(1)),'No Data')
   Batteria = BatTempo;
elseif strcmp(char(BatTempo(1)),'No Data')
        Batteria = BatData;
else
    Batteria = [BatTempo;BatData];
end

% Batteria LoRa
NodeNum = '2';
comando = ['select Date, Time, BatLevelModule from RawDataView where Date = ''' ...
        dataini ''' and Time >= ''' tempoini ''' and  ToolNameID = ''' DTcatena...
        ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
BatTempo = curs.Data;
comando = ['select Date, Time, BatLevelModule from RawDataView where Date > ''' ...
        dataini ''' and  ToolNameID = ''' DTcatena...
        ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
BatData = curs.Data;
if strcmp(char(BatData(1)),'No Data')
   Batteria_LoRa = BatTempo;
elseif strcmp(char(BatTempo(1)),'No Data')
        Batteria_LoRa = BatData;
else
    Batteria_LoRa = [BatTempo;BatData];
end

    
% Cerco la tipologia di centralina
comando = ['select type_id from units where name = ''' IDcentralina ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Type = cell2mat(curs.Data);
        
Data(1,1) = cellstr(date);
Data(1,2) = cellstr(time);

%%  RSN Link
if  yesRSN == 0 % Non ci sono RSN Link
    DatiRSNLink = [];
    ErrRSNLink = [];
    wardat = 'lettura function: there are not RSN Link' ;
    fprintf(fileID,fmt,wardat);
else
    RawDataFile = ['' IDcentralina '-' DTcatena '-RSN-RawData.csv'];
    NAN = 0;
    while NAN == 0
        if datenum(datainiRSN) == datenum(Data(1,1))
            tempoiniRSN = char(Data(1,2));
        end
        NodeType = 'RSN Link';
        NodeNumRSN = num2str(cell2mat(NodoRSNLink(1,2))); % scarico i dati del primo nodo
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date = ''' ...
            datainiRSN ''' and Time >= ''' tempoiniRSN ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumRSN ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniRSN = curs.Data;
        Ntempo = DATiniRSN;
        [r,c] = size(DATiniRSN);
        saltoRSN = 0;
        if  r==1 && c==1
            textdatRSN = 'Warning: error reading RSN Link (control unit data)!';
            fprintf(fileID,fmt,textdatRSN);
            saltoRSN = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiRSN ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumRSN ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2RSN = curs.Data;
        Ndate = DAT2RSN;
        if saltoRSN == 1
           DATiniRSN = DAT2RSN;
        end
        Check = size(DAT2RSN);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoRSN == 0
                DATiniRSN = [DATiniRSN; DAT2RSN];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniRSN);
        if cD ~=1
            T = [cell2mat(DATiniRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniRSN(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniRSN = T;
        else
            DATiniRSN = [];
        end

        % Scarico dati relativi ai singoli nodi
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoRSN == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiRSNLink = cell(rd+rt,4*rRSN);
            else
               DatiRSNLink = cell(rt,4*rRSN);
            end
        else
            DatiRSNLink = cell(rd,4*rRSN);
        end
        
        NRSNLink = cell2mat(NodoRSNLink(:,2));
        ii = 1;
        col = 4;
        w = 0;
        while ii <= rRSN         
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NRSNLink(ii,1);
              nNodo = num2str(nN);
              if MEMS == 2 % RSN Link 1.0
                  comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' ...
                      datainiRSN ''' and Time >= ''' tempoiniRSN ''' and  ToolNameID = ''' DTcatena...
                      ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                      NodeType ''' and NodeNum ='  nNodo ''];
                  curs = exec(conn,comando);
                  curs = fetch(curs);
                  DATnodoRSN = curs.Data;
                  % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                  comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date > ''' ...
                      datainiRSN ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                      ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                  curs = exec(conn,comando);
                  curs = fetch(curs);
                  DATnodoRSNd = curs.Data;
              else % D-Fence
                  comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' ...
                      datainiRSN ''' and Time >= ''' tempoiniRSN ''' and  ToolNameID = ''' DTcatena...
                      ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                      NodeType ''' and NodeNum ='  nNodo ''];
                  curs = exec(conn,comando);
                  curs = fetch(curs);
                  DATnodoRSN = curs.Data;
                  % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                  comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ...
                      datainiRSN ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                      ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                  curs = exec(conn,comando);
                  curs = fetch(curs);
                  DATnodoRSNd = curs.Data;
              end

            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
              ini_col = col-3;
              if saltoRSN == 0
                 DatiRSNLink(1:rt,ini_col:col) = DATnodoRSN(:,:);
              else
                  DatiRSNLink(1:rd,ini_col:col) = DATnodoRSNd(:,:);
              end

              [rn,~] = size(DATnodoRSNd); % controllo date
              if rn < rd % normalmente sono uguali
                  for i = rn+1:rd
                      DATnodoRSNd(i,:) = DATnodoRSNd(rn,:); % se mancano dati, copio gli ultimi
                  end
                  wardat = ['Node RSN Link ' num2str(ii) ' does NOT work!'];
                  fprintf(fileID,fmt,wardat);
                  w = 1;
              end

              if Check(1,2) > 1
                 if saltoRSN == 0
                    DatiRSNLink(rt+1:rt+rd,ini_col:col) = DATnodoRSNd(:,:);
                 end
              else
                  DatiRSNLink = DatiRSNLink(1:end,:);
              end
              okdatRSN = ['Data of RSN Link node number ' num2str(ii) ' of ' ...
                  num2str(rRSN) ' downloaded correctly'];
              fprintf(fileID,fmt,okdatRSN);
              ii = ii+1;
              col = col+4;
        end
        if w == 0
            wardat = 'There are not warning for RSN Link!';
            fprintf(fileID,fmt,wardat);
        end

        % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
        %  rimpiazzandoli con l'ultimo dato disponibile di quel nodo
        [r,c] = size(DatiRSNLink); 
        ErrRSNLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroRSN == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiRSN));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
        end
        for jj=1:c
            % Trovo l'indice della cella contenenti una determinata stringa.
            idxE = find(strcmp('Err1',DatiRSNLink(1,jj)));
            idxND = find(strcmp('No Data',DatiRSNLink(1,jj)));
            idxT = find(strcmp('---',DatiRSNLink(1,jj)));
            idxT2 = find(strcmp('-',DatiRSNLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiRSNLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiRSNLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiRSNLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiRSNLink(1,jj)));
            idxN = find(strcmp('null',DatiRSNLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxND);
            idx = union(idx,idxT2);
            idx = union(idx,idxE2);
            idx = union(idx,idxE255);
            idx = union(idx,idxD);
            idx = union(idx,idxE1F);
            idx = union(idx,idxN);  
            [ri,~] = size(idx);
            if ri == 1
                wardat = 'Warning on the correction of RSN Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroRSN == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiRSN)+1 < now
                        datainiRSN = datestr(datenum(datainiRSN)+1,'yyyy-mm-dd');
                        break
                    else
                        yesRSN = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiRSN = datestr(datenum(datainiRSN)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiRSNLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrRSNLink(1,jj) = 1;
                            wardat = 'Data of RSN Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiRSN = datestr(datenum(datainiRSN)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c % nodi
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiRSNLink(:,jj)));
                idxND = find(strcmp('No Data',DatiRSNLink(:,jj)));
                idxT = find(strcmp('---',DatiRSNLink(:,jj)));
                idxT2 = find(strcmp('-',DatiRSNLink(:,jj)));
                idxE2 = find(strcmp('Err2',DatiRSNLink(:,jj)));
                idxE255 = find(strcmp('Err255',DatiRSNLink(:,jj)));
                idxD = find(strcmp('DMUXe',DatiRSNLink(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiRSNLink(:,jj)));
                idxN = find(strcmp('null',DatiRSNLink(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxND);
                idx = union(idx,idxT2);
                idx = union(idx,idxE2);
                idx = union(idx,idxE255);
                idx = union(idx,idxD);
                idx = union(idx,idxE1F);
                idx = union(idx,idxN);
                [ri,~] = size(idx);
                for kk=1:ri
                    indice=idx(kk);
                    if indice == 1
                        wardat = 'Warning on the correction of RSN Link nodes: there are not data at the beginning of the array!';
                        fprintf(fileID,fmt,wardat);
                        NAN = 0;
                        ESCI = 1;
                        datainiRSN = datestr(datenum(datainiRSN)-1,'yyyy-mm-dd');
                        break
                    end
                    DatiRSNLink(indice,jj) = DatiRSNLink(indice-1,jj);
                    ErrRSNLink(indice,jj) = 1;
                    Ncorr = Ncorr+ri;
                    NAN = 1;
                end
                if ESCI == 1
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r % nodi
                    check = isnan(cell2mat(DatiRSNLink(nnn,jj)));
                    if check == 1
                        DatiRSNLink(nnn,jj) = DatiRSNLink(nnn-1,jj);
                        ErrRSNLink(nnn,jj) = 1;
                    end
                end
            end
            corrdat = ['' num2str(Ncorr) ' corrections of RSN Link data done!'];
            fprintf(fileID,fmt,corrdat);
            % Concateno informazioni generali e/o letture dai nodi.
            DatiRSNLink = [DATiniRSN str2double(DatiRSNLink)];
            % Elimino eventuali date doppie
            a = 2;
            while a <= r
                if DatiRSNLink(a,1) == DatiRSNLink(a-1,1)
                    DatiRSNLink(a,:) = [];
                    r = r-1;
                else
                    a = a+1;
                end
            end
        end
    end
    if NuovoZeroRSN == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiRSNLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiRSNLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiRSNLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiRSNLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiRSNLink;
        else
            Dati = DatiRaw;
        end
        % Elimino appoggio più vecchio di un mese
        RawDate3 = find(Dati(:,1)<now-30);
        if isempty(RawDate3) == 0
            [rDati,~] = size(Dati);
            if RawDate3(end) == rDati
            else
                Dati = Dati(RawDate3(end)+1:end,:);
            end
        end
        if isfile(RawDataFile) == 1
            delete(RawDataFile);
        end
    else
        Dati = DatiRSNLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end  

%%  Shock Sensor
if  yesSS == 0 % Non ci sono SS
    DatiShockSensor = [];
    ErrShockSensor = [];
    wardat = 'lettura function: there are not Shock Sensor';
    fprintf(fileID,fmt,wardat);
else
    NodeType = 'Shock Sensor';
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-SS-RawData.csv'];
    if datenum(datainiSS) == datenum(Data(1,1))
        tempoiniSS = char(Data(1,2));
    end
    while NAN == 0
        NodeNumSS = num2str(cell2mat(NodoSS(1,2))); % scarico i dati del primo nodo
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date = ''' ...
            datainiSS ''' and Time >= ''' tempoiniSS ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumSS ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniSS = curs.Data;
        Ntempo = DATiniSS;
        [r,c] = size(DATiniSS);
        saltoSS = 0;
        if  r==1 && c==1
            textdatTrL = 'Warning: error reading Shock Sensor (control unit data)!';
            fprintf(fileID,fmt,textdatTrL);
            saltoSS = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiSS ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumSS ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2SS = curs.Data;
        Ndate = DAT2SS;
        if saltoSS == 1
           DATiniSS = DAT2SS;
        end
        Check = size(DAT2SS);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoSS == 0
                DATiniSS = [DATiniSS; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniSS);
        if cD ~=1
            T = [cell2mat(DATiniSS(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniSS(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniSS = T;
        else
            DATiniSS = [];
        end

        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoSS == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiShockSensor = cell(rd+rt,1*rSS);
            else
               DatiShockSensor = cell(rt,1*rSS);
            end
        else
            DatiShockSensor = cell(rd,1*rSS);
        end
        NShockSensor = cell2mat(NodoSS(:,2));
        col = 1;
        w = 0;
        
        while ii <= rSS         
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NShockSensor(ii,1);
              nNodo = num2str(nN);
              comando = ['select Val0 from RawDataView where Date = ''' ...
                  datainiSS ''' and Time >= ''' tempoiniSS ''' and  ToolNameID = ''' DTcatena...
                  ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                  NodeType ''' and NodeNum ='  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoSS = curs.Data;
              
              % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              comando = ['select Val0 from RawDataView where Date > ''' ...
                  datainiSS ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                  ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoSSd = curs.Data;

            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
              if saltoSS == 0
                  DatiShockSensor(1:rt,col) = DATnodoSS(:,:);
              else
                  DatiShockSensor(1:rd,col) = DATnodoSSd(:,:);
              end

              [rn,~] = size(DATnodoSSd); % controllo date
              if rn < rd % normalmente sono uguali
                  for i = rn+1:rd
                      DATnodoSSd(i,:) = DATnodoSSd(rn,:); % se mancano dati, copio gli ultimi
                  end
                  wardat = ['Node Shock Sensor ' num2str(ii) ' does NOT work!'];
                  fprintf(fileID,fmt,wardat);
                  w = 1;
              end

              if Check(1,2) > 1
                 if saltoSS == 0
                     DatiShockSensor(rt+1:rt+rd,col) = DATnodoSSd(:,:);
                 end
              else
                  DatiShockSensor = DatiShockSensor(1:end,:);
              end
              okdatSS = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rSS) ' Shock Sensor nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatSS);
              ii = ii+1;
              col = col+1;
        end
        if w == 0
            wardat = 'There are not warning for Shock Sensor!';
            fprintf(fileID,fmt,wardat);
        end

        % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
        %  rimpiazzandoli con uno zero (no info sull'attivazione del
        %  Trigger)
        [r,c] = size(DatiShockSensor); 
        ErrShockSensor = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroSS == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiSS));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
        end
        % --- Codice per il primo dato ---
        for jj=1:c
            % Trovo l'indice della cella contenenti una determinata stringa.
            idxE = find(strcmp('Err1',DatiShockSensor(1,jj)));
            idxT = find(strcmp('---',DatiShockSensor(1,jj)));
            idxT2 = find(strcmp('-',DatiShockSensor(1,jj)));
            idxE2 = find(strcmp('Err2',DatiShockSensor(1,jj)));
            idxE255 = find(strcmp('Err255',DatiShockSensor(1,jj)));
            idxD = find(strcmp('DMUXe',DatiShockSensor(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiShockSensor(1,jj)));
            idxN = find(strcmp('null',DatiShockSensor(1,jj)));
            idxRX = find(strcmp('No RX',DatiShockSensor(1,jj)));
            idxI = find(strcmp('id Error',DatiShockSensor(1,jj)));
            idxM = find(strcmp('MUX id Error',DatiShockSensor(1,jj)));
            idxC = find(strcmp('CH n. Error',DatiShockSensor(1,jj)));
            idxU = find(strcmp('Unknown Error',DatiShockSensor(1,jj)));
            idxDis = find(strcmp('Dis.',DatiShockSensor(1,jj)));
            idxMC = find(strcmp('MsgCorrup',DatiShockSensor(1,jj)));
            idxNS = find(strcmp('NotSupp',DatiShockSensor(1,jj)));
            idxU2 = find(strcmp('Unknown',DatiShockSensor(1,jj)));
            idxNA = find(strcmp('NotAv',DatiShockSensor(1,jj)));
            idxND = find(strcmp('No Data',DatiShockSensor(1,jj)));
            idxCE = find(strcmp('CH n. Er',DatiShockSensor(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxCE);
            idx = union(idx,idxE2);
            idx = union(idx,idxE255);
            idx = union(idx,idxD);
            idx = union(idx,idxE1F);
            idx = union(idx,idxN);
            idx = union(idx,idxRX);
            idx = union(idx,idxI);
            idx = union(idx,idxM);
            idx = union(idx,idxC);
            idx = union(idx,idxU);
            idx = union(idx,idxMC);
            idx = union(idx,idxNS);
            idx = union(idx,idxU2);
            idx = union(idx,idxNA);
            idx = union(idx,idxND);
            idx = union(idx,idxDis);
            [ri,~] = size(idx);
            if ri == 1
                wardat = 'Warning on the correction of Shock Sensor nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroSS == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiSS)+1 < now
                        datainiSS = datestr(datenum(datainiSS)+1,'yyyy-mm-dd');
                        break
                    else
                        yesSS = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiSS = datestr(datenum(datainiSS)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiShockSensor(1,jj) = 0;
                            ErrShockSensor(1,jj) = 1;
                            wardat = 'Data of Shock Sensor nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiSS = datestr(datenum(datainiSS)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                idxE = find(strcmp('Err1',DatiShockSensor(:,jj)));
                idxT = find(strcmp('---',DatiShockSensor(:,jj)));
                idxT2 = find(strcmp('-',DatiShockSensor(:,jj)));
                idxE2 = find(strcmp('Err2',DatiShockSensor(:,jj)));
                idxE255 = find(strcmp('Err255',DatiShockSensor(:,jj)));
                idxD = find(strcmp('DMUXe',DatiShockSensor(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiShockSensor(:,jj)));
                idxN = find(strcmp('null',DatiShockSensor(:,jj)));
                idxRX = find(strcmp('No RX',DatiShockSensor(:,jj)));
                idxI = find(strcmp('id Error',DatiShockSensor(:,jj)));
                idxM = find(strcmp('MUX id Error',DatiShockSensor(:,jj)));
                idxC = find(strcmp('CH n. Error',DatiShockSensor(:,jj)));
                idxU = find(strcmp('Unknown Error',DatiShockSensor(:,jj)));
                idxDis = find(strcmp('Dis.',DatiShockSensor(:,jj)));
                idxMC = find(strcmp('MsgCorrup',DatiShockSensor(:,jj)));
                idxNS = find(strcmp('NotSupp',DatiShockSensor(:,jj)));
                idxU2 = find(strcmp('Unknown',DatiShockSensor(:,jj)));
                idxNA = find(strcmp('NotAv',DatiShockSensor(:,jj)));
                idxND = find(strcmp('No Data',DatiShockSensor(:,jj)));
                idxCE = find(strcmp('CH n. Er',DatiShockSensor(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxCE);
                idx = union(idx,idxE2);
                idx = union(idx,idxE255);
                idx = union(idx,idxD);
                idx = union(idx,idxE1F);
                idx = union(idx,idxN);
                idx = union(idx,idxRX);
                idx = union(idx,idxI);
                idx = union(idx,idxM);
                idx = union(idx,idxC);
                idx = union(idx,idxU);
                idx = union(idx,idxMC);
                idx = union(idx,idxNS);
                idx = union(idx,idxU2);
                idx = union(idx,idxNA);
                idx = union(idx,idxND);
                idx = union(idx,idxDis);
                [ri,~] = size(idx);
                for kk=1:ri
                    indice=idx(kk);
                    if indice == 1
                        wardat = 'Warning on the correction of Shock Sensor nodes: there are not data at the beginning of the array!';
                        fprintf(fileID,fmt,wardat);
                        NAN = 0;
                        ESCI = 1;
                        datainiSS = datestr(datenum(datainiSS)-1,'yyyy-mm-dd');
                        break
                    else
                        DatiShockSensor(indice,jj) = 0;
                        ErrShockSensor(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                if ESCI == 1
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiShockSensor(nnn,jj)));
                    if check == 1
                        DatiShockSensor(nnn,jj) = 0;
                        ErrShockSensor(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Shock Sensor data done!']; 
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiShockSensor = [DATiniSS str2double(DatiShockSensor)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiShockSensor(a,1) == DatiShockSensor(a-1,1)
               DatiShockSensor(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end  
end

%%  RSN Link HR
if  yesRSNHR == 0 % Non ci sono RSN Link HR
    DatiRSNLinkHR = [];
    ErrRSNLinkHR = [];
    wardat = 'lettura function: there are not RSN Link HR';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-RSNHR-RawData.csv'];
    NodeType = 'RSN Link HR';
    while NAN == 0
        if datenum(datainiRSNHR) == datenum(Data(1,1))
            tempoiniRSNHR = char(Data(1,2));
        end    
        NodeNumRSNHR = num2str(cell2mat(NodoRSNLinkHR(1,2))); % scarico i dati del primo nodo
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date = ''' ...
            datainiRSNHR ''' and Time >= ''' tempoiniRSNHR ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumRSNHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniRSNHR = curs.Data;
        Ntempo = DATiniRSNHR;
        [r,c] = size(DATiniRSNHR);
        saltoRSNHR = 0;
        if  r==1 && c==1
            textdatRSNHR = 'Warning: error reading RSN Link HR (control unit data)!';
            fprintf(fileID,fmt,textdatRSNHR);
            saltoRSNHR = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiRSNHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumRSNHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2RSNHR = curs.Data;
        Ndate = DAT2RSNHR;
        if saltoRSNHR == 1
            DATiniRSNHR = DAT2RSNHR;
        end
        Check = size(DAT2RSNHR);
        if Check(1,2) > 1 % ho superato il primo giorno
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoRSNHR == 0
                DATiniRSNHR = [DATiniRSNHR; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniRSNHR);
        if rD ~=1 && cD ~=1
            T = [cell2mat(DATiniRSNHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniRSNHR(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniRSNHR = T;
        else
            DATiniRSNHR = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoRSNHR == 0
            if Check(1,2) > 1 % ho superato il primo giorno
                DatiRSNLinkHR = cell(rd+rt,3*rRSNHR);
            else
                DatiRSNLinkHR = cell(rt,3*rRSNHR);
            end
        else
            DatiRSNLinkHR = cell(rd,3*rRSNHR);
        end
        NRSNLinkHR = cell2mat(NodoRSNLinkHR(:,2));
        col = 3;
        ii = 1;
        w = 0;
        while ii <= rRSNHR
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NRSNLinkHR(ii,1);
            nNodo = num2str(nN);
            comando = ['select Val0, Val1, Val6 from RawDataView where Date = ''' ...
                datainiRSNHR ''' and Time >= ''' tempoiniRSNHR ''' and  ToolNameID = ''' DTcatena...
                ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoRSNHR = curs.Data;
            % Step 2: Considero le date successive e scarico tutti i dati disponibili.
            comando = ['select Val0, Val1, Val6 from RawDataView where Date > ''' ...
                datainiRSNHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoRSNHRd = curs.Data;
            
            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
            ini_col = col-2;
            if saltoRSNHR == 0
                DatiRSNLinkHR(1:rt,ini_col:col) = DATnodoRSNHR(:,:);
            else
                DatiRSNLinkHR(1:rd,ini_col:col) = DATnodoRSNHRd(:,:);
            end
            
            [rn,~] = size(DATnodoRSNHRd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoRSNHRd(i,:) = DATnodoRSNHRd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node RSN Link HR ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            if Check(1,2) > 1
                if saltoRSNHR == 0
                    DatiRSNLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoRSNHRd(:,:);
                end
            else
                DatiRSNLinkHR = DatiRSNLinkHR(1:end,:);
            end
            okdatRSNHR = ['Data of RSN Link HR node number ' num2str(ii) ' of ' ...
                num2str(rRSNHR) ' downloaded correctly'];
            fprintf(fileID,fmt,okdatRSNHR);
            ii = ii+1;
            col = col+3;
        end
        if w == 0
            wardat = 'There are not warning for RSN Link HR!';
            fprintf(fileID,fmt,wardat);
        end

        % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
        %  rimpiazzandoli con l'ultimo dato disponibile di quel nodo
        [r,c] = size(DatiRSNLinkHR);
        ErrRSNLinkHR = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroRSNHR == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiRSNHR));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
        end
        for jj=1:c
            % Trovo l'indice della cella contenenti una determinata stringa.
            idxE = find(strcmp('Err1',DatiRSNLinkHR(1,jj)));
            idxND = find(strcmp('No Data',DatiRSNLinkHR(1,jj)));
            idxT = find(strcmp('---',DatiRSNLinkHR(1,jj)));
            idxT2 = find(strcmp('-',DatiRSNLinkHR(1,jj)));
            idxE2 = find(strcmp('Err2',DatiRSNLinkHR(1,jj)));
            idxE255 = find(strcmp('Err255',DatiRSNLinkHR(1,jj)));
            idxD = find(strcmp('DMUXe',DatiRSNLinkHR(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiRSNLinkHR(1,jj)));
            idxN = find(strcmp('null',DatiRSNLinkHR(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxND);
            idx = union(idx,idxT2);
            idx = union(idx,idxE2);
            idx = union(idx,idxE255);
            idx = union(idx,idxD);
            idx = union(idx,idxE1F);
            idx = union(idx,idxN);
            [ri,~] = size(idx);
            if ri == 1
                wardat = 'Warning on the correction of RSN Link HR nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroRSNHR == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiRSNHR)+1 < now
                        datainiRSNHR = datestr(datenum(datainiRSNHR)+1,'yyyy-mm-dd');
                        break
                    else
                        yesRSNHR = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiRSNHR = datestr(datenum(datainiRSNHR)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiRSNLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrRSNLinkHR(1,jj) = 1;
                            wardat = 'Data of RSN Link HR nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiRSNHR = datestr(datenum(datainiRSNHR)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c % nodi
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiRSNLinkHR(:,jj)));
                idxND = find(strcmp('No Data',DatiRSNLinkHR(:,jj)));
                idxT = find(strcmp('---',DatiRSNLinkHR(:,jj)));
                idxT2 = find(strcmp('-',DatiRSNLinkHR(:,jj)));
                idxE2 = find(strcmp('Err2',DatiRSNLinkHR(:,jj)));
                idxE255 = find(strcmp('Err255',DatiRSNLinkHR(:,jj)));
                idxD = find(strcmp('DMUXe',DatiRSNLinkHR(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiRSNLinkHR(:,jj)));
                idxN = find(strcmp('null',DatiRSNLinkHR(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxND);
                idx = union(idx,idxT2);
                idx = union(idx,idxE2);
                idx = union(idx,idxE255);
                idx = union(idx,idxD);
                idx = union(idx,idxE1F);
                idx = union(idx,idxN);
                [ri,~] = size(idx);
                for kk=1:ri
                    indice=idx(kk);
                    if indice == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiRSNHR = datestr(datenum(datainiRSNHR)-1,'yyyy-mm-dd');
                        break
                    end
                    DatiRSNLinkHR(indice,jj) = DatiRSNLinkHR(indice-1,jj);
                    ErrRSNLinkHR(indice,jj) = 1;
                    Ncorr = Ncorr+ri;
                    NAN = 1;
                end
                if ESCI == 1
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r % date
                    check = isnan(cell2mat(DatiRSNLinkHR(nnn,jj)));
                    if check == 1
                        DatiRSNLinkHR(nnn,jj) = DatiRSNLinkHR(nnn-1,jj);
                        ErrRSNLinkHR(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end 
            corrdat = ['' num2str(Ncorr) ' corrections of RSN Link HR data done!'];
            fprintf(fileID,fmt,corrdat);
            % Concateno informazioni generali e/o letture dai nodi.
            DatiRSNLinkHR = [DATiniRSNHR str2double(DatiRSNLinkHR)];
            % Elimino eventuali date doppie
            a = 2;
            while a <= r
                if DatiRSNLinkHR(a,1) == DatiRSNLinkHR(a-1,1)
                    DatiRSNLinkHR(a,:) = [];
                    r = r-1;
                else
                    a = a+1;
                end
            end
        end
    end
    if NuovoZeroRSNHR == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiRSNLinkHR(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiRSNLinkHR(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiRSNLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiRSNLinkHR(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiRSNLinkHR;
        else
            Dati = DatiRaw;
        end
        % Elimino appoggio più vecchio di un mese
        RawDate3 = find(Dati(:,1)<now-30);
        if isempty(RawDate3) == 0
            [rDati,~] = size(Dati);
            if RawDate3(end) == rDati
            else
                Dati = Dati(RawDate3(end)+1:end,:);
            end
        end
        if isfile(RawDataFile) == 1
            delete(RawDataFile);
        end
    else
        Dati = DatiRSNLinkHR;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end  

%%  Load Link
if  yesLL == 0 % Non ci sono Load Link
    DatiLoadLink = [];
    ErrLoadLink = [];
    wardat = 'lettura function: there are not Load Link';
    fprintf(fileID,fmt,wardat);
else
    NodeType = 'Load Link';
    NAN = 0;
    DIS = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-LL-RawData.csv'];
    if datenum(datainiLL) == datenum(Data(1,1))
        tempoiniLL = char(Data(1,2));
    end
    while NAN == 0
        NodeNumLL = num2str(cell2mat(NodoLoadLink(1,2))); % scarico i dati del primo nodo
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date = ''' ...
            datainiLL ''' and Time >= ''' tempoiniLL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumLL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniLL = curs.Data;
        Ntempo = DATiniLL;
        [r,c] = size(DATiniLL);
        saltoLL = 0;
        if  r==1 && c==1
            textdatLL = 'Warning: error reading Load Link (control unit data)!';
            fprintf(fileID,fmt,textdatLL);
            saltoLL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumLL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2LL = curs.Data;
        Ndate = DAT2LL;
        if saltoLL == 1
           DATiniLL = DAT2LL;
        end
        Check = size(DAT2LL);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoLL == 0
                DATiniLL = [DATiniLL; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniLL);
        if rD ~=1 && cD ~=1
            T = [cell2mat(DATiniLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniLL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniLL = T;
        else
            DATiniLL = [];
        end

        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoLL == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiLoadLink = cell(rd+rt,1*rLL);
            else
               DatiLoadLink = cell(rt,1*rLL);
            end
        else
            DatiLoadLink = cell(rd,1*rLL);
        end
        NLoadLink = cell2mat(NodoLoadLink(:,2));
        col = 1;
        w = 0;
        while ii <= rLL         
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NLoadLink(ii,1);
              nNodo = num2str(nN);
              if strcmp(NodoLoadLink(1,4),'mV/V') 
                  comando = ['select Val0 from RawDataView where Date = ''' ...
                      datainiLL ''' and Time >= ''' tempoiniLL ''' and  ToolNameID = ''' DTcatena...
                      ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                      NodeType ''' and NodeNum ='  nNodo ''];
              elseif strcmp(NodoLoadLink(1,4),'4-20 mA') 
                  comando = ['select Val0 from RawDataView where Date = ''' ...
                      datainiLL ''' and Time >= ''' tempoiniLL ''' and  ToolNameID = ''' DTcatena...
                      ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                      NodeType ''' and NodeNum ='  nNodo ''];
              elseif strcmp(NodoLoadLink(1,4),'ADC')
                  comando = ['select Val0 from RawDataView where Date = ''' ...
                      datainiLL ''' and Time >= ''' tempoiniLL ''' and  ToolNameID = ''' DTcatena...
                      ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                      NodeType ''' and NodeNum ='  nNodo ''];
              end
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoLL = curs.Data;
              % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              if strcmp(NodoLoadLink(1,4),'mV/V') 
                  comando = ['select Val0 from RawDataView where Date > ''' ...
                    datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              elseif strcmp(NodoLoadLink(1,4),'4-20 mA') 
                    comando = ['select Val0 from RawDataView where Date > ''' ...
                    datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              elseif strcmp(NodoLoadLink(1,4),'ADC')
                    comando = ['select Val0 from RawDataView where Date > ''' ...
                    datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              end
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoLLd = curs.Data;

            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
              if saltoLL == 0
                 DatiLoadLink(1:rt,col) = DATnodoLL(:,:);
              else
                  DatiLoadLink(1:rd,col) = DATnodoLLd(:,:);
              end

              [rn,~] = size(DATnodoLLd); % controllo date
              if rn < rd % normalmente sono uguali
                  for i = rn+1:rd
                      DATnodoLLd(i,:) = DATnodoLLd(rn,:); % se mancano dati, copio gli ultimi
                  end
                  wardat = ['Load Link node ' num2str(ii) ' does NOT work!'];
                  fprintf(fileID,fmt,wardat);
                  w = 1;
              end

              if Check(1,2) > 1
                 if saltoLL == 0
                    DatiLoadLink(rt+1:rt+rd,col) = DATnodoLLd(:,:);
                 end
              else
                  DatiLoadLink = DatiLoadLink(1:end,:);
              end
              okdatLL = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rLL) ' Load Link nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatLL);
              ii = ii+1;
              col = col+1;
        end
        if w == 0
            wardat = 'There are not warning for Load Link!';
            fprintf(fileID,fmt,wardat);
        end

        % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
        %  rimpiazzandoli con l'ultimo dato disponibile di quel nodo
        [r,c] = size(DatiLoadLink); 
        ErrLoadLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroLL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiLL));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
        end
        for jj=1:c
             % Se il nodo è Dis., devo aumentare di uno la data (il nodo non
            % è ancora stato installato!)
            if strcmp('Dis.',DatiLoadLink(1,jj)) == 1
                for dis = 2:r
                    if strcmp('Dis.',DatiLoadLink(dis,jj)) == 0
                       DatiLoadLink = DatiLoadLink(dis:end,:);
                       DATiniLL = DATiniLL(dis:end,:);
                       [r,c] = size(DatiLoadLink);
                       break
                    elseif dis == r
                        NAN = 0;
                        DIS = 1;
                        if datenum(datainiLL)+1 < now
                            datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd');
                            break
                        else
                            yesLL = 0;
                        end
                    end
                end
            end
        end
        if DIS ~= 1 && yesLL == 1
            % --- Codice per il primo dato ---
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiLoadLink(1,jj)));
                idxT = find(strcmp('---',DatiLoadLink(1,jj)));
                idxE2 = find(strcmp('Err2',DatiLoadLink(1,jj)));
                idxE255 = find(strcmp('Err255',DatiLoadLink(1,jj)));
                idxD = find(strcmp('DMUXe',DatiLoadLink(1,jj)));
                idxE1F = find(strcmp('Err1File',DatiLoadLink(1,jj)));
                idxN = find(strcmp('null',DatiLoadLink(1,jj)));
                idxRX = find(strcmp('No RX',DatiLoadLink(1,jj)));
                idxI = find(strcmp('id Error',DatiLoadLink(1,jj)));
                idxM = find(strcmp('MUX id Error',DatiLoadLink(1,jj)));
                idxC = find(strcmp('CH n. Error',DatiLoadLink(1,jj)));
                idxCE = find(strcmp('CH n. Er',DatiLoadLink(1,jj)));
                idxU = find(strcmp('Unknown Error',DatiLoadLink(1,jj)));
                idxDis = find(strcmp('Dis.',DatiLoadLink(1,jj)));
                idxMC = find(strcmp('MsgCorrup',DatiLoadLink(1,jj)));
                idxNS = find(strcmp('NotSupp',DatiLoadLink(1,jj)));
                idxU2 = find(strcmp('Unknown',DatiLoadLink(1,jj)));
                idxNA = find(strcmp('NotAv',DatiLoadLink(1,jj)));
                idxND = find(strcmp('No Data',DatiLoadLink(1,jj)));
                idxPP = find(strcmp('[]',DatiLoadLink(1,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxE2);
                idx = union(idx,idxCE);
                idx = union(idx,idxND);
                idx = union(idx,idxPP);
                idx = union(idx,idxE255);
                idx = union(idx,idxD);
                idx = union(idx,idxE1F);
                idx = union(idx,idxN);
                idx = union(idx,idxRX);
                idx = union(idx,idxI);
                idx = union(idx,idxM);
                idx = union(idx,idxC);
                idx = union(idx,idxCE);
                idx = union(idx,idxU);
                idx = union(idx,idxDis);
                idx = union(idx,idxMC);
                idx = union(idx,idxNS);
                idx = union(idx,idxU2);
                idx = union(idx,idxNA);
                [ri,~] = size(idx);
                if ri == 1
                    wardat = 'Warning on the correction of Load Link nodes: there are not data at the beginning of the array!';
                    fprintf(fileID,fmt,wardat);
                    if rDR==1 && cDR==1 || NuovoZeroLL == 0 % il file non è mai stato scritto, cerco la data precedente
                        NAN = 0;
                        ESCI = 1;
                        if datenum(datainiLL)+1 < now
                            datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd');
                            break
                        else
                            yesLL = 0;
                        end
                    else
                        if isempty(RawDate) == 1
                            NAN = 0;
                            ESCI = 1;
                            datainiLL = datestr(datenum(datainiLL)-1,'yyyy-mm-dd');
                            break
                        else
                            if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                                DatiLoadLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrLoadLink(1,jj) = 1;
                                wardat = 'Data of Load Link nodes corrected using Raw Data of reference Csv file.';
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            else
                                NAN = 0;
                                ESCI = 1;
                                datainiLL = datestr(datenum(datainiLL)-1,'yyyy-mm-dd');
                                break
                            end
                        end
                    end
                end
            end
            if ESCI == 0
                for jj=1:c
                    idxE = find(strcmp('Err1',DatiLoadLink(:,jj)));
                    idxT = find(strcmp('---',DatiLoadLink(:,jj)));
                    idxT2 = find(strcmp('-',DatiLoadLink(:,jj)));
                    idxE2 = find(strcmp('Err2',DatiLoadLink(:,jj)));
                    idxE255 = find(strcmp('Err255',DatiLoadLink(:,jj)));
                    idxD = find(strcmp('DMUXe',DatiLoadLink(:,jj)));
                    idxE1F = find(strcmp('Err1File',DatiLoadLink(:,jj)));
                    idxN = find(strcmp('null',DatiLoadLink(:,jj)));
                    idxRX = find(strcmp('No RX',DatiLoadLink(:,jj)));
                    idxI = find(strcmp('id Error',DatiLoadLink(:,jj)));
                    idxM = find(strcmp('MUX id Error',DatiLoadLink(:,jj)));
                    idxC = find(strcmp('CH n. Error',DatiLoadLink(:,jj)));
                    idxU = find(strcmp('Unknown Error',DatiLoadLink(:,jj)));
                    idxMC = find(strcmp('MsgCorrup',DatiLoadLink(:,jj)));
                    idxNS = find(strcmp('NotSupp',DatiLoadLink(:,jj)));
                    idxU2 = find(strcmp('Unknown',DatiLoadLink(:,jj)));
                    idxNA = find(strcmp('NotAv',DatiLoadLink(:,jj)));
                    idxND = find(strcmp('No Data',DatiLoadLink(:,jj)));
                    idxCE = find(strcmp('CH n. Er',DatiLoadLink(:,jj)));
                    idx = union(idxE,idxT);
                    idx = union(idx,idxT2);
                    idx = union(idx,idxCE);
                    idx = union(idx,idxE2);
                    idx = union(idx,idxE255);
                    idx = union(idx,idxD);
                    idx = union(idx,idxE1F);
                    idx = union(idx,idxN);
                    idx = union(idx,idxRX);
                    idx = union(idx,idxI);
                    idx = union(idx,idxM);
                    idx = union(idx,idxC);
                    idx = union(idx,idxU);
                    idx = union(idx,idxMC);
                    idx = union(idx,idxNS);
                    idx = union(idx,idxU2);
                    idx = union(idx,idxNA);
                    idx = union(idx,idxND);
                    [ri,~] = size(idx);
                    for kk=1:ri
                        indice=idx(kk);
                        if indice == 1
                            NAN = 0;
                            ESCI = 1;
                            datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd');
                            break
                        else
                            DatiLoadLink(indice,jj) = DatiLoadLink(indice-1,jj);
                            ErrLoadLink(indice,jj) = 1;
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        end
                    end
                    if ESCI == 1
                        break
                    end
            
                    % Elimino gli eventuali Not a Number
                    for nnn = 2:r
                        check = isnan(cell2mat(DatiLoadLink(nnn,jj)));
                        if check == 1
                            DatiLoadLink(nnn,jj) = DatiLoadLink(nnn-1,jj);
                            ErrLoadLink(nnn,jj) = 1;
                            Ncorr = Ncorr+ri;
                        end
                    end
                end
                corrdat = ['' num2str(Ncorr) ' corrections of Load Link data done!'];
                fprintf(fileID,fmt,corrdat);
                % Concateno informazioni generali e/o letture dai nodi.
                DatiLoadLink = [DATiniLL str2double(DatiLoadLink)];
                % Elimino eventuali date doppie
                a = 2;
                while a <= r
                    if DatiLoadLink(a,1) == DatiLoadLink(a-1,1)
                        DatiLoadLink(a,:) = [];
                        r = r-1;
                    else
                        a = a+1;
                    end
                end
            end
        end
    end
    if NuovoZeroLL == 1 && yesLL == 1
        [rDR,cDR] = size(DatiRaw);
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiLoadLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiLoadLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiLoadLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiLoadLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiLoadLink;
        else
            Dati = DatiRaw;
        end
        % Elimino appoggio più vecchio di un mese
        RawDate3 = find(Dati(:,1)<now-30);
        if isempty(RawDate3) == 0
            [rDati,~] = size(Dati);
            if RawDate3(end) == rDati
            else
                Dati = Dati(RawDate3(end)+1:end,:);
            end
        end
        if isfile(RawDataFile) == 1
            delete(RawDataFile);
        end
    else
        Dati = DatiLoadLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end    

%%  Trigger Link
if  yesTrL == 0 % Non ci sono Trigger Link
    DatiTriggerLink = [];
    ErrTriggerLink = [];
    wardat = 'lettura function: there are not Trigger Link';
    fprintf(fileID,fmt,wardat);
else
    NodeType = 'Trigger Link';
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-TrL-RawData.csv'];
    if datenum(datainiTrL) == datenum(Data(1,1))
        tempoiniTrL = char(Data(1,2));
    end
    while NAN == 0
        NodeNumTrL = num2str(cell2mat(NodoTriggerLink(1,2))); % scarico i dati del primo nodo
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date = ''' ...
            datainiTrL ''' and Time >= ''' tempoiniTrL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumTrL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniTrL = curs.Data;
        Ntempo = DATiniTrL;
        [r,c] = size(DATiniTrL);
        saltoTrL = 0;
        if  r==1 && c==1
            textdatTrL = 'Warning: error reading Trigger Link (control unit data)!';
            fprintf(fileID,fmt,textdatTrL);
            saltoTrL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiTrL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTrL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2TrL = curs.Data;
        Ndate = DAT2TrL;
        if saltoTrL == 1
           DATiniTrL = DAT2TrL;
        end
        Check = size(DAT2TrL);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoTrL == 0
                DATiniTrL = [DATiniTrL; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniTrL);
        if cD ~=1
            T = [cell2mat(DATiniTrL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTrL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniTrL = T;
        else
            DATiniTrL = [];
        end

        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoTrL == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiTriggerLink = cell(rd+rt,1*rTrL);
            else
               DatiTriggerLink = cell(rt,1*rTrL);
            end
        else
            DatiTriggerLink = cell(rd,1*rTrL);
        end
        NTriggerLink = cell2mat(NodoTriggerLink(:,2));
        col = 1;
        w = 0;
        
        while ii <= rTrL         
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NTriggerLink(ii,1);
              nNodo = num2str(nN);
              if Type == 7
                  comando = ['select Val1, Val0 from RawDataView where Date = ''' ...
                      datainiTrL ''' and Time >= ''' tempoiniTrL ''' and  ToolNameID = ''' DTcatena...
                      ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                      NodeType ''' and NodeNum ='  nNodo ''];
              else
                  comando = ['select Val0 from RawDataView where Date = ''' ...
                      datainiTrL ''' and Time >= ''' tempoiniTrL ''' and  ToolNameID = ''' DTcatena...
                      ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                      NodeType ''' and NodeNum ='  nNodo ''];
              end
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTrL = curs.Data;
              
              % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              if Type == 7
                  comando = ['select Val1, Val0 from RawDataView where Date > ''' ...
                      datainiTrL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                      ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              else
                  comando = ['select Val0 from RawDataView where Date > ''' ...
                      datainiTrL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                      ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              end
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTrLd = curs.Data;

            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
              if saltoTrL == 0
                  if Type == 7
                      DatiTriggerLink(1:rt,col:col+1) = DATnodoTrL(:,:);
                  else
                      DatiTriggerLink(1:rt,col) = DATnodoTrL(:,:);
                  end
              else
                  if Type == 7
                      DatiTriggerLink(1:rd,col:col+1) = DATnodoTrLd(:,:);
                  else
                      DatiTriggerLink(1:rd,col) = DATnodoTrLd(:,:);
                  end
              end

              [rn,~] = size(DATnodoTrLd); % controllo date
              if rn < rd % normalmente sono uguali
                  for i = rn+1:rd
                      DATnodoTrLd(i,:) = DATnodoTrLd(rn,:); % se mancano dati, copio gli ultimi
                  end
                  wardat = ['Node Trigger Link ' num2str(ii) ' does NOT work!'];
                  fprintf(fileID,fmt,wardat);
                  w = 1;
              end

              if Check(1,2) > 1
                 if saltoTrL == 0
                     if Type == 7
                         DatiTriggerLink(rt+1:rt+rd,col:col+1) = DATnodoTrLd(:,:);
                     else
                         DatiTriggerLink(rt+1:rt+rd,col) = DATnodoTrLd(:,:);
                     end
                 end
              else
                  DatiTriggerLink = DatiTriggerLink(1:end,:);
              end
              okdatTrL = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rTrL) ' Trigger Link nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatTrL);
              ii = ii+1;
              if Type == 7
                  col = col+2;
              else
                  col = col+1;
              end
        end
        if w == 0
            wardat = 'There are not warning for Trigger Link!';
            fprintf(fileID,fmt,wardat);
        end

        % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
        %  rimpiazzandoli con uno zero (no info sull'attivazione del
        %  Trigger)
        [r,c] = size(DatiTriggerLink); 
        ErrTriggerLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroTrL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiTrL));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
        end
        % --- Codice per il primo dato ---
        for jj=1:c
            % Trovo l'indice della cella contenenti una determinata stringa.
            idxE = find(strcmp('Err1',DatiTriggerLink(1,jj)));
            idxT = find(strcmp('---',DatiTriggerLink(1,jj)));
            idxT2 = find(strcmp('-',DatiTriggerLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiTriggerLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiTriggerLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiTriggerLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiTriggerLink(1,jj)));
            idxN = find(strcmp('null',DatiTriggerLink(1,jj)));
            idxRX = find(strcmp('No RX',DatiTriggerLink(1,jj)));
            idxI = find(strcmp('id Error',DatiTriggerLink(1,jj)));
            idxM = find(strcmp('MUX id Error',DatiTriggerLink(1,jj)));
            idxC = find(strcmp('CH n. Error',DatiTriggerLink(1,jj)));
            idxU = find(strcmp('Unknown Error',DatiTriggerLink(1,jj)));
            idxDis = find(strcmp('Dis.',DatiTriggerLink(1,jj)));
            idxMC = find(strcmp('MsgCorrup',DatiTriggerLink(1,jj)));
            idxNS = find(strcmp('NotSupp',DatiTriggerLink(1,jj)));
            idxU2 = find(strcmp('Unknown',DatiTriggerLink(1,jj)));
            idxNA = find(strcmp('NotAv',DatiTriggerLink(1,jj)));
            idxND = find(strcmp('No Data',DatiTriggerLink(1,jj)));
            idxCE = find(strcmp('CH n. Er',DatiTriggerLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxCE);
            idx = union(idx,idxE2);
            idx = union(idx,idxE255);
            idx = union(idx,idxD);
            idx = union(idx,idxE1F);
            idx = union(idx,idxN);
            idx = union(idx,idxRX);
            idx = union(idx,idxI);
            idx = union(idx,idxM);
            idx = union(idx,idxC);
            idx = union(idx,idxU);
            idx = union(idx,idxMC);
            idx = union(idx,idxNS);
            idx = union(idx,idxU2);
            idx = union(idx,idxNA);
            idx = union(idx,idxND);
            idx = union(idx,idxDis);
            [ri,~] = size(idx);
            if ri == 1
                wardat = 'Warning on the correction of Trigger Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroTrL == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiTrL)+1 < now
                        datainiTrL = datestr(datenum(datainiTrL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesTrL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiTrL = datestr(datenum(datainiTrL)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiTriggerLink(1,jj) = 0;
                            ErrTriggerLink(1,jj) = 1;
                            wardat = 'Data of Trigger Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiTrL = datestr(datenum(datainiTrL)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                idxE = find(strcmp('Err1',DatiTriggerLink(:,jj)));
                idxT = find(strcmp('---',DatiTriggerLink(:,jj)));
                idxT2 = find(strcmp('-',DatiTriggerLink(:,jj)));
                idxE2 = find(strcmp('Err2',DatiTriggerLink(:,jj)));
                idxE255 = find(strcmp('Err255',DatiTriggerLink(:,jj)));
                idxD = find(strcmp('DMUXe',DatiTriggerLink(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiTriggerLink(:,jj)));
                idxN = find(strcmp('null',DatiTriggerLink(:,jj)));
                idxRX = find(strcmp('No RX',DatiTriggerLink(:,jj)));
                idxI = find(strcmp('id Error',DatiTriggerLink(:,jj)));
                idxM = find(strcmp('MUX id Error',DatiTriggerLink(:,jj)));
                idxC = find(strcmp('CH n. Error',DatiTriggerLink(:,jj)));
                idxU = find(strcmp('Unknown Error',DatiTriggerLink(:,jj)));
                idxDis = find(strcmp('Dis.',DatiTriggerLink(:,jj)));
                idxMC = find(strcmp('MsgCorrup',DatiTriggerLink(:,jj)));
                idxNS = find(strcmp('NotSupp',DatiTriggerLink(:,jj)));
                idxU2 = find(strcmp('Unknown',DatiTriggerLink(:,jj)));
                idxNA = find(strcmp('NotAv',DatiTriggerLink(:,jj)));
                idxND = find(strcmp('No Data',DatiTriggerLink(:,jj)));
                idxCE = find(strcmp('CH n. Er',DatiTriggerLink(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxCE);
                idx = union(idx,idxE2);
                idx = union(idx,idxE255);
                idx = union(idx,idxD);
                idx = union(idx,idxE1F);
                idx = union(idx,idxN);
                idx = union(idx,idxRX);
                idx = union(idx,idxI);
                idx = union(idx,idxM);
                idx = union(idx,idxC);
                idx = union(idx,idxU);
                idx = union(idx,idxMC);
                idx = union(idx,idxNS);
                idx = union(idx,idxU2);
                idx = union(idx,idxNA);
                idx = union(idx,idxND);
                idx = union(idx,idxDis);
                [ri,~] = size(idx);
                for kk=1:ri
                    indice=idx(kk);
                    if indice == 1
                        wardat = 'Warning on the correction of Trigger Link nodes: there are not data at the beginning of the array!';
                        fprintf(fileID,fmt,wardat);
                        NAN = 0;
                        ESCI = 1;
                        datainiTrL = datestr(datenum(datainiTrL)-1,'yyyy-mm-dd');
                        break
                    else
                        DatiTriggerLink(indice,jj) = 0;
                        ErrTriggerLink(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                if ESCI == 1
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiTriggerLink(nnn,jj)));
                    if check == 1
                        DatiTriggerLink(nnn,jj) = 0;
                        ErrTriggerLink(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Trigger Link data done!']; 
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiTriggerLink = [DATiniTrL str2double(DatiTriggerLink)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiTriggerLink(a,1) == DatiTriggerLink(a-1,1)
               DatiTriggerLink(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end  
end

%%  Debris Link
if  yesDL == 0 % Non ci sono Debris Link
    DatiDebrisLink = [];
    ErrDebrisLink = [];
    wardat = 'lettura function: there are not Debris Link' ;
    fprintf(fileID,fmt,wardat);
else
    RawDataFile = ['' IDcentralina '-' DTcatena '-DL-RawData.csv'];
    NAN = 0;
    while NAN == 0
        if datenum(datainiDL) == datenum(Data(1,1))
            tempoiniDL = char(Data(1,2));
        end
        NodeType = 'Debris Link';
        NodeNumDL = num2str(cell2mat(NodoDebrisLink(1,2))); % scarico i dati del primo nodo
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date = ''' ...
            datainiDL ''' and Time >= ''' tempoiniDL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumDL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniDL = curs.Data;
        Ntempo = DATiniDL;
        [r,c] = size(DATiniDL);
        saltoDL = 0;
        if  r==1 && c==1
            textdatDL = 'Warning: error reading Debris Link (control unit data)!';
            fprintf(fileID,fmt,textdatDL);
            saltoDL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiDL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumDL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2DL = curs.Data;
        Ndate = DAT2DL;
        if saltoDL == 1
           DATiniDL = DAT2DL;
        end
        Check = size(DAT2DL);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoDL == 0
                DATiniDL = [DATiniDL; DAT2DL];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniDL);
        if rD ~=1 && cD ~=1
            T = [cell2mat(DATiniDL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniDL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniDL = T;
        else
            DATiniDL = [];
        end

        % Scarico dati relativi ai singoli nodi
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoDL == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiDebrisLink = cell(rd+rt,4*rDL);
            else
               DatiDebrisLink = cell(rt,4*rDL);
            end
        else
            DatiDebrisLink = cell(rd,4*rDL);
        end
        
        NDebrisLink = cell2mat(NodoDebrisLink(:,2));
        ii = 1;
        col = 4;
        w = 0;
        while ii <= rDL         
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NDebrisLink(ii,1);
              nNodo = num2str(nN);
              comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' ...
                  datainiDL ''' and Time >= ''' tempoiniDL ''' and  ToolNameID = ''' DTcatena...
                  ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                  NodeType ''' and NodeNum ='  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoDL = curs.Data;
              % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date > ''' ...
                  datainiDL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                  ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoDLd = curs.Data;

            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
              ini_col = col-3;
              if saltoDL == 0
                 DatiDebrisLink(1:rt,ini_col:col) = DATnodoDL(:,:);
              else
                  DatiDebrisLink(1:rd,ini_col:col) = DATnodoDLd(:,:);
              end

              [rn,~] = size(DATnodoDLd); % controllo date
              if rn < rd % normalmente sono uguali
                  for i = rn+1:rd
                      DATnodoDLd(i,:) = DATnodoDLd(rn,:); % se mancano dati, copio gli ultimi
                  end
                  wardat = ['Node Debris Link ' num2str(ii) ' does NOT work!'];
                  fprintf(fileID,fmt,wardat);
                  w = 1;
              end

              if Check(1,2) > 1
                 if saltoDL == 0
                    DatiDebrisLink(rt+1:rt+rd,ini_col:col) = DATnodoDLd(:,:);
                 end
              else
                  DatiDebrisLink = DatiDebrisLink(1:end,:);
              end
              okdatDL = ['Data of Debris Link node number ' num2str(ii) ' of ' ...
                  num2str(rDL) ' downloaded correctly'];
              fprintf(fileID,fmt,okdatDL);
              ii = ii+1;
              col = col+4;
        end
        if w == 0
            wardat = 'There are not warning for Debris Link!';
            fprintf(fileID,fmt,wardat);
        end

        % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
        %  rimpiazzandoli con l'ultimo dato disponibile di quel nodo
        [r,c] = size(DatiDebrisLink); 
        ErrDebrisLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroDL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiDL));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
        end
        for jj=1:c
            % Trovo l'indice della cella contenenti una determinata stringa.
            idxE = find(strcmp('Err1',DatiDebrisLink(1,jj)));
            idxND = find(strcmp('No Data',DatiDebrisLink(1,jj)));
            idxT = find(strcmp('---',DatiDebrisLink(1,jj)));
            idxT2 = find(strcmp('-',DatiDebrisLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiDebrisLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiDebrisLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiDebrisLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiDebrisLink(1,jj)));
            idxN = find(strcmp('null',DatiDebrisLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxND);
            idx = union(idx,idxT2);
            idx = union(idx,idxE2);
            idx = union(idx,idxE255);
            idx = union(idx,idxD);
            idx = union(idx,idxE1F);
            idx = union(idx,idxN);  
            [ri,~] = size(idx);
            if ri == 1
                wardat = 'Warning on the correction of Debris Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroDL == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiDL)+1 < now
                        datainiDL = datestr(datenum(datainiDL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesDL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiDL = datestr(datenum(datainiDL)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiDebrisLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrDebrisLink(1,jj) = 1;
                            wardat = 'Data of Debris Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiDL = datestr(datenum(datainiDL)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c % nodi
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiDebrisLink(:,jj)));
                idxND = find(strcmp('No Data',DatiDebrisLink(:,jj)));
                idxT = find(strcmp('---',DatiDebrisLink(:,jj)));
                idxT2 = find(strcmp('-',DatiDebrisLink(:,jj)));
                idxE2 = find(strcmp('Err2',DatiDebrisLink(:,jj)));
                idxE255 = find(strcmp('Err255',DatiDebrisLink(:,jj)));
                idxD = find(strcmp('DMUXe',DatiDebrisLink(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiDebrisLink(:,jj)));
                idxN = find(strcmp('null',DatiDebrisLink(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxND);
                idx = union(idx,idxT2);
                idx = union(idx,idxE2);
                idx = union(idx,idxE255);
                idx = union(idx,idxD);
                idx = union(idx,idxE1F);
                idx = union(idx,idxN);
                [ri,~] = size(idx);
                for kk=1:ri
                    indice=idx(kk);
                    if indice == 1
                        wardat = 'Warning on the correction of Debris Link nodes: there are not data at the beginning of the array!';
                        fprintf(fileID,fmt,wardat);
                        NAN = 0;
                        ESCI = 1;
                        datainiDL = datestr(datenum(datainiDL)-1,'yyyy-mm-dd');
                        break
                    end
                    DatiDebrisLink(indice,jj) = DatiDebrisLink(indice-1,jj);
                    ErrDebrisLink(indice,jj) = 1;
                    Ncorr = Ncorr+ri;
                    NAN = 1;
                end
                if ESCI == 1
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r % nodi
                    check = isnan(cell2mat(DatiDebrisLink(nnn,jj)));
                    if check == 1
                        DatiDebrisLink(nnn,jj) = DatiDebrisLink(nnn-1,jj);
                        ErrDebrisLink(nnn,jj) = 1;
                    end
                end
            end
            corrdat = ['' num2str(Ncorr) ' corrections of Debris Link data done!'];
            fprintf(fileID,fmt,corrdat);
            % Concateno informazioni generali e/o letture dai nodi.
            DatiDebrisLink = [DATiniDL str2double(DatiDebrisLink)];
            % Elimino eventuali date doppie
            a = 2;
            while a <= r
                if DatiDebrisLink(a,1) == DatiDebrisLink(a-1,1)
                    DatiDebrisLink(a,:) = [];
                    r = r-1;
                else
                    a = a+1;
                end
            end
        end
    end
    if NuovoZeroDL == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiDebrisLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiDebrisLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiDebrisLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiDebrisLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiDebrisLink;
        else
            Dati = DatiRaw;
        end
        % Elimino appoggio più vecchio di un mese
        RawDate3 = find(Dati(:,1)<now-30);
        if isempty(RawDate3) == 0
            [rDati,~] = size(Dati);
            if RawDate3(end) == rDati
            else
                Dati = Dati(RawDate3(end)+1:end,:);
            end
        end
        if isfile(RawDataFile) == 1
            delete(RawDataFile);
        end
    else
        Dati = DatiDebrisLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end  

%%  G-Flow Link
if  yesGF == 0 % Non ci sono G-Flow
    DatiGFLink = [];
    ErrGFLink = [];
    wardat = 'lettura function: there are not G-Flow Link' ;
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    while NAN == 0
        if datenum(datainiGF) == datenum(Data(1,1))
            tempoiniGF = char(Data(1,2));
        end
        DataGF = [datainiGF ' ' tempoiniGF];
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select EventDateTime, battery_level from ELABDATAGFLOW where EventDateTime >= ''' ...
            DataGF ''' and tool_name = ''' DTcatena...
            ''' and unit_name = ''' IDcentralina ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniGF = curs.Data;
        Batteria = DATiniGF(:,2);
        
        % Modifico il formato di data e ora in DATini.
        [rD,~] = size(DATiniGF);
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
        comando = ['select xacc, yacc, zacc, cacc from ELABDATAGFLOW where EventDateTime >= ''' ...
            DataGF ''' and tool_name = ''' DTcatena ''' and unit_name = ''' IDcentralina ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATnodoGF = curs.Data;
        
        [rDa,cDa] = size(DATnodoGF);
        if rDa == 1 && cDa == 1
            okdatGF = 'G-Flow Link does NOT work';
            fprintf(fileID,fmt,okdatGF);
        else
            DatiGFLink = [DATiniGF(:,1) DATnodoGF(:,:)];
            okdatGF = 'Data of G-Flow Link downloaded correctly';
            fprintf(fileID,fmt,okdatGF);
        end

        ErrGFLink = zeros(rD,1);
        for g = 1:rD
            if cell2mat(DATnodoGF(g,1))>3 && cell2mat(DATnodoGF(g,2))>3 && cell2mat(DATnodoGF(g,3))>3
                ErrGFLink(g,1) = 1;
            end
        end
        NAN = 1;
    end
end  

%%  G-Shock Link
if  yesGS == 0 % Non ci sono G-Shock
    DatiGSLink = [];
    ErrGSLink = [];
    wardat = 'lettura function: there are not G-Shock Link' ;
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    while NAN == 0
        if datenum(datainiGS) == datenum(Data(1,1))
            tempoiniGS = char(Data(1,2));
        end
        DataGS = [datainiGF tempoiniGS];
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        comando = ['select EventDateTime, battery_level from ELABDATAGFLOW where EventDateTime >= ''' ...
            DataGS ''' and tool_name = ''' DTcatena...
            ''' and unit_name = ''' IDcentralina ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniGS = curs.Data;
        Batteria = DATiniGS(:,2);
        
        % Modifico il formato di data e ora in DATini.
        [rD,~] = size(DATiniGS);
        DatiGSLink = cell(rD,1);        
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
        comando = ['select xacc, yacc, zacc, cacc from ELABDATAGFLOW where EventDateTime >= ''' ...
            DataGS ''' and tool_name = ''' DTcatena ''' and unit_name = ''' IDcentralina ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATnodoGS = curs.Data;
        
        [rDa,cDa] = size(DATnodoGS);
        if rDa == 1 && cDa == 1
            okdatGS = 'G-Shock Link does NOT work';
            fprintf(fileID,fmt,okdatGS);
        else
            DatiGSLink = [DATiniGS DATnodoGS(:,:)];
            okdatGS = 'Data of G-Shock Link downloaded correctly';
            fprintf(fileID,fmt,okdatGS);
        end

        ErrGSLink = zeros(rD,1);
        for g = 1:rD
            if DATnodoGS(g,1)>3 &&  DATnodoGS(g,2)>3 && DATnodoGS(g,3)>3
                ErrGSLink(g,1) = 1;
            end
        end
        NAN = 1;
    end
end  

text = 'lettura function closed';
fprintf(fileID,fmt,text);
fclose(fileID);

end