% Questa funzione legge i dati di ogni tipologia di nodo (se presente)
% DatiTiltLink contiene tutti i dati per i Tilt Link
% DatiPiezoLink contiene tutti i dati per i piezometri
% DatiBaroLink contiene tutti i dati per il barometro
% DatiTiltLinkHR contiene tutti i dati per i Tilt Link HR (ampolle)
% DatiTiltLinkHR3D contiene tutti i dati per i Tilt Link HR 3D
% DatiThermLink contiene tutti i dati per i Therm Link
% Ngeo contiene il valore del campo magnetico Nord terrestre in sito
% Egeo contiene il valore del campo magnetico Est terrestre in sito

function [Batteria,Batteria_LoRa,DatiTiltLink,ErrTiltLink,datainiTL,yesTL,...
    ErrTiltLinkHD,ErrTiltLinkHDVR,...
    DatiTiltLinkH,ErrTiltLinkH,datainiTLH,yesTLH,DatiPiezoLink,ErrPiezoLink,yesPL,DatiBaroLink,ErrBaroLink,yesBL,...
    DatiTiltLinkHR,ErrTiltLinkHR,datainiTLHR,yesTLHR,DatiTiltLinkHRH,ErrTiltLinkHRH,datainiTLHRH,yesTLHRH,...
    DatiLoadLink,ErrLoadLink,yesLL,DatiThermLink,ErrThermLink,yesThL,DatiKlinoLink,ErrKlinoLink,yesKL,...
    DatiKlinoLinkHR,ErrKlinoLinkHR,yesKLHR,DatiRainLink,ErrRainLink,datainiRL,yesRL,...
    ErrSnowLink,DatiPT100Link,ErrPT100Link,yesPT100,DatiInPlaceLink,ErrInPlaceLink,datainiIPL,yesIPL,...
    DatiInPlaceLinkHR,ErrInPlaceLinkHR,datainiIPLHR,yesIPLHR,DatiWeirLink,DatiNTCWeirLink,ErrWeirLink,datainiWL,yesWL,...
    DatiPendulum,ErrPendulum,datainiPE,yesPE] = lettura_Hybrid(IDcentralina,DTcatena,DTcatenaRif,datainiTL,tempoiniTL,NodoTiltLink,NuovoZeroTL,...
    datainiTLH,tempoiniTLH,NodoTiltLinkH,NuovoZeroTLH,datainiPL,tempoiniPL,NodoPiezoLink,NuovoZeroPL,...
    datainiBL,tempoiniBL,NodoBaroLink,NuovoZeroBL,datainiTLHR,tempoiniTLHR,NodoTiltLinkHR,NuovoZeroTLHR,...
    datainiTLHRH,tempoiniTLHRH,NodoTiltLinkHRH,NuovoZeroTLHRH,datainiThL,tempoiniThL,NodoThermLink,NuovoZeroThL,...
    datainiLL,tempoiniLL,NodoLoadLink,NuovoZeroLL,datainiKL,tempoiniKL,NodoKlinoLink,NuovoZeroKL,...
    datainiKLHR,tempoiniKLHR,NodoKlinoLinkHR,NuovoZeroKLHR,datainiRL,tempoiniRL,NodoRainLink,NuovoZeroRL,...
    datainiPT100,tempoiniPT100,NodoPT100Link,NuovoZeroPT100,datainiIPL,tempoiniIPL,NodoInPlaceLink,NuovoZeroIPL,...
    datainiIPLHR,tempoiniIPLHR,NodoInPlaceLinkHR,NuovoZeroIPLHR,datainiWL,tempoiniWL,NodoWeirLink,NuovoZeroWL,...
    datainiPE,tempoiniPE,NodoPendulum,NuovoZeroPE,yesTL,yesTLH,yesTLHR,yesTLHRH,yesPL,yesBL,yesThL,yesKL,yesKLHR,yesRL,...
    yesPT100,yesLL,yesIPL,yesIPLHR,yesWL,yesPE,rTL,rTLH,rTLHR,rTLHRH,rPL,rBL,rThL,rKL,rKLHR,rRL,rPT100,rLL,rIPL,rIPLHR,...
    rWL,rPE,conn,Barometro,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
j = 1;
z = 0;
[rC,~] = size(catena);
while z==0
    if cell2mat(catena(j,3)) == 1
        z = 1;
    else
        j = j+1; % nodo numero 1
    end
end
condition = 0;
while condition == 0
    if j <= rC
        i = cell2mat(catena(j,1));
        if i == 1
            dataini = datainiTL;
            tempoini = tempoiniTL;
            break
        elseif i == 2
            dataini = datainiPL;
            tempoini = tempoiniPL;
            break
        elseif i == 3
            dataini = datainiBL;
            tempoini = tempoiniBL;
            break
        elseif i == 4
            dataini = datainiThL;
            tempoini = tempoiniThL;
            break
        elseif i == 5
            dataini = datainiTLHR;
            tempoini = tempoiniTLHR;
            break
        elseif i == 8
            dataini = datainiAL;
            tempoini = tempoiniAL;
            break
        elseif i == 11
            dataini = datainiTLH;
            tempoini = tempoiniTLH;
            break
        elseif i == 12
            dataini = datainiTLHRH;
            tempoini = tempoiniTLHRH;
            break
        elseif i == 15
            dataini = datainiLL;
            tempoini = tempoiniLL;
            break
        elseif i == 26
            dataini = datainiKL;
            tempoini = tempoiniKL;
            break
        elseif i == 27
            dataini = datainiRL;
            tempoini = tempoiniRL;
            break
        elseif i == 28
            dataini = datainiPT100;
            tempoini = tempoiniPT100;
            break
        elseif i == 44
            dataini = datainiKLHR;
            tempoini = tempoiniKLHR;
            break
        elseif i == 42
            dataini = datainiIPL;
            tempoini = tempoiniIPL;
            break
        elseif i == 43
            dataini = datainiIPLHR;
            tempoini = tempoiniIPLHR;
            break
        elseif i == 52
            dataini = datainiPE;
            tempoini = tempoiniPE;
            break
        elseif i == 53
            dataini = datainiWL;
            tempoini = tempoiniWL;
            break
        elseif i == 54
            dataini = datainiWI;
            tempoini = tempoiniWI;
            break
        end
        j = j+1;
    else
        break
    end
end
    
comando = ['select Date, Time, BatLevel from RawDataView where Date = ''' ...
        dataini ''' and Time >= ''' tempoini ''' and  ToolNameID = ''' DTcatena...
        ''' and UnitName = ''' IDcentralina ''' and NodeNum = 1 '];
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 = 1 '];
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
    
Data(1,1) = cellstr(date);
Data(1,2) = cellstr(time);

%% Variabili presenti nella funzione lettura aggiornata
Batteria_LoRa = -1;
ErrTiltLinkHD = [];
ErrTiltLinkHDVR = [];
ErrSnowLink = [];

%%  Tilt Link V
if  yesTL == 0 % Non ci sono Tilt Link
    DatiTiltLink = [];
    ErrTiltLink = [];
    wardat = 'lettura function: there are not Tilt Link V';
    fprintf(fileID,fmt,wardat);
else
    RawDataFile = ['' IDcentralina '-' DTcatena '-TLV-RawData.csv'];
    NAN = 0;
    while NAN == 0
        if datenum(datainiTL) == datenum(Data(1,1))
            tempoiniTL = char(Data(1,2));
        end
        NodeType = 'Tilt Link';
        NodeNumTL = num2str(cell2mat(NodoTiltLink(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 = ''' ...
            datainiTL ''' and Time >= ''' tempoiniTL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumTL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniTL = curs.Data;
        Ntempo = DATiniTL;
        [r,c] = size(DATiniTL);
        saltoTL = 0;
        if  r==1 && c==1
            textdatTL = 'Warning: error reading Tilt Link V (control unit data)!';
            fprintf(fileID,fmt,textdatTL);
            saltoTL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiTL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2TL = curs.Data;
        Ndate = DAT2TL;
        if saltoTL == 1
           DATiniTL = DAT2TL;
        end
        Check = size(DAT2TL);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoTL == 0
                DATiniTL = [DATiniTL; DAT2TL];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniTL);
        if cD ~=1
            T = [cell2mat(DATiniTL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniTL = T;
        else
            DATiniTL = [];
        end

        % Scarico dati relativi ai singoli nodi
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoTL == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiTiltLink = cell(rd+rt,7*rTL);
            else
               DatiTiltLink = cell(rt,7*rTL);
            end
        else
            DatiTiltLink = cell(rd,7*rTL);
        end
        NTiltLink = cell2mat(NodoTiltLink(:,2));
        ii = 1;
        col = 7;
        w = 0;
        while ii <= rTL         
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NTiltLink(ii,1);
              if strcmp(DTcatena,'DT0115') && strcmp(IDcentralina,'ID0074')
                  if nN == 75
                      nN = 1;
                  end
              end
              nNodo = num2str(nN);
              comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
                  datainiTL ''' and Time >= ''' tempoiniTL ''' and  ToolNameID = ''' DTcatena...
                  ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                  NodeType ''' and NodeNum ='  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTL = curs.Data;
              % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
                datainiTL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTLd = 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-6;
              if saltoTL == 0
                 DatiTiltLink(1:rt,ini_col:col) = DATnodoTL(:,:);
              else
                  DatiTiltLink(1:rd,ini_col:col) = DATnodoTLd(:,:);
              end

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

              if Check(1,2) > 1
                 if saltoTL == 0
                    DatiTiltLink(rt+1:rt+rd,ini_col:col) = DATnodoTLd(:,:);
                 end
              else
                  DatiTiltLink = DatiTiltLink(1:end,:);
              end
              okdatTL = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rTL) ' Tilt Link V nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatTL);
              ii = ii+1;
              col = col+7;
        end
        if w == 0
            wardat = 'There are not warning for Tilt Link V!';
            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(DatiTiltLink); 
        ErrTiltLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroTL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiTL));
            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',DatiTiltLink(1,jj)));
            idxND = find(strcmp('No Data',DatiTiltLink(1,jj)));
            idxT = find(strcmp('---',DatiTiltLink(1,jj)));
            idxT2 = find(strcmp('-',DatiTiltLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiTiltLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiTiltLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiTiltLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiTiltLink(1,jj)));
            idxN = find(strcmp('null',DatiTiltLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Tilt Link V nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroTL == 0 % il file non è mai stato scritto, cerco la data successiva
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiTL)+1 < now
                        datainiTL = datestr(datenum(datainiTL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesTL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiTiltLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrTiltLink(1,jj) = 1;
                            wardat = 'Data of Tilt Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                % Cerco i multipli di 7 per identificare le temperature
                Int = jj/7;
                if floor(Int) == Int
                    % Controllo ampolle
                    if str2double(DatiTiltLink(1,jj)) > 1000
                        if rDR==1 && cDR==1 || NuovoZeroTL == 0
                            NAN = 0;
                            ESCI = 1;
                            if datenum(datainiTL)+1 < now
                                datainiTL = datestr(datenum(datainiTL)+1,'yyyy-mm-dd');
                                break
                            else
                                yesTL = 0;
                            end
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
                                break
                            else
                                DatiTiltLink(1,jj-6) = cellstr(num2str(DatiRaw(RawDate(end),jj-5)));
                                DatiTiltLink(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
                                DatiTiltLink(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
                                DatiTiltLink(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                DatiTiltLink(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                DatiTiltLink(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                DatiTiltLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrTiltLink(1,jj) = 1;
                                wardat = ['Data of Tilt Link nodes corrected using Raw Data of reference Csv file. '...
                                    'MEMS was read as an electrolytic cell'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
            end
        end
        for jj=1:c
            % Trovo l'indice della cella contenenti una determinata stringa.
            idxE = find(strcmp('Err1',DatiTiltLink(:,jj)));
            idxND = find(strcmp('No Data',DatiTiltLink(:,jj)));
            idxT = find(strcmp('---',DatiTiltLink(:,jj)));
            idxT2 = find(strcmp('-',DatiTiltLink(:,jj)));
            idxE2 = find(strcmp('Err2',DatiTiltLink(:,jj)));
            idxE255 = find(strcmp('Err255',DatiTiltLink(:,jj)));
            idxD = find(strcmp('DMUXe',DatiTiltLink(:,jj)));
            idxE1F = find(strcmp('Err1File',DatiTiltLink(:,jj)));
            idxN = find(strcmp('null',DatiTiltLink(:,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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
                    datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
                    ESCI = 1;
                    NAN = 0;
                    break
                end
                DatiTiltLink(indice,jj) = DatiTiltLink(indice-1,jj);
                ErrTiltLink(indice,jj) = 1;
                Ncorr = Ncorr+ri;
                NAN = 1;
            end
            if ESCI == 1
                NAN = 0;
               break
            end
            for ii = 2:r
                % Cerco i multipli di 7 per identificare le temperature
                Int = jj/7;
                if floor(Int) == Int
                    % Controllo ampolle
                    if str2double(DatiTiltLink(ii,jj)) > 1000
                        DatiTiltLink(ii,jj-6:jj) = DatiTiltLink(ii-1,jj-6:jj);
                        ErrTiltLink(ii,jj) = 1;
                        wardat = ['Data of Tilt Link nodes corrected using Raw Data of reference Csv file. '...
                            'MEMS was read as an electrolytic cell'];
                        fprintf(fileID,fmt,wardat);
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
            end
            % Elimino gli eventuali Not a Number
            for nnn = 2:r % nodi
                check = isnan(cell2mat(DatiTiltLink(nnn,jj)));
                if check == 1
                    DatiTiltLink(nnn,jj) = DatiTiltLink(nnn-1,jj);
                    ErrTiltLink(nnn,jj) = 1;
                    Ncorr = Ncorr+ri;
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link V data done!']; 
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiTiltLink = [DATiniTL str2double(DatiTiltLink)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiTiltLink(a,1) == DatiTiltLink(a-1,1)
               DatiTiltLink(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroTL == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiTiltLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiTiltLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiTiltLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiTiltLink;
        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 = DatiTiltLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end  

%%  Tilt Link HR V
if  yesTLHR == 0 % Non ci sono Tilt Link HR V
    DatiTiltLinkHR = [];
    ErrTiltLinkHR = [];
    wardat = 'lettura function: there are not Tilt Link HR V';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-TLHRV-RawData.csv'];
    while NAN == 0
        if datenum(datainiTLHR) == datenum(Data(1,1))
            tempoiniTLHR = char(Data(1,2));
        end
        NodeType = 'Tilt Link HR';
        NodeNumTLHR = num2str(cell2mat(NodoTiltLinkHR(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 = ''' ...
            datainiTLHR ''' and Time >= ''' tempoiniTLHR ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumTLHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniTLHR = curs.Data;
        Ntempo = DATiniTLHR;
        [r,c] = size(DATiniTLHR);
        saltoTLHR = 0;
        if  r==1 && c==1
            textdatTLHR = 'Warning: error reading Tilt Link HR V (control unit data)!';
            fprintf(fileID,fmt,textdatTLHR);
            saltoTLHR = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiTLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTLHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2TLHR = curs.Data;
        Ndate = DAT2TLHR;
        if saltoTLHR == 1
            DATiniTLHR = DAT2TLHR;
        end
        Check = size(DAT2TLHR);
        if Check(1,2) > 1 % ho superato il primo giorno
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoTLHR == 0
                DATiniTLHR = [DATiniTLHR; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniTLHR);
        if cD ~=1
            T = [cell2mat(DATiniTLHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTLHR(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniTLHR = T;
        else
            DATiniTLHR = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoTLHR == 0
            if Check(1,2) > 1 % ho superato il primo giorno
                DatiTiltLinkHR = cell(rd+rt,6*rTLHR);
            else
                DatiTiltLinkHR = cell(rt,6*rTLHR);
            end
        else
            DatiTiltLinkHR = cell(rd,6*rTLHR);
        end
        NTiltLinkHR = cell2mat(NodoTiltLinkHR(:,2));
        col = 6;
        w = 0;
        while ii <= rTLHR
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NTiltLinkHR(ii,1);
            nNodo = num2str(nN);
            comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
                datainiTLHR ''' and Time >= ''' tempoiniTLHR ''' and  ToolNameID = ''' DTcatena...
                ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoTLHR = curs.Data;
            % Step 2: Considero le date successive e scarico tutti i dati disponibili.
            comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
                datainiTLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoTLHRd = 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-5;
            if saltoTLHR == 0
                DatiTiltLinkHR(1:rt,ini_col:col) = DATnodoTLHR(:,:);
            else
                DatiTiltLinkHR(1:rd,ini_col:col) = DATnodoTLHRd(:,:);
            end
            
            [rn,~] = size(DATnodoTLHRd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoTLHRd(i,:) = DATnodoTLHRd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Tilt Link HR V ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end

            if Check(1,2) > 1
                if saltoTLHR == 0
                    DatiTiltLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoTLHRd(:,:);
                end
            else
                DatiTiltLinkHR = DatiTiltLinkHR(1:end,:);
            end
            okdatTLH = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rTLHR) ' Tilt Link HR V nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatTLH);
            ii = ii+1;
            col = col+6;
        end
        if w == 0
            wardat = 'There are not warning for Tilt Link HR V!';
            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(DatiTiltLinkHR);
        ErrTiltLinkHR = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroTLHR == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiTLHR));
            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',DatiTiltLinkHR(1,jj)));
            idxND = find(strcmp('No Data',DatiTiltLinkHR(1,jj)));
            idxT = find(strcmp('---',DatiTiltLinkHR(1,jj)));
            idxT2 = find(strcmp('-',DatiTiltLinkHR(1,jj)));
            idxE2 = find(strcmp('Err2',DatiTiltLinkHR(1,jj)));
            idxE255 = find(strcmp('Err255',DatiTiltLinkHR(1,jj)));
            idxD = find(strcmp('DMUXe',DatiTiltLinkHR(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiTiltLinkHR(1,jj)));
            idxN = find(strcmp('null',DatiTiltLinkHR(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Tilt Link HR V nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroTLHR == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiTLHR)+1 < now
                        datainiTLHR = datestr(datenum(datainiTLHR)+1,'yyyy-mm-dd');
                        break
                    else
                        yesTLHR = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiTiltLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrTiltLinkHR(1,jj) = 1;
                            wardat = 'Data of Tilt 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;
                            datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                % Cerco i multipli di 6 per identificare le temperature
                Int = jj/6;
                if floor(Int) == Int
                    % Controllo ampolle
                    if str2double(DatiTiltLinkHR(1,jj)) < 500
                        if rDR==1 && cDR==1 || NuovoZeroTLHR == 0
                            NAN = 0;
                            ESCI = 1;
                            datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
                            break
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
                                break
                            else
                                DatiTiltLinkHR(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
                                DatiTiltLinkHR(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
                                DatiTiltLinkHR(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                DatiTiltLinkHR(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                DatiTiltLinkHR(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                DatiTiltLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrTiltLinkHR(1,jj) = 1;
                                wardat = ['Data of Tilt Link HR nodes corrected using Raw Data of reference Csv file. '...
                                    'Electrolytic cell was read as a MEMS'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiTiltLinkHR(:,jj)));
                idxND = find(strcmp('No Data',DatiTiltLinkHR(:,jj)));
                idxT = find(strcmp('---',DatiTiltLinkHR(:,jj)));
                idxT2 = find(strcmp('-',DatiTiltLinkHR(:,jj)));
                idxE2 = find(strcmp('Err2',DatiTiltLinkHR(:,jj)));
                idxE255 = find(strcmp('Err255',DatiTiltLinkHR(:,jj)));
                idxD = find(strcmp('DMUXe',DatiTiltLinkHR(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiTiltLinkHR(:,jj)));
                idxN = find(strcmp('null',DatiTiltLinkHR(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiTiltLinkHR(indice,jj) = DatiTiltLinkHR(indice-1,jj);
                        ErrTiltLinkHR(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                for ii = 2:r
                    % Cerco i multipli di 6 per identificare le temperature
                    Int = jj/6;
                    if floor(Int) == Int
                        % Controllo ampolle
                        if str2double(DatiTiltLinkHR(ii,jj)) < 500
                            DatiTiltLinkHR(ii,jj-2:jj) = DatiTiltLinkHR(ii-1,jj-2:jj);
                            ErrTiltLinkHR(ii,jj) = 1;
                            wardat = ['Data of Tilt Link HR nodes corrected using Raw Data of reference Csv file. '...
                                'Electrolytic cell was read as a MEMS'];
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        end
                    end
                end
                if ESCI == 1
                    NAN = 0;
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiTiltLinkHR(nnn,jj)));
                    if check == 1
                        DatiTiltLinkHR(nnn,jj) = DatiTiltLinkHR(nnn-1,jj);
                        ErrTiltLinkHR(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link HR V data done!'];
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiTiltLinkHR = [DATiniTLHR str2double(DatiTiltLinkHR)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiTiltLinkHR(a,1) == DatiTiltLinkHR(a-1,1)
                DatiTiltLinkHR(a,:) = [];
                r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroTLHR == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkHR(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiTiltLinkHR(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiTiltLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkHR(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiTiltLinkHR;
        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 = DatiTiltLinkHR;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end  

%%  Tilt Link H
if  yesTLH == 0 % Non ci sono Tilt Link H
    DatiTiltLinkH = [];
    ErrTiltLinkH = [];
    wardat = 'lettura function: there are not Tilt Link H';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-TLH-RawData.csv']; % Generico per MUMS
    while NAN == 0
        if datenum(datainiTLH) == datenum(Data(1,1))
            tempoiniTLH = char(Data(1,2));
        end
        NodeType = 'Tilt Link H';
        NodeNumTLH = num2str(cell2mat(NodoTiltLinkH(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 = ''' ...
            datainiTLH ''' and Time >= ''' tempoiniTLH ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumTLH ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniTLH = curs.Data;
        Ntempo = DATiniTLH;
        [r,c] = size(DATiniTLH);
        saltoTLH = 0;
        if  r==1 && c==1
            textdatTLH = 'Warning: error reading Tilt Link H (control unit data)!';
            fprintf(fileID,fmt,textdatTLH);
            saltoTLH = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiTLH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTLH ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2TLH = curs.Data;
        Ndate = DAT2TLH;
        if saltoTLH == 1
           DATiniTLH = DAT2TLH;
        end
        Check = size(DAT2TLH);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoTLH == 0
                DATiniTLH = [DATiniTLH; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniTLH);
        if cD ~=1
            T = [cell2mat(DATiniTLH(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTLH(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniTLH = T;
        else
            DATiniTLH = [];
        end

        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoTLH == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiTiltLinkH = cell(rd+rt,7*rTLH);
            else
               DatiTiltLinkH = cell(rt,7*rTLH);
            end
        else
            DatiTiltLinkH = cell(rd,7*rTLH);
        end
        NTiltLinkH = cell2mat(NodoTiltLinkH(:,2));
        col = 7;
        w = 0;
        while ii <= rTLH         
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NTiltLinkH(ii,1);
              nNodo = num2str(nN);
              comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
                  datainiTLH ''' and Time >= ''' tempoiniTLH ''' and  ToolNameID = ''' DTcatena...
                  ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                  NodeType ''' and NodeNum ='  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTLH = curs.Data;
        % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
                datainiTLH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTLHd = 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-6;
              if saltoTLH == 0
                 DatiTiltLinkH(1:rt,ini_col:col) = DATnodoTLH(:,:);
              else
                  DatiTiltLinkH(1:rd,ini_col:col) = DATnodoTLHd(:,:);
              end

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

              if Check(1,2) > 1
                 if saltoTLH == 0
                    DatiTiltLinkH(rt+1:rt+rd,ini_col:col) = DATnodoTLHd(:,:);
                 end
              else
                  DatiTiltLinkH = DatiTiltLinkH(1:end,:);
              end
              okdatTLH = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rTLH) ' Tilt Link H nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatTLH);
              ii = ii+1;
              col = col+7;
        end
        if w == 0
            wardat = 'There are not warning for Tilt Link H!';
            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(DatiTiltLinkH); 
        ErrTiltLinkH = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroTLH == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiTLH));
            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',DatiTiltLinkH(1,jj)));
            idxND = find(strcmp('No Data',DatiTiltLinkH(1,jj)));
            idxT = find(strcmp('---',DatiTiltLinkH(1,jj)));
            idxT2 = find(strcmp('-',DatiTiltLinkH(1,jj)));
            idxE2 = find(strcmp('Err2',DatiTiltLinkH(1,jj)));
            idxE255 = find(strcmp('Err255',DatiTiltLinkH(1,jj)));
            idxD = find(strcmp('DMUXe',DatiTiltLinkH(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiTiltLinkH(1,jj)));
            idxN = find(strcmp('null',DatiTiltLinkH(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Tilt Link H nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroTLH == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiTLH)+1 < now
                        datainiTLH = datestr(datenum(datainiTLH)+1,'yyyy-mm-dd');
                        break
                    else
                        yesTLH = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiTiltLinkH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrTiltLinkH(1,jj) = 1;
                            wardat = 'Data of Tilt Link H nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                % Cerco i multipli di 7 per identificare le temperature
                Int = jj/7;
                if floor(Int) == Int
                    % Controllo ampolle
                    if str2double(DatiTiltLinkH(1,jj)) > 1000
                        if rDR==1 && cDR==1 || NuovoZeroTLH == 0
                            NAN = 0;
                            ESCI = 1;
                            datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
                            break
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                if datenum(datainiTLH)+1 < now
                                    datainiTLH = datestr(datenum(datainiTLH)+1,'yyyy-mm-dd');
                                    break
                                else
                                    yesTLH = 0;
                                end
                            else
                                DatiTiltLinkH(1,jj-6) = cellstr(num2str(DatiRaw(RawDate(end),jj-5)));
                                DatiTiltLinkH(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
                                DatiTiltLinkH(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
                                DatiTiltLinkH(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                DatiTiltLinkH(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                DatiTiltLinkH(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                DatiTiltLinkH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrTiltLinkH(1,jj) = 1;
                                wardat = ['Data of Tilt Link H nodes corrected using Raw Data of reference Csv file. '...
                                    'MEMS was read as an electrolytic cell'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiTiltLinkH(:,jj)));
                idxND = find(strcmp('No Data',DatiTiltLinkH(:,jj)));
                idxT = find(strcmp('---',DatiTiltLinkH(:,jj)));
                idxT2 = find(strcmp('-',DatiTiltLinkH(:,jj)));
                idxE2 = find(strcmp('Err2',DatiTiltLinkH(:,jj)));
                idxE255 = find(strcmp('Err255',DatiTiltLinkH(:,jj)));
                idxD = find(strcmp('DMUXe',DatiTiltLinkH(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiTiltLinkH(:,jj)));
                idxN = find(strcmp('null',DatiTiltLinkH(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiTiltLinkH(indice,jj) = DatiTiltLinkH(indice-1,jj);
                        ErrTiltLinkH(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                    for ii = 2:r
                        % Cerco i multipli di 7 per identificare le temperature
                        Int = jj/7;
                        if floor(Int) == Int
                            % Controllo ampolle
                            if str2double(DatiTiltLinkH(ii,jj)) > 1000
                                DatiTiltLinkH(ii,jj-6:jj) = DatiTiltLinkH(ii-1,jj-6:jj);
                                ErrTiltLinkH(ii,jj) = 1;
                                wardat = ['Data of Tilt Link H nodes corrected using Raw Data of reference Csv file. '...
                                    'MEMS read as a MEMS'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
                if ESCI == 1
                    NAN = 0;
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiTiltLinkH(nnn,jj)));
                    if check == 1
                        DatiTiltLinkH(nnn,jj) = DatiTiltLinkH(nnn-1,jj);
                        ErrTiltLinkH(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link H data done!']; 
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiTiltLinkH = [DATiniTLH str2double(DatiTiltLinkH)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiTiltLinkH(a,1) == DatiTiltLinkH(a-1,1)
               DatiTiltLinkH(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end  
    if NuovoZeroTLH == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkH(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiTiltLinkH(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiTiltLinkH(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkH(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiTiltLinkH;
        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 = DatiTiltLinkH;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

%%  Tilt Link HR H
if  yesTLHRH == 0 % Non ci sono Tilt Link HR H
    DatiTiltLinkHRH = [];
    ErrTiltLinkHRH = [];
    wardat = 'lettura function: there are not Tilt Link HR H';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-TLHRH-RawData.csv']; % Generico per MUMS
    while NAN == 0
        if datenum(datainiTLHRH) == datenum(Data(1,1))
            tempoiniTLHRH = char(Data(1,2));
        end
        NodeType = 'Tilt Link HR H';
        NodeNumTLHRH = num2str(cell2mat(NodoTiltLinkHRH(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 = ''' ...
            datainiTLHRH ''' and Time >= ''' tempoiniTLHRH ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumTLHRH ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniTLHRH = curs.Data;
        Ntempo = DATiniTLHRH;
        [r,c] = size(DATiniTLHRH);
        saltoTLHRH = 0;
        if  r==1 && c==1
            textdatTLHRH = 'Warning: error reading Tilt Link HR H (control unit data)!';
            fprintf(fileID,fmt,textdatTLHRH);
            saltoTLHRH = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiTLHRH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTLHRH ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2TLHRH = curs.Data;
        Ndate = DAT2TLHRH;
        if saltoTLHRH == 1
           DATiniTLHRH = DAT2TLHRH;
        end
        Check = size(DAT2TLHRH);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoTLHRH == 0
                DATiniTLHRH = [DATiniTLHRH; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniTLHRH);
        if cD ~=1
            T = [cell2mat(DATiniTLHRH(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTLHRH(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniTLHRH = T;
        else
            DATiniTLHRH = [];
        end

        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoTLHRH == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiTiltLinkHRH = cell(rd+rt,6*rTLHR);
            else
               DatiTiltLinkHRH = cell(rt,6*rTLHR);
            end
        else
            DatiTiltLinkHRH = cell(rd,6*rTLHR);
        end
        NTiltLinkHRH = cell2mat(NodoTiltLinkHRH(:,2));
        col = 6;
        w = 0;
        while ii <= rTLHRH         
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NTiltLinkHRH(ii,1);
              nNodo = num2str(nN);
              comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
                  datainiTLHRH ''' and Time >= ''' tempoiniTLHRH ''' and  ToolNameID = ''' DTcatena...
                  ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                  NodeType ''' and NodeNum ='  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTLHRH = curs.Data;
        % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
                datainiTLHRH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoTLHRHd = 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-5;
              if saltoTLHRH == 0
                 DatiTiltLinkHRH(1:rt,ini_col:col) = DATnodoTLHRH(:,:);
              else
                  DatiTiltLinkHRH(1:rd,ini_col:col) = DATnodoTLHRHd(:,:);
              end

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

              if Check(1,2) > 1
                 if saltoTLHRH == 0
                    DatiTiltLinkHRH(rt+1:rt+rd,ini_col:col) = DATnodoTLHRHd(:,:);
                 end
              else
                  DatiTiltLinkHRH = DatiTiltLinkHRH(1:end,:);
              end
              okdatTLH = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rTLHRH) ' Tilt Link HR H nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatTLH);
              ii = ii+1;
              col = col+6;
        end
        if w == 0
            wardat = 'There are not warning for Tilt Link HR H!';
            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(DatiTiltLinkHRH); 
        ErrTiltLinkHRH = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroTLHRH == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiTLHRH));
            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',DatiTiltLinkHRH(1,jj)));
            idxND = find(strcmp('No Data',DatiTiltLinkHRH(1,jj)));
            idxT = find(strcmp('---',DatiTiltLinkHRH(1,jj)));
            idxT2 = find(strcmp('-',DatiTiltLinkHRH(1,jj)));
            idxE2 = find(strcmp('Err2',DatiTiltLinkHRH(1,jj)));
            idxE255 = find(strcmp('Err255',DatiTiltLinkHRH(1,jj)));
            idxD = find(strcmp('DMUXe',DatiTiltLinkHRH(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiTiltLinkHRH(1,jj)));
            idxN = find(strcmp('null',DatiTiltLinkHRH(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Tilt Link HR H nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroTLHRH == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiTLHRH)+1 < now
                        datainiTLHRH = datestr(datenum(datainiTLHRH)+1,'yyyy-mm-dd');
                        break
                    else
                        yesTLHRH = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiTiltLinkHRH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrTiltLinkHRH(1,jj) = 1;
                            wardat = 'Data of Tilt Link HR H nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                % Cerco i multipli di 6 per identificare le temperature
                Int = jj/6;
                if floor(Int) == Int
                    % Controllo ampolle
                    if str2double(DatiTiltLinkHRH(1,jj)) < 500
                        if rDR==1 && cDR==1 || NuovoZeroTLHRH == 0
                            NAN = 0;
                            ESCI = 1;
                            if datenum(datainiTLHRH)+1 < now
                                datainiTLHRH = datestr(datenum(datainiTLHRH)+1,'yyyy-mm-dd');
                                break
                            else
                                yesTLHRH = 0;
                            end
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
                                break
                            else
                                DatiTiltLinkHRH(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
                                DatiTiltLinkHRH(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
                                DatiTiltLinkHRH(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                DatiTiltLinkHRH(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                DatiTiltLinkHRH(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                DatiTiltLinkHRH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrTiltLinkHRH(1,jj) = 1;
                                wardat = ['Data of Tilt Link HR H nodes corrected using Raw Data of reference Csv file. '...
                                    'Electrolytic cell was read as the corresponding MEMS'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiTiltLinkHRH(:,jj)));
                idxND = find(strcmp('No Data',DatiTiltLinkHRH(:,jj)));
                idxT = find(strcmp('---',DatiTiltLinkHRH(:,jj)));
                idxT2 = find(strcmp('-',DatiTiltLinkHRH(:,jj)));
                idxE2 = find(strcmp('Err2',DatiTiltLinkHRH(:,jj)));
                idxE255 = find(strcmp('Err255',DatiTiltLinkHRH(:,jj)));
                idxD = find(strcmp('DMUXe',DatiTiltLinkHRH(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiTiltLinkHRH(:,jj)));
                idxN = find(strcmp('null',DatiTiltLinkHRH(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiTiltLinkHRH(indice,jj) = DatiTiltLinkHRH(indice-1,jj);
                        ErrTiltLinkHRH(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                for ii = 2:r
                    % Cerco i multipli di 6 per identificare le temperature
                    Int = jj/6;
                    if floor(Int) == Int
                        % Controllo ampolle
                        if str2double(DatiTiltLinkHRH(ii,jj)) < 500
                            DatiTiltLinkHRH(ii,jj-2:jj) = DatiTiltLinkHRH(ii-1,jj-2:jj);
                            ErrTiltLinkHRH(ii,jj) = 1;
                            wardat = ['Data of Tilt Link HR nodes corrected using Raw Data of reference Csv file. '...
                                'Electrolytic cell was read as a MEMS'];
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        end
                    end
                end
                if ESCI == 1
                    NAN = 0;
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiTiltLinkHRH(nnn,jj)));
                    if check == 1
                        DatiTiltLinkHRH(nnn,jj) = DatiTiltLinkHRH(nnn-1,jj);
                        ErrTiltLinkHRH(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link HR H data done!']; 
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiTiltLinkHRH = [DATiniTLHRH str2double(DatiTiltLinkHRH)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiTiltLinkHRH(a,1) == DatiTiltLinkHRH(a-1,1)
               DatiTiltLinkHRH(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end  
    if NuovoZeroTLHRH == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkHRH(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiTiltLinkHRH(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiTiltLinkHRH(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkHRH(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiTiltLinkHRH;
        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 = DatiTiltLinkHRH;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

%%  Piezo Link
if  yesPL == 0 % Non ci sono Piezo Link
    DatiPiezoLink = [];
    ErrPiezoLink = [];
    wardat = 'lettura function: there are not Piezo Link';
    fprintf(fileID,fmt,wardat);
else
    check_PLvsBL = 0;
    while check_PLvsBL == 0
        NAN = 0;
        RawDataFile = ['' IDcentralina '-' DTcatena '-PL-RawData.csv']; % Generico per MUMS
        while NAN == 0
            if datenum(datainiPL) == datenum(Data(1,1))
                tempoiniPL = char(Data(1,2));
            end
            NodeType = 'Piezo Link';
            NodeNumPL = num2str(cell2mat(NodoPiezoLink(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 = ''' ...
                datainiPL ''' and Time >= ''' tempoiniPL ''' and  ToolNameID = ''' DTcatena...
                ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
                ''' and NodeNum = ''' NodeNumPL ''' '];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATiniPL = curs.Data;
            Ntempo = DATiniPL;
            [r,c] = size(DATiniPL);
            saltoPL = 0;
            if  r==1 && c==1
                textdatPL = 'Warning: error reading Piezo Link (control unit data)!';
                fprintf(fileID,fmt,textdatPL);
                saltoPL = 1;
            end
            % Step 2 (vedi commento più avanti)
            comando = ['select Date, Time from RawDataView where Date > ''' ...
                datainiPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumPL ''' '];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DAT2PL = curs.Data;
            Ndate = DAT2PL;
            if saltoPL == 1
                DATiniPL = DAT2PL;
            end
            Check = size(DAT2PL);
            if Check(1,2) > 1 % ho superato il primo giorno
                % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
                if saltoPL == 0
                    DATiniPL = [DATiniPL; curs.Data];
                end
            end
            % Modifico il formato di data e ora in DATini.
            [rD,cD] = size(DATiniPL);
            if cD ~=1
                T = [cell2mat(DATiniPL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPL(:,2))];
                T = datenum(T);
                % Converto da Cell Array a Matrice.
                DATiniPL = T;
            else
                DATiniPL = [];
            end
            
            % Scarico dati relativi ai singoli nodi
            ii = 1;
            [rd,~] = size(Ndate);
            [rt,~] = size(Ntempo);
            if saltoPL == 0
                if Check(1,2) > 1 % ho superato il primo giorno
                    DatiPiezoLink = cell(rd+rt,2*rPL);
                else
                    DatiPiezoLink = cell(rt,2*rPL);
                end
            else
                DatiPiezoLink = cell(rd,2*rPL);
            end
            NPiezoLink = cell2mat(NodoPiezoLink(:,2));
            col = 2;
            w = 0;
            while ii <= rPL
                % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
                % ma limitandomi a quelli registrati nel corso di quella singola giornata;
                nN = NPiezoLink(ii,1);
                nNodo = num2str(nN);
                comando = ['select Val0, Val1 from RawDataView where Date = ''' ...
                    datainiPL ''' and Time >= ''' tempoiniPL ''' and  ToolNameID = ''' DTcatena...
                    ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                    NodeType ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoPL = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1 from RawDataView where Date > ''' ...
                    datainiPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoPLd = 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-1;
                if saltoPL == 0
                    DatiPiezoLink(1:rt,ini_col:col) = DATnodoPL(:,:);
                else
                    DatiPiezoLink(1:rd,ini_col:col) = DATnodoPLd(:,:);
                end
                
                [rn,~] = size(DATnodoPLd); % controllo date
                if rn < rd % normalmente sono uguali
                    for i = rn+1:rd
                        DATnodoPLd(i,:) = DATnodoPLd(rn,:); % se mancano dati, copio gli ultimi
                    end
                    wardat = ['Node Piezo Link ' num2str(ii) ' does NOT work!'];
                    fprintf(fileID,fmt,wardat);
                    w = 1;
                end
                
                if Check(1,2) > 1
                    if saltoPL == 0
                        DatiPiezoLink(rt+1:rt+rd,ini_col:col) = DATnodoPLd(:,:);
                    end
                else
                    DatiPiezoLink = DatiPiezoLink(1:end,:);
                end
                okdatPL = ['Data of node number ' num2str(ii) ' of ' ...
                    num2str(rPL) ' Piezo Link nodes downloaded correctly'];
                fprintf(fileID,fmt,okdatPL);
                ii = ii+1;
                col = col+2;
            end
            if w == 0
                wardat = 'There are not warning for Piezo 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(DatiPiezoLink);
            ErrPiezoLink = zeros(r,c);
            Ncorr = 0;
            ESCI = 0;
            NAN = 1;
            DIS = 0;
            if NuovoZeroPL == 1
                if isfile(RawDataFile) == 1
                    DatiRaw = csvread(RawDataFile);
                    [rDR,cDR] = size(DatiRaw);
                    DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                    RawDate = find(DatiRaw(:,1)<=datenum(datainiPL));
                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.',DatiPiezoLink(1,jj)) == 1
                    for dis = 2:r
                        if strcmp('Dis.',DatiPiezoLink(dis,jj)) == 0
                            DatiPiezoLink = DatiPiezoLink(dis:end,:);
                            DATiniPL = DATiniPL(dis:end,:);
                            DatiNTCPiezoLink = DatiNTCPiezoLink(dis:end,:);
                            [r,c] = size(DatiPiezoLink);
                            break
                        elseif isfile(RawDataFile) == 1
                            if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                                DatiPiezoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrPiezoLink(1,jj) = 1;
                                wardat = 'Data of Piezo Link nodes corrected using Raw Data of reference Csv file.';
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                                DIS = 0;
                                break
                            elseif dis == r
                                NAN = 0;
                                DIS = 1;
                                if datenum(datainiPL)+1 < now
                                    datainiPL = datestr(datenum(datainiPL)+1,'yyyy-mm-dd');
                                    break
                                else
                                    yesPL = 0;
                                end
                            end
                        elseif dis == r
                            NAN = 0;
                            DIS = 1;
                            if datenum(datainiPL)+1 < now
                                datainiPL = datestr(datenum(datainiPL)+1,'yyyy-mm-dd');
                                break
                            else
                                yesPL = 0;
                            end
                        end
                    end
                end
            end
            if DIS ~= 1 && yesPL == 1
                % --- Codice per il primo dato ---
                for jj=1:c
                    % Trovo l'indice della cella contenenti una determinata stringa.
                    idxE = find(strcmp('Err1',DatiPiezoLink(1,jj)));
                    idxND = find(strcmp('No Data',DatiPiezoLink(1,jj)));
                    idxT = find(strcmp('---',DatiPiezoLink(1,jj)));
                    idxT2 = find(strcmp('-',DatiPiezoLink(1,jj)));
                    idxE2 = find(strcmp('Err2',DatiPiezoLink(1,jj)));
                    idxE255 = find(strcmp('Err255',DatiPiezoLink(1,jj)));
                    idxD = find(strcmp('DMUXe',DatiPiezoLink(1,jj)));
                    idxE1F = find(strcmp('Err1File',DatiPiezoLink(1,jj)));
                    idxN = find(strcmp('null',DatiPiezoLink(1,jj)));
                    idx = union(idxE,idxT);
                    idx = union(idx,idxT2);
                    idx = union(idx,idxND);
                    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 Piezo Link nodes: there are not data at the beginning of the array!';
                        fprintf(fileID,fmt,wardat);
                        if rDR==1 && cDR==1 || NuovoZeroPL == 0 % il file non è mai stato scritto, cerco la data precedente
                            NAN = 0;
                            ESCI = 1;
                            if datenum(datainiPL)+1 < now
                                datainiPL = datestr(datenum(datainiPL)+1,'yyyy-mm-dd');
                                break
                            else
                                yesPL = 0;
                            end
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiPL = datestr(datenum(datainiPL)-1,'yyyy-mm-dd');
                                break
                            else
                                if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                                    DatiPiezoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                    ErrPiezoLink(1,jj) = 1;
                                    wardat = 'Data of Piezo Link nodes corrected using Raw Data of reference Csv file.';
                                    fprintf(fileID,fmt,wardat);
                                    Ncorr = Ncorr+ri;
                                    NAN = 1;
                                else
                                    NAN = 0;
                                    ESCI = 1;
                                    datainiPL = datestr(datenum(datainiPL)-1,'yyyy-mm-dd');
                                    break
                                end
                            end
                        end
                    end
                end
                if ESCI == 0
                    for jj=1:c
                        % Trovo l'indice della cella contenenti una determinata stringa.
                        idxE = find(strcmp('Err1',DatiPiezoLink(:,jj)));
                        idxND = find(strcmp('No Data',DatiPiezoLink(:,jj)));
                        idxT = find(strcmp('---',DatiPiezoLink(:,jj)));
                        idxT2 = find(strcmp('-',DatiPiezoLink(:,jj)));
                        idxE2 = find(strcmp('Err2',DatiPiezoLink(:,jj)));
                        idxE255 = find(strcmp('Err255',DatiPiezoLink(:,jj)));
                        idxD = find(strcmp('DMUXe',DatiPiezoLink(:,jj)));
                        idxE1F = find(strcmp('Err1File',DatiPiezoLink(:,jj)));
                        idxN = find(strcmp('null',DatiPiezoLink(:,jj)));
                        idxRX = find(strcmp('No RX',DatiPiezoLink(:,jj)));
                        idxI = find(strcmp('id Error',DatiPiezoLink(:,jj)));
                        idxM = find(strcmp('MUX id Error',DatiPiezoLink(:,jj)));
                        idxC = find(strcmp('CH n. Error',DatiPiezoLink(:,jj)));
                        idxU = find(strcmp('Unknown Error',DatiPiezoLink(:,jj)));
                        idxMC = find(strcmp('MsgCorrup',DatiPiezoLink(:,jj)));
                        idxNS = find(strcmp('NotSupp',DatiPiezoLink(:,jj)));
                        idxU2 = find(strcmp('Unknown',DatiPiezoLink(:,jj)));
                        idxNA = find(strcmp('NotAv',DatiPiezoLink(:,jj)));
                        idxDis = find(strcmp('Dis.',DatiPiezoLink(:,jj)));
                        idx = union(idxE,idxT);
                        idx = union(idx,idxT2);
                        idx = union(idx,idxND);
                        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
                                datainiPL = datestr(datenum(datainiPL)-1,'yyyy-mm-dd');
                                ESCI = 1;
                                NAN = 0;
                                break
                            else
                                DatiPiezoLink(indice,jj) = DatiPiezoLink(indice-1,jj);
                                ErrPiezoLink(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(DatiPiezoLink(nnn,jj)));
                            if check == 1
                                DatiPiezoLink(nnn,jj) = DatiPiezoLink(nnn-1,jj);
                                ErrPiezoLink(nnn,jj) = 1;
                                Ncorr = Ncorr+ri;
                            end
                        end
                    end
                end
                corrdat = ['' num2str(Ncorr) ' corrections of Piezo Link data done!'];
                fprintf(fileID,fmt,corrdat);
                % Concateno informazioni generali e/o letture dai nodi.
                DatiPiezoLink = [DATiniPL str2double(DatiPiezoLink)];
                % Elimino eventuali date doppie
                a = 2;
                while a <= r
                    if DatiPiezoLink(a,1) == DatiPiezoLink(a-1,1)
                        DatiPiezoLink(a,:) = [];
                        r = r-1;
                    else
                        a = a+1;
                    end
                end
            end
            if NAN == 1 && NuovoZeroPL == 1
                if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
                    RawDate1 = find(DatiRaw(:,1)<=DatiPiezoLink(1,1));
                    if isempty(RawDate1) == 1
                        RawDate2 = 1;
                    elseif RawDate1(end) == rDR
                        RawDate2 = find(DatiPiezoLink(:,1)>DatiRaw(end,1));
                    else
                        RawDate2 = find(DatiPiezoLink(:,1)>DatiRaw(RawDate1(end)+1,1));
                    end
                else
                    RawDate1 = [];
                    RawDate2 = 1;
                end
                if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
                    Dati = [DatiRaw(1:RawDate1(end),:);DatiPiezoLink(RawDate2(1):end,:)];
                elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
                    Dati = DatiPiezoLink;
                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 = DatiPiezoLink;
            end
            Dati(:,1) = Dati(:,1) - 730000;
            csvwrite(RawDataFile,Dati);
        end
    
        % Baro Link
        % Se ho un Piezometro, devo verificare che l'installazione disponga di Barometro!
        noBL = 0; % Si oppone al successivo noBL = 1 se non mi servono i dati del Barometro
        if yesBL == 0
            % L'installazione non dispone di Barometro, se ho un Piezometro recupero
            % i dati del Barometro di un'altra catena nelle vicinanze
            text = 'The installation has not a Barometer';
            fprintf(fileID,fmt,text);
            if strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
            elseif yesPL == 1
                B = 0; % dato che nei passaggi successivi attiva l'interpolazione fra date
                
                IDunitBaro = char(Barometro(1,2));
                DTcatenaBaro = char(Barometro(1,1));
                text = ['The elaboration will use the Barometer from the installation ' IDunitBaro ' - ' DTcatenaBaro ''];
                fprintf(fileID,fmt,text);
                comando = ['select id from units where name = ''' IDunitBaro ''' '];
                curs = exec(conn,comando);
                curs = fetch(curs);
                unitID = num2str(cell2mat(curs.Data));
                comando = ['select id from tools where name = '''  DTcatenaBaro ''' and unit_id = '''...
                    unitID ''' '];
                curs = exec(conn,comando);
                curs = fetch(curs);
                idToolB = num2str(cell2mat(curs.Data));
                
                % carico le informazioni relative al numero e alla profondità per
                % BARO LINK recuperato
                comando = ['select num, depth from nodes where tool_id = ''' idToolB ''' and nodetype_id = 3 order by num'];
                curs = exec(conn,comando);
                curs = fetch(curs);
                Leggo = curs.Data;
                % cambio il segno della profondità (nel DB è positivo)
                depthB = cell2mat(Leggo(:,2));
                depthB = (-1)*depthB;
                depthB = num2cell(depthB);
                [r,~] = size(depthB);
                nome = cell(r,1);
                for i=1:r
                    nome(i,1) = cellstr('Baro Link');
                end
                NodoBaroLink = [nome Leggo(:,1) depthB];
                NodoBaroLink = flipud(NodoBaroLink);
                [rBL,~] = size(NodoBaroLink);
            end
        else
            text = 'The installation has a Barometer';
            fprintf(fileID,fmt,text);
            B = 1; % dato che si oppone a B = 0
            DTcatenaBaro = DTcatena;
            IDunitBaro = IDcentralina;
        end
        
        if noBL == 1 || strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
            DatiBaroLink = [];
            ErrBaroLink = [];
            wardat = 'lettura function: there are not Baro Link';
            fprintf(fileID,fmt,wardat);
        else
            NAN = 0;
            while NAN == 0
                % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
                % Step  1 (vedi commento più avanti)
                RawDataFile = ['' IDunitBaro '-' DTcatenaBaro '-BL-RawData.csv']; % Generico per MUMS
                NodeType = 'Baro Link';
                comando = ['select Date, Time from RawDataView where Date = ''' ...
                    datainiBL ''' and Time >= ''' tempoiniBL ''' and UnitName = ''' IDunitBaro...
                    ''' and ToolNameID = ''' DTcatenaBaro ''' and NodeType = ''' NodeType ''''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATiniBL = curs.Data;
                Ntempo = DATiniBL;
                [r,c] = size(DATiniBL);
                saltoBL = 0;
                if  r==1 && c==1
                    textdatBL = 'Warning: error reading Baro Link (control unit data)!';
                    fprintf(fileID,fmt,textdatBL);
                    saltoBL = 1;
                end
                % Step 2 (vedi commento più avanti)
                comando = ['select Date, Time from RawDataView where Date > ''' ...
                    datainiBL ''' and UnitName = ''' IDunitBaro ''' and  ToolNameID = '''...
                    DTcatenaBaro ''' and NodeType = ''' NodeType ''''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DAT2BL = curs.Data;
                Ndate = DAT2BL;
                if saltoBL == 1
                    DATiniBL = DAT2BL;
                end
                Check = size(DAT2BL);
                if Check(1,2) > 1 % ho superato il primo giorno
                    if saltoBL == 0
                        DATiniBL = [DATiniBL; curs.Data];
                    end
                end
                % Modifico il formato di data e ora in DATini.
                [rD,cD] = size(DATiniBL);
                Rilancia = 0;
                if cD > 1
                    T = [cell2mat(DATiniBL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniBL(:,2))];
                    T = datenum(T);
                    % Converto da Cell Array a Matrice.
                    DATiniBL = T;
                else
                    Rilancia = 1;
                end
                
                ii = 1;
                [rd,~] = size(Ndate);
                [rt,~] = size(Ntempo);
                if saltoBL == 0
                    if Check(1,2) > 1 % Ho superato il primo giorno
                        DatiBaroLink = cell(rd+rt,2*rBL);
                    else
                        DatiBaroLink = cell(rt,2*rBL);
                    end
                else
                    DatiBaroLink = cell(rd,2*rBL);
                end
                NBaroLink = cell2mat(NodoBaroLink(:,2));
                col = 2;
                w = 0;
                while ii <= rBL
                    nN = NBaroLink(ii,1);
                    nNodo = num2str(nN);
                    % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
                    % ma limitandomi a quelli registrati nel corso di quella singola giornata;
                    comando = ['select Val3, Val4 from RawDataView where Date = ''' ...
                        datainiBL ''' and Time >= ''' tempoiniBL ''' and  UnitName = ''' IDunitBaro ...
                        ''' and ToolNameID = ''' DTcatenaBaro ''' and NodeType = ''' NodeType ...
                        ''' and NodeNum ='  nNodo ' '];
                    curs = exec(conn,comando);
                    curs = fetch(curs);
                    DATnodoBL = curs.Data;
                    % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                    comando = ['select Val3, Val4 from RawDataView where Date > ''' ...
                        datainiBL ''' and  UnitName = ''' IDunitBaro ...
                        ''' and  ToolNameID = ''' DTcatenaBaro ''' and NodeType = ''' ...
                        NodeType ''' and NodeNum ='''  nNodo ''''];
                    curs = exec(conn,comando);
                    curs = fetch(curs);
                    DATnodoBLd = 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-1;
                    if saltoBL == 0
                        DatiBaroLink(1:rt,ini_col:col) = DATnodoBL(:,:);
                    else
                        DatiBaroLink(1:rd,ini_col:col) = DATnodoBLd(:,:);
                    end
                    [rn,~] = size(DATnodoBLd); % controllo date
                    if rn < rd % normalmente sono uguali
                        for i = rn+1:rd
                            DATnodoBLd(i,:) = DATnodoBLd(rn,:); % se mancano dati, copio gli ultimi
                        end
                        wardat = ['Node Baro Link ' num2str(ii) ' does NOT work!'];
                        fprintf(fileID,fmt,wardat);
                        w = 1;
                    end
                    
                    if Check(1,2) > 1
                        if saltoBL == 0
                            DatiBaroLink(rt+1:rt+rd,ini_col:col) = DATnodoBLd(:,:);
                        end
                    else
                        DatiBaroLink = DatiBaroLink(1:end,:);
                    end
                    okdatBL = ['Data of node number ' num2str(ii) ' of ' ...
                        num2str(rBL) ' Baro Link nodes downloaded correctly'];
                    fprintf(fileID,fmt,okdatBL);
                    ii = ii+1;
                    col = col+2;
                end
                if w == 0
                    wardat = 'There are not warning for Baro 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(DatiBaroLink);
                ErrBaroLink = zeros(r,c);
                Ncorr = 0;
                ESCI = 0;
                NAN = 1;
                if isfile(RawDataFile) == 1
                    DatiRaw = csvread(RawDataFile);
                    [rDR,cDR] = size(DatiRaw);
                    DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                    RawDate = find(DatiRaw(:,1)<=datenum(datainiBL));
                else
                    rDR = 1;
                    cDR = 1;
                    RawDate = [];
                    DatiRaw = [];
                end
                % --- Codice per il primo dato ---
                for jj=1:c
                    if Rilancia == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
                        break
                    end
                    % Trovo l'indice della cella contenenti una determinata stringa.
                    idxE = find(strcmp('Err1',DatiBaroLink(1,jj)));
                    idxND = find(strcmp('No Data',DatiBaroLink(1,jj)));
                    idxT = find(strcmp('---',DatiBaroLink(1,jj)));
                    idxT2 = find(strcmp('-',DatiBaroLink(1,jj)));
                    idxE2 = find(strcmp('Err2',DatiBaroLink(1,jj)));
                    idxE255 = find(strcmp('Err255',DatiBaroLink(1,jj)));
                    idxD = find(strcmp('DMUXe',DatiBaroLink(1,jj)));
                    idxE1F = find(strcmp('Err1File',DatiBaroLink(1,jj)));
                    idxN = find(strcmp('null',DatiBaroLink(1,jj)));
                    idxF = find(str2double(cell2mat(DatiBaroLink(1,1)))<10500);
                    idx = union(idxE,idxT);
                    idx = union(idx,idxT2);
                    idx = union(idx,idxND);
                    idx = union(idx,idxE2);
                    idx = union(idx,idxE255);
                    idx = union(idx,idxD);
                    idx = union(idx,idxE1F);
                    idx = union(idx,idxN);
                    idx = union(idx,idxF);
                    [ri,~] = size(idx);
                    if ri == 1
                        wardat = 'Warning on the correction of Baro Link nodes: there are not data at the beginning of the array!';
                        fprintf(fileID,fmt,wardat);
                        if rDR==1 && cDR==1 % il file non è mai stato scritto, cerco la data precedente
                            NAN = 0;
                            ESCI = 1;
                            if datenum(datainiBL)+1 < now
                                datainiBL = datestr(datenum(datainiBL)+1,'yyyy-mm-dd');
                                break
                            else
                                yesBL = 0;
                            end
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
                                break
                            else
                                if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                                    DatiBaroLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                    ErrBaroLink(1,jj) = 1;
                                    wardat = 'Data of Baro Link nodes corrected using Raw Data of reference Csv file.';
                                    fprintf(fileID,fmt,wardat);
                                    Ncorr = Ncorr+ri;
                                    NAN = 1;
                                else
                                    NAN = 0;
                                    ESCI = 1;
                                    datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
                                    break
                                end
                            end
                        end
                    end
                end
                if ESCI == 0
                    for jj=1:c
                        idxF = [];
                        % Trovo l'indice della cella contenenti una determinata stringa.
                        idxE = find(strcmp('Err1',DatiBaroLink(:,jj)));
                        idxND = find(strcmp('No Data',DatiBaroLink(:,jj)));
                        idxT = find(strcmp('---',DatiBaroLink(:,jj)));
                        idxT2 = find(strcmp('-',DatiBaroLink(:,jj)));
                        idxE2 = find(strcmp('Err2',DatiBaroLink(:,jj)));
                        idxE255 = find(strcmp('Err255',DatiBaroLink(:,jj)));
                        idxD = find(strcmp('DMUXe',DatiBaroLink(:,jj)));
                        idxE1F = find(strcmp('Err1File',DatiBaroLink(:,jj)));
                        idxN = find(strcmp('null',DatiBaroLink(:,jj)));
                        for ii = 1:r
                            if str2double(cell2mat(DatiBaroLink(ii,1))) < 10500
                                idxF = [idxF; ii];
                            end
                        end
                        idx = union(idxE,idxT);
                        idx = union(idx,idxT2);
                        idx = union(idx,idxND);
                        idx = union(idx,idxE2);
                        idx = union(idx,idxE255);
                        idx = union(idx,idxD);
                        idx = union(idx,idxE1F);
                        idx = union(idx,idxN);
                        idx = union(idx,idxF);
                        [ri,~] = size(idx);
                        for kk=1:ri
                            indice=idx(kk);
                            if indice == 1
                                datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
                                ESCI = 1;
                                NAN = 0;
                                break
                            else
                                DatiBaroLink(indice,jj) = DatiBaroLink(indice-1,jj);
                                ErrBaroLink(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(DatiBaroLink(nnn,jj)));
                            if check == 1
                                DatiBaroLink(nnn,jj) = DatiBaroLink(nnn-1,jj);
                                ErrBaroLink(nnn,jj) = 1;
                                Ncorr = Ncorr+ri;
                            end
                        end
                    end
                end
                corrdat = ['' num2str(Ncorr) ' corrections of Baro Link data done!'];
                fprintf(fileID,fmt,corrdat);
                
                % Concateno informazioni generali e/o letture dai nodi.
                
                % se barometro e piezometro non appartengono alla stessa catena, interpolo
                % i dati
                if Rilancia == 0
                    if B==0
                        DATIBaro = str2double(DatiBaroLink);
                        if datenum(DATiniBL(end,1)) < datenum(DATiniPL(end,1)) % Uso solo l'ultimo dato del barometro
                            [rP,~] = size(DATiniPL);
                            DATIBaro = zeros(rP,2);
                            for b = 1:rP
                                DATIBaro(b,1:2) = str2double(DatiBaroLink(end,1:2));
                            end
                            DatiBaroLink = [DATiniPL DATIBaro];
                        else
                            DATIBaroInt = interp1(DATiniBL(:,1),DATIBaro(:,1),DATiniPL(:,1));
                            DATIBaroTemp = interp1(DATiniBL(:,1),DATIBaro(:,2),DATiniPL(:,1));
                            DatiBaroLink = [DATiniPL DATIBaroInt DATIBaroTemp];
                            log = isnan(DatiBaroLink(:,:));
                            [rL,cL] = size(log);
                            for check = 1:rL
                                for control = 1:cL
                                    if log(check,control) == 1
                                        if check == 1 % è proprio la prima data ad essere Nan, ciò significa che il barometro è stato installato dopo il piezometro
                                            i = 2;
                                            while log(i,control) == 1
                                                i = i+1;
                                            end
                                            DatiBaroLink(check,control) = DatiBaroLink(i,control);
                                        else
                                            DatiBaroLink(check,control) = DatiBaroLink(check-1,control);
                                        end
                                    end
                                end
                            end
                        end
                    else
                        DATIBaro = str2double(DatiBaroLink);
                        DatiBaroLink = [DATiniBL DATIBaro];
                    end
                    % Elimino eventuali date doppie
                    a = 2;
                    [r,~] = size(DatiBaroLink);
                    while a <= r
                        if DatiBaroLink(a,1) == DatiBaroLink(a-1,1)
                            DatiBaroLink(a,:) = [];
                            r = r-1;
                        else
                            a = a+1;
                        end
                    end
                    text = ['Barometer data conversion for chain ' IDunitBaro ' - ' DTcatenaBaro ' done'];
                    fprintf(fileID,fmt,text);
                end
            end
            if NuovoZeroBL == 1
                if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
                    RawDate1 = find(DatiRaw(:,1)<=DatiBaroLink(1,1));
                    if isempty(RawDate1) == 1
                        RawDate2 = 1;
                    elseif RawDate1(end) == rDR
                        RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(end,1));
                    else
                        RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(RawDate1(end)+1,1));
                    end
                else
                    RawDate1 = [];
                    RawDate2 = 1;
                end
                if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
                    Dati = [DatiRaw(1:RawDate1(end),:);DatiBaroLink(RawDate2(1):end,:)];
                elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
                    Dati = DatiBaroLink;
                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 = DatiBaroLink;
            end
            Dati(:,1) = Dati(:,1) - 730000;
            csvwrite(RawDataFile,Dati);
        end
        
        %% Check Date Baro Link vs Piezo Link
        if strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
            check_PLvsBL = 1;
        else
            if datenum(datainiPL) > datenum(datainiBL)
                datainiBL = datainiPL;
            elseif datenum(datainiPL) < datenum(datainiBL)
                datainiPL = datainiBL;
            else
                check_PLvsBL = 1;
            end
        end
    end
end

%% SOLO Baro Link, NO Piezo Link
if yesBL == 1 && yesPL == 0
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-BL-RawData.csv']; % Generico per MUMS
    while NAN == 0
        if datenum(datainiBL) == datenum(Data(1,1))
            tempoiniBL = char(Data(1,2));
        end
        % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
        % Step  1 (vedi commento più avanti)
        NodeType = 'Baro Link';
        comando = ['select Date, Time from RawDataView where Date = ''' ...
            datainiBL ''' and Time >= ''' tempoiniBL ''' and UnitName = ''' IDcentralina...
            ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType ''''];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniBL = curs.Data;
        Ntempo = DATiniBL;
        [r,c] = size(DATiniBL);
        saltoBL = 0;
        if  r==1 && c==1
            textdatBL = 'Warning: error reading Baro Link (control unit data)!';
            fprintf(fileID,fmt,textdatBL);
            saltoBL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiBL ''' and UnitName = ''' IDcentralina ''' and  ToolNameID = '''...
            DTcatena ''' and NodeType = ''' NodeType ''''];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2BL = curs.Data;
        Ndate = DAT2BL;
        if saltoBL == 1
            DATiniBL = DAT2BL;
        end
        Check = size(DAT2BL);
        if Check(1,2) > 1 % ho superato il primo giorno
            if saltoBL == 0
                DATiniBL = [DATiniBL; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniBL);
        if cD ~=1
            T = [cell2mat(DATiniBL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniBL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniBL = T;
        else
            DATiniBL = [];
        end
        
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoBL == 0
            if Check(1,2) > 1 % Ho superato il primo giorno
                DatiBaroLink = cell(rd+rt,2*rBL);
            else
                DatiBaroLink = cell(rt,2*rBL);
            end
        else
            DatiBaroLink = cell(rd,2*rBL);
        end
        NBaroLink = cell2mat(NodoBaroLink(:,2));
        col = 2;
        w = 0;
        while ii <= rBL
            nN = NBaroLink(ii,1);
            nNodo = num2str(nN);
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            comando = ['select Val3, Val4 from RawDataView where Date = ''' ...
                datainiBL ''' and Time >= ''' tempoiniBL ''' and  UnitName = ''' IDcentralina ...
                ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType ...
                ''' and NodeNum ='  nNodo ' '];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoBL = curs.Data;
            % Step 2: Considero le date successive e scarico tutti i dati disponibili.
            comando = ['select Val3, Val4 from RawDataView where Date > ''' ...
                datainiBL ''' and  UnitName = ''' IDcentralina ...
                ''' and  ToolNameID = ''' DTcatena ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='''  nNodo ''''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoBLd = 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-1;
            if saltoBL == 0
                DatiBaroLink(1:rt,ini_col:col) = DATnodoBL(:,:);
            else
                DatiBaroLink(1:rd,ini_col:col) = DATnodoBLd(:,:);
            end
            [rn,~] = size(DATnodoBLd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoBLd(i,:) = DATnodoBLd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Baro Link ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            if Check(1,2) > 1
                if saltoBL == 0
                    DatiBaroLink(rt+1:rt+rd,ini_col:col) = DATnodoBLd(:,:);
                end
            else
                DatiBaroLink = DatiBaroLink(1:end,:);
            end
            okdatBL = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rBL) ' Baro Link nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatBL);
            ii = ii+1;
            col = col+2;
        end
        if w == 0
            wardat = 'There are not warning for Baro 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(DatiBaroLink);
        ErrBaroLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroBL== 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
            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',DatiBaroLink(1,jj)));
            idxND = find(strcmp('No Data',DatiBaroLink(1,jj)));
            idxT = find(strcmp('---',DatiBaroLink(1,jj)));
            idxT2 = find(strcmp('-',DatiBaroLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiBaroLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiBaroLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiBaroLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiBaroLink(1,jj)));
            idxN = find(strcmp('null',DatiBaroLink(1,jj)));
            idxF = find(str2double(cell2mat(DatiBaroLink(1,1)))<12000);
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            idx = union(idx,idxE2);
            idx = union(idx,idxE255);
            idx = union(idx,idxD);
            idx = union(idx,idxE1F);
            idx = union(idx,idxN);
            idx = union(idx,idxF);
            [ri,~] = size(idx);
            if ri == 1
                wardat = 'Warning on the correction of Baro Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroBL == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiBL)+1 < now
                        datainiBL = datestr(datenum(datainiBL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesBL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
                        break
                    else
                        DatiBaroLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                        ErrBaroLink(1,jj) = 1;
                        wardat = 'Data of Baro Link nodes corrected using Raw Data of reference Csv file.';
                        fprintf(fileID,fmt,wardat);
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
            end
        end
        for jj=1:c
            % Trovo l'indice della cella contenenti una determinata stringa.
            idxE = find(strcmp('Err1',DatiBaroLink(:,jj)));
            idxND = find(strcmp('No Data',DatiBaroLink(:,jj)));
            idxT = find(strcmp('---',DatiBaroLink(:,jj)));
            idxT2 = find(strcmp('-',DatiBaroLink(:,jj)));
            idxE2 = find(strcmp('Err2',DatiBaroLink(:,jj)));
            idxE255 = find(strcmp('Err255',DatiBaroLink(:,jj)));
            idxD = find(strcmp('DMUXe',DatiBaroLink(:,jj)));
            idxE1F = find(strcmp('Err1File',DatiBaroLink(:,jj)));
            idxN = find(strcmp('null',DatiBaroLink(:,jj)));
            for ii = 1:r
                if str2double(cell2mat(DatiBaroLink(ii,1))) < 12000
                    idxF = [idxF; ii];
                end
            end
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            idx = union(idx,idxE2);
            idx = union(idx,idxE255);
            idx = union(idx,idxD);
            idx = union(idx,idxE1F);
            idx = union(idx,idxN);
            idx = union(idx,idxF);
            [ri,~] = size(idx);
            for kk=1:ri
                indice=idx(kk);
                if indice == 1
                    datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
                    ESCI = 1;
                    NAN = 0;
                    break
                else
                    DatiBaroLink(indice,jj) = DatiBaroLink(indice-1,jj);
                    ErrBaroLink(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(DatiBaroLink(nnn,jj)));
                if check == 1
                    DatiBaroLink(nnn,jj) = DatiBaroLink(nnn-1,jj);
                    ErrBaroLink(nnn,jj) = 1;
                    Ncorr = Ncorr+ri;
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Baro Link data done!'];
        fprintf(fileID,fmt,corrdat);
        
        % Concateno informazioni generali e/o letture dai nodi.
        
        % se barometro e piezometro non appartengono alla stessa catena, interpolo
        % i dati
        if B==0
            DATIBaro = str2double(DatiBaroLink);
            DATIBaroInt = interp1(DATiniBL(:,1),DATIBaro(:,1),DATiniPL(:,1));
            DATIBaroTemp = interp1(DATiniBL(:,1),DATIBaro(:,2),DATiniPL(:,1));
            DatiBaroLink = [DATiniPL DATIBaroInt DATIBaroTemp];
            log = isnan(DatiBaroLink(:,:));
            [rL,cL] = size(log);
            for check = 1:rL
                for control = 1:cL
                    if log(check,control) == 1
                        if check == 1 % è proprio la prima data ad essere Nan, ciò significa che il barometro è stato installato dopo il piezometro
                            i = 2;
                            while log(i,control) == 1
                                i = i+1;
                            end
                            DatiBaroLink(check,control) = DatiBaroLink(i,control);
                        else
                            DatiBaroLink(check,control) = DatiBaroLink(check-1,control);
                        end
                    end
                end
            end
        else
            DATIBaro = str2double(DatiBaroLink);
            DatiBaroLink = [DATiniBL DATIBaro];
        end
        % Elimino eventuali date doppie
        a = 2;
        [r,~] = size(DatiBaroLink);
        while a <= r
            if DatiBaroLink(a,1) == DatiBaroLink(a-1,1)
                DatiBaroLink(a,:) = [];
                r = r-1;
            else
                a = a+1;
            end
        end
        text = ['Barometer data conversion for chain ' IDcentralina ' - ' DTcatena ' done'];
        fprintf(fileID,fmt,text);
    end
    if NuovoZeroBL == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiBaroLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiBaroLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiBaroLink;
        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 = DatiBaroLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
elseif yesBL == 0 && yesPL == 0
        DatiBaroLink = [];
        ErrBaroLink = [];
        wardat = 'lettura function: there are not Baro Link';
        fprintf(fileID,fmt,wardat);
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
    RawDataFile = ['' IDcentralina '-' DTcatena '-Load-RawData.csv']; % Specifico per Load Link
    NAN = 0;
    DIS = 0;
    while NAN == 0
        if datenum(datainiLL) == datenum(Data(1,1))
            tempoiniLL = char(Data(1,2));
        end
        NodeType = 'Load Link';
        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 UnitName = ''' IDcentralina ...
            ''' and  ToolNameID = ''' DTcatena ''' 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 UnitName = ''' IDcentralina ''' and ToolNameID = ''' ...
            DTcatena ''' 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; DAT2LL];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniLL);
        if 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
        [rd,~] = size(Ndate); % numero di dati successivi al primo giorno di calcolo
        [rt,~] = size(Ntempo); % numero di dati del primo giorno di calcolo
        % creo la matrice per i dati Load Link
        if saltoLL == 0
            if Check(1,2) > 1
                DatiLoadLink = cell(rd+rt,rLL);
            else
                DatiLoadLink = cell(rt,rLL);
            end
        else
            DatiLoadLink = cell(rd,rLL);
        end
        NLoadLink = cell2mat(NodoLoadLink(:,2));
        col = 1;
        ii = 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);
            comando = ['select Val0 from RawDataView where Date = ''' ...
                datainiLL ''' and Time >= ''' tempoiniLL ''' and UnitName = ''' IDcentralina ...
                ''' and  ToolNameID = ''' DTcatena ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoLL = curs.Data;
            % Step 2: Considero le date successive e scarico tutti i dati disponibili.
            comando = ['select Val0 from RawDataView where Date > ''' ...
                datainiLL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ...
                DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoLLd = curs.Data;
            % Concateno i dati relativi a Step 1 e 2 per il nodo ii-esimo.
            
            % 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) = DATnodoLL(:,:);
            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 = ['Node Load Link ' 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
            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 isfile(RawDataFile) == 1
                        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;
                            DIS = 0;
                            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
                    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)));
                idxT2 = 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)));
                idxU = find(strcmp('Unknown Error',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)));
                idxCE = find(strcmp('CH n. Er',DatiLoadLink(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);
                [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
                    % Trovo l'indice della cella contenenti una determinata stringa.
                    idxE = find(strcmp('Err1',DatiLoadLink(:,jj)));
                    idxT = find(strcmp('---',DatiLoadLink(:,jj)));
                    idxT2 = find(strcmp('-',DatiLoadLink(1,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

%%  Klino Link 
if  yesKL == 0 % non ci sono Klino Link 
    DatiKlinoLink = [];
    ErrKlinoLink = [];
    wardat = 'lettura function: there are not Klino Link!';
    fprintf(fileID,fmt,wardat); 
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-KL-RawData.csv']; % Generico per MUMS
    while NAN == 0
        if datenum(datainiKL) == datenum(Data(1,1))
            tempoiniKL = char(Data(1,2));
        end
        NodeType = 'Klino Link'; 
        NodeNumKL = num2str(cell2mat(NodoKlinoLink(1,2)));
        % 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 = ''' ...
            datainiKL ''' and Time >= ''' tempoiniKL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
            NodeType ''' and NodeNum = ''' NodeNumKL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniKL = curs.Data;
        Ntempo = DATiniKL;
        [r,c] = size(DATiniKL);
        saltoKL = 0;
        if  r==1 && c==1
            textdatKL = 'Warning: error reading Klino Link (control unit data)!';
            fprintf(fileID,fmt,textdatKL);
            saltoKL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... 
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumKL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2KL = curs.Data;
        Ndate = DAT2KL;
        if saltoKL == 1
           DATiniKL = DAT2KL;
        end
        Check = size(DAT2KL);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoKL == 0
                DATiniKL = [DATiniKL; curs.Data];
            end
        end   
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniKL);
        if cD ~=1
            T = [cell2mat(DATiniKL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniKL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniKL = T;
        else
            DATiniKL = [];
        end
            
        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoKL == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
                        || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
                    DatiKlinoLink = cell(rd+rt,4*rKL);
                    col = 4;
                elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                    DatiKlinoLink = cell(rd+rt,2*rKL);
                    col = 3;
                end
            else
                if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
                        || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
                    DatiKlinoLink = cell(rt,4*rKL);
                    col = 4;
                elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                    DatiKlinoLink = cell(rt,2*rKL);
                    col = 3;
                end
            end
        else
            if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
                    || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
                DatiKlinoLink = cell(rd,4*rKL);
                col = 4;
            elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                DatiKlinoLink = cell(rd,2*rKL);
                col = 3;
            end
        end
        NKlinoLink = cell2mat(NodoKlinoLink(:,2));
        
        s = 0;
        w = 0;
        while ii <= rKL    
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NKlinoLink(ii,1);
            nNodo = num2str(nN);
            if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') || isempty(NodoKlinoLink{1,4}) == 1
                comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' datainiKL ''' and Time >= ''' ...
                    tempoiniKL ''' and  ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKL = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date > ''' ...
                    datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKLd = curs.Data;
            elseif strcmp(NodoKlinoLink{1,4} ,'g') == 1
                comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' datainiKL ''' and Time >= ''' ...
                    tempoiniKL ''' and  ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKL = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ...
                    datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKLd = curs.Data;
            elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' datainiKL ''' and Time >= ''' ...
                    tempoiniKL ''' and  ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKL = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ...
                    datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKLd = curs.Data;
            end
            s = s+1;
            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
            if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
                    || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g')
                ini_col = col-3;
            elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                ini_col = col-2;
            end
            if saltoKL == 0
                DatiKlinoLink(1:rt,ini_col:col) = DATnodoKL(:,:);
            else
                DatiKlinoLink(1:rd,ini_col:col) = DATnodoKLd(:,:);
            end
            
            [rn,~] = size(DATnodoKLd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoKLd(i,:) = DATnodoKLd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Klino Link ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end

              if Check(1,2) > 1
                 if saltoKL == 0
                    DatiKlinoLink(rt+1:rt+rd,ini_col:col) = DATnodoKLd(:,:);
                 end
              else
                  DatiKlinoLink = DatiKlinoLink(1:end,:);
              end
              okdatKL = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rKL) ' Klino Link nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatKL);
              ii = ii+1;
              if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
                      || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g')
                  col = col+4;
              elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                  col = col+3;
              end
        end
        if w == 0
            wardat = 'There are not warning for Klino 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(DatiKlinoLink); 
        ErrKlinoLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroKL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiKL));
            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',DatiKlinoLink(1,jj)));
            idxND = find(strcmp('No Data',DatiKlinoLink(1,jj)));
            idxT = find(strcmp('---',DatiKlinoLink(1,jj)));
            idxT2 = find(strcmp('-',DatiKlinoLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiKlinoLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiKlinoLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiKlinoLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiKlinoLink(1,jj)));
            idxN = find(strcmp('null',DatiKlinoLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Klino Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroKL == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiKL)+1 < now
                        datainiKL = datestr(datenum(datainiKL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesKL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiKlinoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrKlinoLink(1,jj) = 1;
                            wardat = 'Data of Klino Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                % Cerco i multipli di 4 per identificare le temperature
                if strcmp(NodoKlinoLink(1,4),'ADC') == 1 || strcmp(NodoKlinoLink{1,4} ,'null') == 1 ...
                        || isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
                    Int = jj/4;
                elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                    Int = rKL+1; % NON filtro mai
                end
                if floor(Int) == Int
                    % Controllo ampolle
                    if str2double(DatiKlinoLink(1,jj)) > 1000
                        if rDR==1 && cDR==1 || NuovoZeroKL == 0
                            NAN = 0;
                            ESCI = 1;
                            if datenum(datainiKL)+1 < now
                                datainiKL = datestr(datenum(datainiKL)+1,'yyyy-mm-dd');
                                break
                            else
                                yesKL = 0;
                            end
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
                                break
                            else
                                DatiKlinoLink(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                DatiKlinoLink(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                DatiKlinoLink(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                DatiKlinoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrKlinoLink(1,jj) = 1;
                                wardat = ['Data of Klino Link nodes corrected using Raw Data of reference Csv file. '...
                                    'MEMS was read as an electrolytic cell'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiKlinoLink(:,jj)));
                idxND = find(strcmp('No Data',DatiKlinoLink(:,jj)));
                idxT = find(strcmp('---',DatiKlinoLink(:,jj)));
                idxT2 = find(strcmp('-',DatiKlinoLink(:,jj)));
                idxE2 = find(strcmp('Err2',DatiKlinoLink(:,jj)));
                idxE255 = find(strcmp('Err255',DatiKlinoLink(:,jj)));
                idxD = find(strcmp('DMUXe',DatiKlinoLink(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiKlinoLink(:,jj)));
                idxN = find(strcmp('null',DatiKlinoLink(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiKlinoLink(indice,jj) = DatiKlinoLink(indice-1,jj);
                        ErrKlinoLink(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                for ii = 2:r
                    % Cerco i multipli di 4 per identificare le temperature
                    if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') || isempty(NodoKlinoLink{1,4}) == 1
                        Int = jj/4;
                    elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
                        Int = rKL+1; % NON filtro mai
                    end
                    if floor(Int) == Int
                        % Controllo ampolle
                        if str2double(DatiKlinoLink(ii,jj)) > 1000
                            DatiKlinoLink(ii,jj-3:jj) = DatiKlinoLink(ii-1,jj-3:jj);
                            ErrKlinoLink(ii,jj) = 1;
                            wardat = ['Data of Klino Link nodes corrected using Raw Data of reference Csv file. '...
                                'MEMS was read as an electrolytic cell'];
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        end
                    end
                end
                if ESCI == 1
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiKlinoLink(nnn,jj)));
                    if check == 1
                        DatiKlinoLink(nnn,jj) = DatiKlinoLink(nnn-1,jj);
                        ErrKlinoLink(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Klino Link data done!']; 
        fprintf(fileID,fmt,corrdat);
        DatiKlinoLink = [DATiniKL str2double(DatiKlinoLink)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiKlinoLink(a,1) == DatiKlinoLink(a-1,1)
               DatiKlinoLink(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroKL == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiKlinoLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiKlinoLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiKlinoLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiKlinoLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiKlinoLink;
        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 = DatiKlinoLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

%%  Klino Link HR
if  yesKLHR == 0 % non ci sono Klino Link HR
    DatiKlinoLinkHR = [];
    ErrKlinoLinkHR = [];
    wardat = 'lettura function: there are not Klino Link HR!';
    fprintf(fileID,fmt,wardat); 
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-KLHR-RawData.csv'];
    while NAN == 0
        if datenum(datainiKLHR) == datenum(Data(1,1))
            tempoiniKLHR = char(Data(1,2));
        end
        NodeType = 'Klino Link HR'; 
        NodeNumKLHR = num2str(cell2mat(NodoKlinoLinkHR(1,2)));
        % 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 = ''' ...
            datainiKLHR ''' and Time >= ''' tempoiniKLHR ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
            NodeType ''' and NodeNum = ''' NodeNumKLHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniKLHR = curs.Data;
        Ntempo = DATiniKLHR;
        [r,c] = size(DATiniKLHR);
        saltoKLHR = 0;
        if  r==1 && c==1
            textdatKLHR = 'Warning: error reading Klino Link HR (control unit data)!';
            fprintf(fileID,fmt,textdatKLHR);
            saltoKLHR = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiKLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... 
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumKLHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2KLHR = curs.Data;
        Ndate = DAT2KLHR;
        if saltoKLHR == 1
           DATiniKLHR = DAT2KLHR;
        end
        Check = size(DAT2KLHR);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoKLHR == 0
                DATiniKLHR = [DATiniKLHR; curs.Data];
            end
        end   
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniKLHR);
        if cD ~=1
            T = [cell2mat(DATiniKLHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniKLHR(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniKLHR = T;
        else
            DATiniKLHR = [];
        end

        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoKLHR == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
                    DatiKlinoLinkHR = cell(rd+rt,3*rKLHR);
                else
                    DatiKlinoLinkHR = cell(rd+rt,6*rKLHR);
                end
            else
                if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
                    DatiKlinoLinkHR = cell(rt,3*rKLHR);
                else
                    DatiKlinoLinkHR = cell(rt,6*rKLHR);
                end
            end
        else
            if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
                DatiKlinoLinkHR = cell(rd,3*rKLHR);
            else
                DatiKlinoLinkHR = cell(rd,6*rKLHR);
            end
        end
        NKlinoLinkHR = cell2mat(NodoKlinoLinkHR(:,2));
        if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
            col = 3;
        else
            col = 6;
        end
        s = 0;
        w = 0;
        while ii <= rKLHR    
            nN = NKlinoLinkHR(rKLHR-s,1);
            nNodo = num2str(nN);
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
                 comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' datainiKLHR ''' and Time >= ''' ...
                     tempoiniKLHR ''' and  ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                     ''' and NodeType = ''' NodeType ''' and NodeNum ='  nNodo ''];
                 curs = exec(conn,comando);
                 curs = fetch(curs);
                 DATnodoKLHR = curs.Data;
                 % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                 comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ...
                     datainiKLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                     ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                 curs = exec(conn,comando);
                 curs = fetch(curs);
                 DATnodoKLHRd = curs.Data;
                 ini_col = col-2;
            else
                comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = '''...
                    datainiKLHR ''' and Time >= ''' tempoiniKLHR ''' and  ToolNameID = ''' DTcatena...
                    ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKLHR = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
                    datainiKLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoKLHRd = curs.Data;
                ini_col = col-5;
            end
            s = s+1;
            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
            
            if saltoKLHR == 0
                DatiKlinoLinkHR(1:rt,ini_col:col) = DATnodoKLHR(:,:);
            else
                DatiKlinoLinkHR(1:rd,ini_col:col) = DATnodoKLHRd(:,:);
            end
            
            [rn,~] = size(DATnodoKLHRd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoKLHRd(i,:) = DATnodoKLHRd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Klino Link HR ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            if Check(1,2) > 1
                if saltoKLHR == 0
                    DatiKlinoLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoKLHRd(:,:);
                end
            else
                DatiKlinoLinkHR = DatiKlinoLinkHR(1:end,:);
            end
            okdatKLHR = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rKLHR) ' Klino Link HR nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatKLHR);
            ii = ii+1;
            if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
                col = col+3;
            else
                col = col+6;
            end
        end
        wardat = 'There are not warning for Klino Link HR!';
        fprintf(fileID,fmt,wardat);
        if w == 0
            wardat = 'There are not warning for Klino 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(DatiKlinoLinkHR); 
        ErrKlinoLinkHR = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroKLHR == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiKLHR));
            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',DatiKlinoLinkHR(1,jj)));
            idxND = find(strcmp('No Data',DatiKlinoLinkHR(1,jj)));
            idxT = find(strcmp('---',DatiKlinoLinkHR(1,jj)));
            idxT2 = find(strcmp('-',DatiKlinoLinkHR(1,jj)));
            idxE2 = find(strcmp('Err2',DatiKlinoLinkHR(1,jj)));
            idxE255 = find(strcmp('Err255',DatiKlinoLinkHR(1,jj)));
            idxD = find(strcmp('DMUXe',DatiKlinoLinkHR(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiKlinoLinkHR(1,jj)));
            idxN = find(strcmp('null',DatiKlinoLinkHR(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Klino Link HR nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroKLHR == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiKLHR)+1 < now
                        datainiKLHR = datestr(datenum(datainiKLHR)+1,'yyyy-mm-dd');
                        break
                    else
                        yesKLHR = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiKLHR = datestr(datenum(datainiKLHR)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiKlinoLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrKlinoLinkHR(1,jj) = 1;
                            wardat = 'Data of Klino 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;
                            datainiKLHR = datestr(datenum(datainiKLHR)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                % Cerco i multipli di 6 per identificare le temperature
                if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
                else
                    Int = jj/6;
                    if floor(Int) == Int
                        % Controllo ampolle
                        if str2double(DatiKlinoLinkHR(1,jj)) < 500
                            if rDR==1 && cDR==1 || NuovoZeroKLHR == 0
                                NAN = 0;
                                ESCI = 1;
                                if datenum(datainiKLHR)+1 < now
                                    datainiKLHR = datestr(datenum(datainiKLHR)+1,'yyyy-mm-dd');
                                    break
                                else
                                    yesKLHR = 0;
                                end
                            else
                                if isempty(RawDate) == 1
                                    NAN = 0;
                                    ESCI = 1;
                                    if datenum(datainiKLHR)+1 < now
                                        datainiKLHR = datestr(datenum(datainiKLHR)+1,'yyyy-mm-dd');
                                        break
                                    else
                                        yesKLHR = 0;
                                    end
                                else
                                    DatiKlinoLinkHR(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
                                    DatiKlinoLinkHR(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
                                    DatiKlinoLinkHR(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                    DatiKlinoLinkHR(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                    DatiKlinoLinkHR(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                    DatiKlinoLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                    ErrKlinoLinkHR(1,jj) = 1;
                                    wardat = ['Data of Klino Link HR nodes corrected using Raw Data of reference Csv file. '...
                                        'Electrolytic cell was read as the corresponding MEMS'];
                                    fprintf(fileID,fmt,wardat);
                                    Ncorr = Ncorr+ri;
                                    NAN = 1;
                                end
                            end
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiKlinoLinkHR(:,jj)));
                idxND = find(strcmp('No Data',DatiKlinoLinkHR(:,jj)));
                idxT = find(strcmp('---',DatiKlinoLinkHR(:,jj)));
                idxT2 = find(strcmp('-',DatiKlinoLinkHR(:,jj)));
                idxE2 = find(strcmp('Err2',DatiKlinoLinkHR(:,jj)));
                idxE255 = find(strcmp('Err255',DatiKlinoLinkHR(:,jj)));
                idxD = find(strcmp('DMUXe',DatiKlinoLinkHR(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiKlinoLinkHR(:,jj)));
                idxN = find(strcmp('null',DatiKlinoLinkHR(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiKLHR = datestr(datenum(datainiKLHR)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiKlinoLinkHR(indice,jj) = DatiKlinoLinkHR(indice-1,jj);
                        ErrKlinoLinkHR(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
                else
                    for ii = 2:r
                        % Cerco i multipli di 6 per identificare le temperature
                        Int = jj/6;
                        if floor(Int) == Int
                            % Controllo ampolle
                            if str2double(DatiKlinoLinkHR(ii,jj)) < 500
                                DatiKlinoLinkHR(ii,jj-5:jj) = DatiKlinoLinkHR(ii-1,jj-5:jj);
                                ErrKlinoLinkHR(ii,jj) = 1;
                                wardat = ['Data of Klino Link HR nodes corrected using Raw Data of reference Csv file. '...
                                    'Electrolytic cell was read as a MEMS'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
                if ESCI == 1
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiKlinoLinkHR(nnn,jj)));
                    if check == 1
                        DatiKlinoLinkHR(nnn,jj) = DatiKlinoLinkHR(nnn-1,jj);
                        ErrKlinoLinkHR(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Klino Link HR data done!']; 
        fprintf(fileID,fmt,corrdat);
        DatiKlinoLinkHR = [DATiniKLHR str2double(DatiKlinoLinkHR)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiKlinoLinkHR(a,1) == DatiKlinoLinkHR(a-1,1)
               DatiKlinoLinkHR(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroKLHR == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiKlinoLinkHR(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiKlinoLinkHR(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiKlinoLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiKlinoLinkHR(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiKlinoLinkHR;
        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 = DatiKlinoLinkHR;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

%%  Rain Link
if  yesRL == 0 % Non ci sono Rain Link
    DatiRainLink = [];
    ErrRainLink = [];
    wardat = 'lettura function: there are not Rain Link';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-RL-RawData.csv']; % Generico per MUMS
    while NAN == 0
        if datenum(datainiRL) == datenum(Data(1,1))
            tempoiniRL = char(Data(1,2));
        end
        NodeType = 'Rain Link';
        NodeNumRL = num2str(cell2mat(NodoRainLink(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 = ''' ...
            datainiRL ''' and Time >= ''' tempoiniRL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumRL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniRL = curs.Data;
        Ntempo = DATiniRL;
        [r,c] = size(DATiniRL);
        saltoRL = 0;
        if  r==1 && c==1
            textdatRL = 'Warning: error reading Rain Link (control unit data)!';
            fprintf(fileID,fmt,textdatRL);
            saltoRL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiRL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumRL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2RL = curs.Data;
        Ndate = DAT2RL;
        if saltoRL == 1
            DATiniRL = DAT2RL;
        end
        Check = size(DAT2RL);
        if Check(1,2) > 1 % ho superato il primo giorno
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoRL == 0
                DATiniRL = [DATiniRL; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniRL);
        if cD ~=1
            T = [cell2mat(DATiniRL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniRL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniRL = T;
        else
            DATiniRL = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoRL == 0
            if Check(1,2) > 1 % ho superato il primo giorno
                DatiRainLink = cell(rd+rt,1*rRL);
            else
                DatiRainLink = cell(rt,1*rRL);
            end
        else
            DatiRainLink = cell(rd,1*rRL);
        end
        NRainLink = cell2mat(NodoRainLink(:,2));
        col = 1;
        w = 0;
        while ii <= rRL
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NRainLink(ii,1);
            nNodo = num2str(nN);
            comando = ['select Val0 from RawDataView where Date = ''' ...
                datainiRL ''' and Time >= ''' tempoiniRL ''' and  ToolNameID = ''' DTcatena...
                ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoRL = curs.Data;
            % Step 2: Considero le date successive e scarico tutti i dati disponibili.
            comando = ['select Val0 from RawDataView where Date > ''' ...
                datainiRL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoRLd = 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 saltoRL == 0
                DatiRainLink(1:rt,col) = DATnodoRL(:,:);
            else
                DatiRainLink(1:rd,col) = DATnodoRLd(:,:);
            end
            
            [rn,~] = size(DATnodoRLd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoRLd(i,:) = DATnodoRLd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Rain Link ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            if Check(1,2) > 1
                if saltoRL == 0
                    DatiRainLink(rt+1:rt+rd,col) = DATnodoRLd(:,:);
                end
            else
                DatiRainLink = DatiRainLink(1:end,:);
            end
            okdatRL = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rRL) ' Rain Link nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatRL);
            ii = ii+1;
            col = col+1;
        end
        if w == 0
            wardat = 'There are not warning for Rain 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(DatiRainLink);
        ErrRainLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroRL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiRL));
            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',DatiRainLink(1,jj)));
            idxND = find(strcmp('No Data',DatiRainLink(1,jj)));
            idxT = find(strcmp('---',DatiRainLink(1,jj)));
            idxT2 = find(strcmp('-',DatiRainLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiRainLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiRainLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiRainLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiRainLink(1,jj)));
            idxN = find(strcmp('null',DatiRainLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Rain Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroRL == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiRL)+1 < now
                        datainiRL = datestr(datenum(datainiRL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesRL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiRL = datestr(datenum(datainiRL)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiRainLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrRainLink(1,jj) = 1;
                            wardat = 'Data of Rain Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiRL = datestr(datenum(datainiRL)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiRainLink(:,jj)));
                idxND = find(strcmp('No Data',DatiRainLink(:,jj)));
                idxT = find(strcmp('---',DatiRainLink(:,jj)));
                idxT2 = find(strcmp('-',DatiRainLink(:,jj)));
                idxE2 = find(strcmp('Err2',DatiRainLink(:,jj)));
                idxE255 = find(strcmp('Err255',DatiRainLink(:,jj)));
                idxD = find(strcmp('DMUXe',DatiRainLink(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiRainLink(:,jj)));
                idxN = find(strcmp('null',DatiRainLink(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiRL = datestr(datenum(datainiRL)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiRainLink(indice,jj) = DatiRainLink(indice-1,jj);
                        ErrRainLink(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(DatiRainLink(nnn,jj)));
                    if check == 1
                        DatiRainLink(nnn,jj) = DatiRainLink(nnn-1,jj);
                        ErrRainLink(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Rain Link data done!'];
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiRainLink = [DATiniRL str2double(DatiRainLink)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiRainLink(a,1) == DatiRainLink(a-1,1)
                DatiRainLink(a,:) = [];
                r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroRL == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiRainLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiRainLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiRainLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiRainLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiRainLink;
        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 = DatiRainLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

%%  Therm Link
if  yesThL == 0 % Non ci sono Therm Link
    DatiThermLink = [];
    ErrThermLink = [];
    wardat = 'lettura function: there are not Therm Link';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-ThL-RawData.csv']; % Generico per MUMS
    while NAN == 0
        if datenum(datainiThL) == datenum(Data(1,1))
            tempoiniThL = char(Data(1,2));
        end
        NodeType = 'Therm Link HR';
        NodeNumThL = num2str(cell2mat(NodoThermLink(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 = ''' ...
            datainiThL ''' and Time >= ''' tempoiniThL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumThL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniThL = curs.Data;
        Ntempo = DATiniThL;
        [r,c] = size(DATiniThL);
        saltoThL = 0;
        if  r==1 && c==1
            textdatThL = 'Warning: error reading Therm Link (control unit data)!';
            fprintf(fileID,fmt,textdatThL);
            saltoThL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiThL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumThL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2ThL = curs.Data;
        Ndate = DAT2ThL;
        if saltoThL == 1
            DATiniThL = DAT2ThL;
        end
        Check = size(DAT2ThL);
        if Check(1,2) > 1 % ho superato il primo giorno
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoThL == 0
                DATiniThL = [DATiniThL; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniThL);
        if cD ~=1
            T = [cell2mat(DATiniThL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniThL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniThL = T;
        else
            DATiniThL = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoThL == 0
            if Check(1,2) > 1 % ho superato il primo giorno
                DatiThermLink = cell(rd+rt,1*rThL);
            else
                DatiThermLink = cell(rt,1*rThL);
            end
        else
            DatiThermLink = cell(rd,1*rThL);
        end
        NThermLink = cell2mat(NodoThermLink(:,2));
        col = 1;
        w = 0;
        while ii <= rThL
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NThermLink(ii,1);
            nNodo = num2str(nN);
            comando = ['select Val0 from RawDataView where Date = ''' ...
                datainiThL ''' and Time >= ''' tempoiniThL ''' and  ToolNameID = ''' DTcatena...
                ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoThL = curs.Data;
            % Step 2: Considero le date successive e scarico tutti i dati disponibili.
            comando = ['select Val0 from RawDataView where Date > ''' ...
                datainiThL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoThLd = 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 saltoThL == 0
                DatiThermLink(1:rt,col) = DATnodoThL(:,:);
            else
                DatiThermLink(1:rd,col) = DATnodoThLd(:,:);
            end
            
            [rn,~] = size(DATnodoThLd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoThLd(i,:) = DATnodoThLd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Therm Link ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            if Check(1,2) > 1
                if saltoThL == 0
                    DatiThermLink(rt+1:rt+rd,col) = DATnodoThLd(:,:);
                end
            else
                DatiThermLink = DatiThermLink(1:end,:);
            end
            okdatThL = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rThL) ' Therm Link nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatThL);
            ii = ii+1;
            col = col+1;
        end
        wardat = 'There are not warning for Therm Link!';
        fprintf(fileID,fmt,wardat);
        if w == 0
            wardat = 'There are not warning for Therm 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(DatiThermLink);
        ErrThermLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroThL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiThL));
            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',DatiThermLink(1,jj)));
            idxND = find(strcmp('No Data',DatiThermLink(1,jj)));
            idxT = find(strcmp('---',DatiThermLink(1,jj)));
            idxT2 = find(strcmp('-',DatiThermLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiThermLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiThermLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiThermLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiThermLink(1,jj)));
            idxN = find(strcmp('null',DatiThermLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 Therm Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroThL == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiThL)+1 < now
                        datainiThL = datestr(datenum(datainiThL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesThL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiThL = datestr(datenum(datainiThL)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiThermLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrThermLink(1,jj) = 1;
                            wardat = 'Data of Therm Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiThL = datestr(datenum(datainiThL)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiThermLink(:,jj)));
                idxND = find(strcmp('No Data',DatiThermLink(:,jj)));
                idxT = find(strcmp('---',DatiThermLink(:,jj)));
                idxT2 = find(strcmp('-',DatiThermLink(:,jj)));
                idxE2 = find(strcmp('Err2',DatiThermLink(:,jj)));
                idxE255 = find(strcmp('Err255',DatiThermLink(:,jj)));
                idxD = find(strcmp('DMUXe',DatiThermLink(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiThermLink(:,jj)));
                idxN = find(strcmp('null',DatiThermLink(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiThL = datestr(datenum(datainiThL)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiThermLink(indice,jj) = DatiThermLink(indice-1,jj);
                        ErrThermLink(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(DatiThermLink(nnn,jj)));
                    if check == 1
                        DatiThermLink(nnn,jj) = DatiThermLink(nnn-1,jj);
                        ErrThermLink(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of Therm Link data done!'];
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiThermLink = [DATiniThL str2double(DatiThermLink)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiThermLink(a,1) == DatiThermLink(a-1,1)
                DatiThermLink(a,:) = [];
                r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroThL == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiThermLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiThermLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiThermLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiThermLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiThermLink;
        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 = DatiThermLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

%%  PT100 Link
if  yesPT100 == 0 % Non ci sono PT100 Link
    DatiPT100Link = [];
    ErrPT100Link = [];
    wardat = 'lettura function: there are not PT100 Link';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-PT100-RawData.csv'];
    DIS = 0;
    while NAN == 0
        if datenum(datainiPT100) == datenum(Data(1,1))
            tempoiniPT100 = char(Data(1,2));
        end
        NodeType = 'PT100 Link';
        NodeNumPT100 = num2str(cell2mat(NodoPT100Link(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 = ''' ...
            datainiPT100 ''' and Time >= ''' tempoiniPT100 ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumPT100 ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniPT100 = curs.Data;
        Ntempo = DATiniPT100;
        [r,c] = size(DATiniPT100);
        saltoPT100 = 0;
        if  r==1 && c==1
            textdatPT100 = 'Warning: error reading PT100 Link (control unit data)!';
            fprintf(fileID,fmt,textdatPT100);
            saltoPT100 = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiPT100 ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumPT100 ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2PT100 = curs.Data;
        Ndate = DAT2PT100;
        if saltoPT100 == 1
            DATiniPT100 = DAT2PT100;
        end
        Check = size(DAT2PT100);
        if Check(1,2) > 1 % ho superato il primo giorno
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoPT100 == 0
                DATiniPT100 = [DATiniPT100; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniPT100);
        if cD ~=1
            T = [cell2mat(DATiniPT100(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPT100(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniPT100 = T;
        else
            DATiniPT100 = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoPT100 == 0
            if Check(1,2) > 1 % ho superato il primo giorno
                DatiPT100Link = cell(rd+rt,1*rPT100);
            else
                DatiPT100Link = cell(rt,1*rPT100);
            end
        else
            DatiPT100Link = cell(rd,1*rPT100);
        end
        NPT100Link = cell2mat(NodoPT100Link(:,2));
        col = 1;
        w = 0;
        while ii <= rPT100
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NPT100Link(ii,1);
            nNodo = num2str(nN);
            comando = ['select Val0 from RawDataView where Date = ''' ...
                datainiPT100 ''' and Time >= ''' tempoiniPT100 ''' and  ToolNameID = ''' DTcatena...
                ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoPT100 = curs.Data;
            % Step 2: Considero le date successive e scarico tutti i dati disponibili.
            comando = ['select Val0 from RawDataView where Date > ''' ...
                datainiPT100 ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoPT100d = 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 saltoPT100 == 0
                DatiPT100Link(1:rt,col) = DATnodoPT100(:,:);
            else
                DatiPT100Link(1:rd,col) = DATnodoPT100d(:,:);
            end
            
            [rn,~] = size(DATnodoPT100d); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoPT100d(i,:) = DATnodoPT100d(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node PT100 Link ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            if Check(1,2) > 1
                if saltoPT100 == 0
                    DatiPT100Link(rt+1:rt+rd,col) = DATnodoPT100d(:,:);
                end
            else
                DatiPT100Link = DatiPT100Link(1:end,:);
            end
            okdatPT100 = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rPT100) ' PT100 Link nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatPT100);
            ii = ii+1;
            col = col+1;
        end
        if w == 0
            wardat = 'There are not warning for PT100 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(DatiPT100Link);
        ErrPT100Link = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroPT100 == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiPT100));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
        end
        for jj=1:c
            if strcmp('Dis.',DatiPT100Link(1,jj)) == 1
                for dis = 2:r
                    if strcmp('Dis.',DatiPT100Link(dis,jj)) == 0
                       DatiPT100Link = DatiPT100Link(dis:end,:);
                       DATiniPT100 = DATiniPT100(dis:end,:);
                       [r,c] = size(DatiPT100Link);
                       break
                    elseif isfile(RawDataFile) == 1
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiPT100Link(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrPT100Link(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;
                            DIS = 0;
                            break
                        elseif dis == r
                            NAN = 0;
                            DIS = 1;
                            if datenum(datainiPT100)+1 < now
                                datainiPT100 = datestr(datenum(datainiPT100)+1,'yyyy-mm-dd');
                                break
                            else
                                yesPT100 = 0;
                            end
                        end
                    elseif dis == r
                        NAN = 0;
                        DIS = 1;
                        if datenum(datainiPT100)+1 < now
                            datainiPT100 = datestr(datenum(datainiPT100)+1,'yyyy-mm-dd');
                            break
                        else
                            yesPT100 = 0;
                        end
                    end
                end
            end
        end
        if DIS ~= 1 && yesPT100 == 1
            % --- Codice per il primo dato ---
            for jj=1:c
                % --- Codice per il primo dato ---
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiPT100Link(1,jj)));
                idxT = find(strcmp('---',DatiPT100Link(1,jj)));
                idxT2 = find(strcmp('-',DatiPT100Link(1,jj)));
                idxE2 = find(strcmp('Err2',DatiPT100Link(1,jj)));
                idxE255 = find(strcmp('Err255',DatiPT100Link(1,jj)));
                idxD = find(strcmp('DMUXe',DatiPT100Link(1,jj)));
                idxE1F = find(strcmp('Err1File',DatiPT100Link(1,jj)));
                idxN = find(strcmp('null',DatiPT100Link(1,jj)));
                idxRX = find(strcmp('No RX',DatiPT100Link(1,jj)));
                idxI = find(strcmp('id Error',DatiPT100Link(1,jj)));
                idxM = find(strcmp('MUX id Error',DatiPT100Link(1,jj)));
                idxC = find(strcmp('CH n. Error',DatiPT100Link(1,jj)));
                idxC2 = find(strcmp('CH n. Er',DatiPT100Link(1,jj)));
                idxU = find(strcmp('Unknown Error',DatiPT100Link(1,jj)));
                idxMC = find(strcmp('MsgCorrup',DatiPT100Link(1,jj)));
                idxNS = find(strcmp('NotSupp',DatiPT100Link(1,jj)));
                idxU2 = find(strcmp('Unknown',DatiPT100Link(1,jj)));
                idxNA = find(strcmp('NotAv',DatiPT100Link(1,jj)));
                idxND = find(strcmp('No Data',DatiPT100Link(1,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                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,idxC2);
                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);
                if ri == 1
                    wardat = 'Warning on the correction of PT100 Link nodes: there are not data at the beginning of the array!';
                    fprintf(fileID,fmt,wardat);
                    if rDR==1 && cDR==1 || NuovoZeroPT100 == 0 % il file non è mai stato scritto, cerco la data precedente
                        NAN = 0;
                        ESCI = 1;
                        if datenum(datainiPT100)+1 < now
                            datainiPT100 = datestr(datenum(datainiPT100)+1,'yyyy-mm-dd');
                            break
                        else
                            yesPT100 = 0;
                        end
                    else
                        if isempty(RawDate) == 1
                            NAN = 0;
                            ESCI = 1;
                            datainiPT100 = datestr(datenum(datainiPT100)-1,'yyyy-mm-dd');
                            break
                        else
                            if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                                DatiPT100Link(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrPT100Link(1,jj) = 1;
                                wardat = 'Data of PT100 Link nodes corrected using Raw Data of reference Csv file.';
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            else
                                NAN = 0;
                                ESCI = 1;
                                datainiPT100 = datestr(datenum(datainiPT100)-1,'yyyy-mm-dd');
                                break
                            end
                        end
                    end
                end
            end
            if ESCI == 0
                for jj = 1:c
                    % Trovo l'indice della cella contenenti una determinata stringa.
                    idxE = find(strcmp('Err1',DatiPT100Link(:,jj)));
                    idxT = find(strcmp('---',DatiPT100Link(:,jj)));
                    idxT2 = find(strcmp('-',DatiPT100Link(:,jj)));
                    idxE2 = find(strcmp('Err2',DatiPT100Link(:,jj)));
                    idxE255 = find(strcmp('Err255',DatiPT100Link(:,jj)));
                    idxD = find(strcmp('DMUXe',DatiPT100Link(:,jj)));
                    idxE1F = find(strcmp('Err1File',DatiPT100Link(:,jj)));
                    idxN = find(strcmp('null',DatiPT100Link(:,jj)));
                    idxRX = find(strcmp('No RX',DatiPT100Link(:,jj)));
                    idxI = find(strcmp('id Error',DatiPT100Link(:,jj)));
                    idxM = find(strcmp('MUX id Error',DatiPT100Link(:,jj)));
                    idxC = find(strcmp('CH n. Error',DatiPT100Link(:,jj)));
                    idxC2 = find(strcmp('CH n. Er',DatiPT100Link(:,jj)));
                    idxU = find(strcmp('Unknown Error',DatiPT100Link(:,jj)));
                    idxMC = find(strcmp('MsgCorrup',DatiPT100Link(:,jj)));
                    idxNS = find(strcmp('NotSupp',DatiPT100Link(:,jj)));
                    idxU2 = find(strcmp('Unknown',DatiPT100Link(:,jj)));
                    idxNA = find(strcmp('NotAv',DatiPT100Link(:,jj)));
                    idxND = find(strcmp('No Data',DatiPT100Link(:,jj)));
                    idxDis = find(strcmp('Dis.',DatiPT100Link(:,jj)));
                    idx = union(idxE,idxT);
                    idx = union(idx,idxT2);
                    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,idxC2);
                    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
                            NAN = 0;
                            ESCI = 1;
                            datainiPT100 = datestr(datenum(datainiPT100)-1,'yyyy-mm-dd');
                            break
                        else
                            DatiPT100Link(indice,jj) = DatiPT100Link(indice-1,jj);
                            ErrPT100Link(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(DatiPT100Link(nnn,jj)));
                        if check == 1
                            DatiPT100Link(nnn,jj) = DatiPT100Link(nnn-1,jj);
                            ErrPT100Link(nnn,jj) = 1;
                            Ncorr = Ncorr+ri;
                        end
                    end
                end
                corrdat = ['' num2str(Ncorr) ' corrections of PT100 Link data done!'];
                fprintf(fileID,fmt,corrdat);
                % Concateno informazioni generali e/o letture dai nodi.
                DatiPT100Link = [DATiniPT100 str2double(DatiPT100Link)];
                % Elimino eventuali date doppie
                a = 2;
                while a <= r
                    if DatiPT100Link(a,1) == DatiPT100Link(a-1,1)
                        DatiPT100Link(a,:) = [];
                        r = r-1;
                    else
                        a = a+1;
                    end
                end
            end
        end
    end
    if NuovoZeroPT100 == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiPT100Link(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiPT100Link(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiPT100Link(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiPT100Link(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiPT100Link;
        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 = DatiPT100Link;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

%%  In Place Link
if  yesIPL == 0 % Non ci sono In Place Link
    DatiInPlaceLink = [];
    ErrInPlaceLink = [];
    wardat = 'lettura function: there are not InPlace Link';
    fprintf(fileID,fmt,wardat);
else
    RawDataFile = ['' IDcentralina '-' DTcatena '-IPL-RawData.csv'];
    NAN = 0;
    while NAN == 0
        if datenum(datainiIPL) == datenum(Data(1,1))
            tempoiniIPL = char(Data(1,2));
        end
        if strcmp(DTcatenaRif,'DT0111 IPI') || strcmp(DTcatenaRif,'DT0112 IPI') || ...
                strcmp(DTcatenaRif,'DT0113 IPI') || strcmp(DTcatenaRif,'DT0114 IPI')
            NodeType = 'Tilt Link';
        else
            NodeType = 'In Place Link';
        end
        NodeNumIPL = num2str(cell2mat(NodoInPlaceLink(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 = ''' ...
            datainiIPL ''' and Time >= ''' tempoiniIPL ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumIPL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniIPL = curs.Data;
        Ntempo = DATiniIPL;
        [r,c] = size(DATiniIPL);
        saltoIPL = 0;
        if  r==1 && c==1
            textdatIPL = 'Warning: error reading In Place Link (control unit data)!';
            fprintf(fileID,fmt,textdatIPL);
            saltoIPL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiIPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumIPL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2IPL = curs.Data;
        Ndate = DAT2IPL;
        if saltoIPL == 1
           DATiniIPL = DAT2IPL;
        end
        Check = size(DAT2IPL);
        if Check(1,2) > 1 % ho superato il primo giorno  
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoIPL == 0
                DATiniIPL = [DATiniIPL; DAT2IPL];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniIPL);
        if cD ~=1
            T = [cell2mat(DATiniIPL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniIPL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniIPL = T;
        else
            DATiniIPL = [];
        end

        % Scarico dati relativi ai singoli nodi
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoIPL == 0
            if Check(1,2) > 1 % ho superato il primo giorno 
                DatiInPlaceLink = cell(rd+rt,7*rTL);
            else
               DatiInPlaceLink = cell(rt,7*rTL);
            end
        else
            DatiInPlaceLink = cell(rd,7*rTL);
        end
        NInPlaceLink = cell2mat(NodoInPlaceLink(:,2));
        ii = 1;
        col = 7;
        w = 0;
        while ii <= rIPL         
        % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, 
        % ma limitandomi a quelli registrati nel corso di quella singola giornata;
              nN = NInPlaceLink(ii,1);
              if strcmp(DTcatena,'DT0116') && strcmp(IDcentralina,'ID0075')
                  if nN == 9
                      nN = 17;
                  end
              elseif strcmp(DTcatena,'DT0117') && strcmp(IDcentralina,'ID0075')
                   if nN == 10
                      nN = 3;
                  end
              end
              nNodo = num2str(nN);
              comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
                  datainiIPL ''' and Time >= ''' tempoiniIPL ''' and  ToolNameID = ''' DTcatena...
                  ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                  NodeType ''' and NodeNum ='  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoIPL = curs.Data;
        % Step 2: Considero le date successive e scarico tutti i dati disponibili.
              comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
                datainiIPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                ''' and NodeType = ''' NodeType ''' and NodeNum = '  nNodo ''];
              curs = exec(conn,comando);
              curs = fetch(curs);
              DATnodoIPLd = 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-6;
              if saltoIPL == 0
                 DatiInPlaceLink(1:rt,ini_col:col) = DATnodoIPL(:,:);
              else
                  DatiInPlaceLink(1:rd,ini_col:col) = DATnodoIPLd(:,:);
              end

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

              if Check(1,2) > 1
                 if saltoIPL == 0
                    DatiInPlaceLink(rt+1:rt+rd,ini_col:col) = DATnodoIPLd(:,:);
                 end
              else
                  DatiInPlaceLink = DatiInPlaceLink(1:end,:);
              end
              okdatIPL = ['Data of node number ' num2str(ii) ' of ' ...
                  num2str(rIPL) ' In Place Link nodes downloaded correctly'];
              fprintf(fileID,fmt,okdatIPL);
              ii = ii+1;
              col = col+7;
        end
        if w == 0
            wardat = 'There are not warning for In Place 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(DatiInPlaceLink); 
        ErrInPlaceLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroIPL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiIPL));
            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',DatiInPlaceLink(1,jj)));
            idxND = find(strcmp('No Data',DatiInPlaceLink(1,jj)));
            idxT = find(strcmp('---',DatiInPlaceLink(1,jj)));
            idxT2 = find(strcmp('-',DatiInPlaceLink(1,jj)));
            idxE2 = find(strcmp('Err2',DatiInPlaceLink(1,jj)));
            idxE255 = find(strcmp('Err255',DatiInPlaceLink(1,jj)));
            idxD = find(strcmp('DMUXe',DatiInPlaceLink(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiInPlaceLink(1,jj)));
            idxN = find(strcmp('null',DatiInPlaceLink(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 In Place Link nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroIPL == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiIPL)+1 < now
                        datainiIPL = datestr(datenum(datainiIPL)+1,'yyyy-mm-dd');
                        break
                    else
                        yesIPL = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiInPlaceLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrInPlaceLink(1,jj) = 1;
                            wardat = 'Data of In Place Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        else
                            NAN = 0;
                            ESCI = 1;
                            datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                % Cerco i multipli di 7 per identificare le temperature
                Int = jj/7;
                if floor(Int) == Int
                    % Controllo ampolle
                    if str2double(DatiInPlaceLink(1,jj)) > 1000
                        if rDR==1 && cDR==1 || NuovoZeroIPL == 0
                            NAN = 0;
                            ESCI = 1;
                            if datenum(datainiIPL)+1 < now
                                datainiIPL = datestr(datenum(datainiIPL)+1,'yyyy-mm-dd');
                                break
                            else
                                yesIPL = 0;
                            end
                        else
                            if isempty(RawDate) == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
                                break
                            else
                                DatiInPlaceLink(1,jj-6) = cellstr(num2str(DatiRaw(RawDate(end),jj-5)));
                                DatiInPlaceLink(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
                                DatiInPlaceLink(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
                                DatiInPlaceLink(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                DatiInPlaceLink(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                DatiInPlaceLink(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                DatiInPlaceLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrInPlaceLink(1,jj) = 1;
                                wardat = ['Data of In Place Link nodes corrected using Raw Data of reference Csv file. '...
                                    'MEMS was read as an electrolytic cell'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            end
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiInPlaceLink(:,jj)));
                idxND = find(strcmp('No Data',DatiInPlaceLink(:,jj)));
                idxT = find(strcmp('---',DatiInPlaceLink(:,jj)));
                idxT2 = find(strcmp('-',DatiInPlaceLink(:,jj)));
                idxE2 = find(strcmp('Err2',DatiInPlaceLink(:,jj)));
                idxE255 = find(strcmp('Err255',DatiInPlaceLink(:,jj)));
                idxD = find(strcmp('DMUXe',DatiInPlaceLink(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiInPlaceLink(:,jj)));
                idxN = find(strcmp('null',DatiInPlaceLink(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiInPlaceLink(indice,jj) = DatiInPlaceLink(indice-1,jj);
                        ErrInPlaceLink(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                for ii = 2:r
                    % Cerco i multipli di 7 per identificare le temperature
                    Int = jj/7;
                    if floor(Int) == Int
                        % Controllo ampolle
                        if str2double(DatiInPlaceLink(ii,jj)) > 1000
                            DatiInPlaceLink(ii,jj-6:jj) = DatiInPlaceLink(ii-1,jj-6:jj);
                            ErrInPlaceLink(ii,jj) = 1;
                            wardat = ['Data of In Place Link nodes corrected using Raw Data of reference Csv file. '...
                                'MEMS was read as an electrolytic cell'];
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        end
                    end
                end
                if ESCI == 1
                    NAN = 0;
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r % nodi
                    check = isnan(cell2mat(DatiInPlaceLink(nnn,jj)));
                    if check == 1
                        DatiInPlaceLink(nnn,jj) = DatiInPlaceLink(nnn-1,jj);
                        ErrInPlaceLink(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of In Place Link data done!']; 
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiInPlaceLink = [DATiniIPL str2double(DatiInPlaceLink)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiInPlaceLink(a,1) == DatiInPlaceLink(a-1,1)
               DatiInPlaceLink(a,:) = [];
               r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroIPL == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiInPlaceLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiInPlaceLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiInPlaceLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiInPlaceLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiInPlaceLink;
        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 = DatiInPlaceLink;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end  

%%  In Place Link HR
if  yesIPLHR == 0 % Non ci sono In Place Link HR
    DatiInPlaceLinkHR = [];
    ErrInPlaceLinkHR = [];
    wardat = 'lettura function: there are not In Place Link HR';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-IPLHR-RawData.csv'];
    while NAN == 0
        if datenum(datainiIPLHR) == datenum(Data(1,1))
            tempoiniIPLHR = char(Data(1,2));
        end
        NodeType = 'In Place Link HR';
        NodeNumIPLHR = num2str(cell2mat(NodoInPlaceLinkHR(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 = ''' ...
            datainiIPLHR ''' and Time >= ''' tempoiniIPLHR ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumIPLHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniIPLHR = curs.Data;
        Ntempo = DATiniIPLHR;
        [r,c] = size(DATiniIPLHR);
        saltoIPLHR = 0;
        if  r==1 && c==1
            textdatIPLHR = 'Warning: error reading In Place Link HR (control unit data)!';
            fprintf(fileID,fmt,textdatIPLHR);
            saltoIPLHR = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiIPLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumIPLHR ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2IPLHR = curs.Data;
        Ndate = DAT2IPLHR;
        if saltoIPLHR == 1
            DATiniIPLHR = DAT2IPLHR;
        end
        Check = size(DAT2IPLHR);
        if Check(1,2) > 1 % ho superato il primo giorno
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoIPLHR == 0
                DATiniIPLHR = [DATiniIPLHR; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniIPLHR);
        if cD ~=1
            T = [cell2mat(DATiniIPLHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniIPLHR(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniIPLHR = T;
        else
            DATiniIPLHR = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoIPLHR == 0
            if Check(1,2) > 1 % ho superato il primo giorno
                if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
                    col = 6;
                    DatiInPlaceLinkHR = cell(rd+rt,col*rIPLHR);
                elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
                    col = 3;
                    DatiInPlaceLinkHR = cell(rd+rt,col*rIPLHR);
                end
            else
                if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
                    col = 6;
                    DatiInPlaceLinkHR = cell(rt,col*rIPLHR);
                elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
                    col = 3;
                    DatiInPlaceLinkHR = cell(rt,col*rIPLHR);
                end
            end
        else
            if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
                col = 6;
                DatiInPlaceLinkHR = cell(rd,col*rIPLHR);
            elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
                col = 3;
                DatiInPlaceLinkHR = cell(rd,col*rIPLHR);
            end
        end
        NInPlaceLinkHR = cell2mat(NodoInPlaceLinkHR(:,2));
        w = 0;
        while ii <= rIPLHR
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NInPlaceLinkHR(ii,1);
            if strcmp(DTcatena,'DT0116') && strcmp(IDcentralina,'ID0075')
                if nN == 6
                    nN = 1;
                elseif nN == 10
                    nN = 18;
                end
             elseif strcmp(DTcatena,'DT0117') && strcmp(IDcentralina,'ID0075')
                   if nN == 10
                      nN = 3;
                  end
            end
            nNodo = num2str(nN);
            if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || ...
                    isempty(NodoInPlaceLinkHR{1,4}) == 1
                comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
                    datainiIPLHR ''' and Time >= ''' tempoiniIPLHR ''' and  ToolNameID = ''' DTcatena...
                    ''' and UnitName = ''' IDcentralina ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoIPLHR = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
                    datainiIPLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoIPLHRd = curs.Data;
                ini_col = col-5;
            elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
                comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' ...
                    datainiIPLHR ''' and Time >= ''' tempoiniIPLHR ''' and  ToolNameID = ''' DTcatena...
                    ''' and UnitName = ''' IDcentralina ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoIPLHR = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ...
                    datainiIPLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoIPLHRd = curs.Data;
                ini_col = col-2;
            end
            
            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
            
            if saltoIPLHR == 0
                DatiInPlaceLinkHR(1:rt,ini_col:col) = DATnodoIPLHR(:,:);
            else
                DatiInPlaceLinkHR(1:rd,ini_col:col) = DATnodoIPLHRd(:,:);
            end
            
            [rn,~] = size(DATnodoIPLHRd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoIPLHRd(i,:) = DATnodoIPLHRd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node In Place Link HR ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end

            if Check(1,2) > 1
                if saltoIPLHR == 0
                    DatiInPlaceLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoIPLHRd(:,:);
                end
            else
                DatiInPlaceLinkHR = DatiInPlaceLinkHR(1:end,:);
            end
            okdatIPLHR= ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rIPLHR) ' In Place Link HR nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatIPLHR);
            ii = ii+1;
            if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || ...
                    isempty(NodoInPlaceLinkHR{1,4}) == 1
                col = col+6;
            elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
                col = col+3;
            end
        end
        if w == 0
            wardat = 'There are not warning for In Place 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(DatiInPlaceLinkHR);
        ErrInPlaceLinkHR = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroIPLHR == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiIPLHR));
            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',DatiInPlaceLinkHR(1,jj)));
            idxND = find(strcmp('No Data',DatiInPlaceLinkHR(1,jj)));
            idxT = find(strcmp('---',DatiInPlaceLinkHR(1,jj)));
            idxT2 = find(strcmp('-',DatiInPlaceLinkHR(1,jj)));
            idxE2 = find(strcmp('Err2',DatiInPlaceLinkHR(1,jj)));
            idxE255 = find(strcmp('Err255',DatiInPlaceLinkHR(1,jj)));
            idxD = find(strcmp('DMUXe',DatiInPlaceLinkHR(1,jj)));
            idxE1F = find(strcmp('Err1File',DatiInPlaceLinkHR(1,jj)));
            idxN = find(strcmp('null',DatiInPlaceLinkHR(1,jj)));
            idx = union(idxE,idxT);
            idx = union(idx,idxT2);
            idx = union(idx,idxND);
            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 In Place Link HR nodes: there are not data at the beginning of the array!';
                fprintf(fileID,fmt,wardat);
                if rDR==1 && cDR==1 || NuovoZeroIPLHR == 0 % il file non è mai stato scritto, cerco la data precedente
                    NAN = 0;
                    ESCI = 1;
                    if datenum(datainiIPLHR)+1 < now
                        datainiIPLHR = datestr(datenum(datainiIPLHR)+1,'yyyy-mm-dd');
                        break
                    else
                        yesIPLHR = 0;
                    end
                else
                    if isempty(RawDate) == 1
                        NAN = 0;
                        ESCI = 1;
                        datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
                        break
                    else
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiInPlaceLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrInPlaceLinkHR(1,jj) = 1;
                            wardat = 'Data of In Place 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;
                            datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
                            break
                        end
                    end
                end
            end
            if ESCI == 0
                if strcmp(NodoInPlaceLinkHR(1,3),'ADC') || strcmp(NodoInPlaceLinkHR{1,4} ,'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
                    % Cerco i multipli di 6 per identificare le temperature
                    Int = jj/6;
                    if floor(Int) == Int
                        % Controllo ampolle
                        if str2double(DatiInPlaceLinkHR(1,jj)) < 500
                            if rDR==1 && cDR==1 || NuovoZeroIPLHR == 0
                                NAN = 0;
                                ESCI = 1;
                                if datenum(datainiIPLHR)+1 < now
                                    datainiIPLHR = datestr(datenum(datainiIPLHR)+1,'yyyy-mm-dd');
                                    break
                                else
                                    yesIPLHR = 0;
                                end
                            else
                                if isempty(RawDate) == 1
                                    NAN = 0;
                                    ESCI = 1;
                                    datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
                                    break
                                else
                                    DatiInPlaceLinkHR(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
                                    DatiInPlaceLinkHR(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
                                    DatiInPlaceLinkHR(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
                                    DatiInPlaceLinkHR(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
                                    DatiInPlaceLinkHR(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
                                    DatiInPlaceLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                    ErrInPlaceLinkHR(1,jj) = 1;
                                    wardat = ['Data of In Place Link HR nodes corrected using Raw Data of reference Csv file. '...
                                        'Electrolytic cell was read as the corresponding MEMS'];
                                    fprintf(fileID,fmt,wardat);
                                    Ncorr = Ncorr+ri;
                                    NAN = 1;
                                end
                            end
                        end
                    end
                end
            end
        end
        if ESCI == 0
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiInPlaceLinkHR(:,jj)));
                idxND = find(strcmp('No Data',DatiInPlaceLinkHR(:,jj)));
                idxT = find(strcmp('---',DatiInPlaceLinkHR(:,jj)));
                idxT2 = find(strcmp('-',DatiInPlaceLinkHR(:,jj)));
                idxE2 = find(strcmp('Err2',DatiInPlaceLinkHR(:,jj)));
                idxE255 = find(strcmp('Err255',DatiInPlaceLinkHR(:,jj)));
                idxD = find(strcmp('DMUXe',DatiInPlaceLinkHR(:,jj)));
                idxE1F = find(strcmp('Err1File',DatiInPlaceLinkHR(:,jj)));
                idxN = find(strcmp('null',DatiInPlaceLinkHR(:,jj)));
                idx = union(idxE,idxT);
                idx = union(idx,idxT2);
                idx = union(idx,idxND);
                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
                        datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
                        ESCI = 1;
                        NAN = 0;
                        break
                    else
                        DatiInPlaceLinkHR(indice,jj) = DatiInPlaceLinkHR(indice-1,jj);
                        ErrInPlaceLinkHR(indice,jj) = 1;
                        Ncorr = Ncorr+ri;
                        NAN = 1;
                    end
                end
                if strcmp(NodoInPlaceLinkHR(1,3),'ADC') || strcmp(NodoInPlaceLinkHR{1,4} ,'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
                    for ii = 2:r
                        % Cerco i multipli di 6 per identificare le temperature
                        Int = jj/6;
                        if floor(Int) == Int
                            % Controllo ampolle
                            if str2double(DatiInPlaceLinkHR(ii,jj)) < 500
                                DatiInPlaceLinkHR(ii,jj-5:jj) = DatiInPlaceLinkHR(ii-1,jj-5:jj);
                                ErrInPlaceLinkHR(ii,jj) = 1;
                                wardat = ['Data of In Place Link HR nodes corrected using Raw Data of reference Csv file. '...
                                    'MEMS was read as an electrolytic cell'];
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                                ESCI = 0;
                            end
                        end
                    end
                end
                if ESCI == 1
                    NAN = 0;
                    break
                end
                % Elimino gli eventuali Not a Number
                for nnn = 2:r
                    check = isnan(cell2mat(DatiInPlaceLinkHR(nnn,jj)));
                    if check == 1
                        DatiInPlaceLinkHR(nnn,jj) = DatiInPlaceLinkHR(nnn-1,jj);
                        ErrInPlaceLinkHR(nnn,jj) = 1;
                        Ncorr = Ncorr+ri;
                    end
                end
            end
        end
        corrdat = ['' num2str(Ncorr) ' corrections of In Place Link HR data done!'];
        fprintf(fileID,fmt,corrdat);
        % Concateno informazioni generali e/o letture dai nodi.
        DatiInPlaceLinkHR = [DATiniIPLHR str2double(DatiInPlaceLinkHR)];
        % Elimino eventuali date doppie
        a = 2;
        while a <= r
            if DatiInPlaceLinkHR(a,1) == DatiInPlaceLinkHR(a-1,1)
                DatiInPlaceLinkHR(a,:) = [];
                r = r-1;
            else
                a = a+1;
            end
        end
    end
    if NuovoZeroIPLHR == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiInPlaceLinkHR(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiInPlaceLinkHR(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiInPlaceLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiInPlaceLinkHR(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiInPlaceLinkHR;
        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 = DatiInPlaceLinkHR;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end 

%%  Weir Link
if  yesWL == 0 % Non ci sono Stress Meter
    DatiWeirLink = [];
    DatiNTCWeirLink = [];
    ErrWeirLink = [];
    wardat = 'lettura function: there are not Weir Link';
    fprintf(fileID,fmt,wardat);
else
    ChWL = cell2mat(NodoWeirLink(:,5));
    Therm = cell2mat(NodoWeirLink(:,6));
    RawDataFile = ['' IDcentralina '-' DTcatena '-Weir-RawData.csv']; % Specifico per Weir Link
    RawDataFileNTC = ['' IDcentralina '-' DTcatena '-NTCWeir-RawData.csv'];
    NAN = 0;
    DIS = 0;
    while NAN == 0
        if datenum(datainiWL) == datenum(Data(1,1))
            tempoiniWL = char(Data(1,2));
        end
        NodeType = 'Weir Link';
        NodeNumWL = num2str(cell2mat(NodoWeirLink(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 = ''' ...
            datainiWL ''' and Time >= ''' tempoiniWL ''' and UnitName = ''' IDcentralina...
            ''' and  ToolNameID = ''' DTcatena ''' and NodeType = ''' ...
            NodeType ''' and NodeNum = ''' NodeNumWL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniWL = curs.Data;
        Ntempo = DATiniWL;
        [r,c] = size(DATiniWL);
        saltoWL = 0;
        if r==1 && c==1
            textdatWL = 'Warning: error reading Weir Link (control unit data)!';
            fprintf(fileID,fmt,textdatWL);
            saltoWL = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiWL ''' and UnitName = ''' IDcentralina ...
            ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumWL ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2WL = curs.Data;
        Ndate = DAT2WL;
        if saltoWL == 1
            DATiniWL = DAT2WL;
        end
        Check = size(DAT2WL);
        if Check(1,2) > 1 % ho superato il primo giorno
            if saltoWL == 0
                % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
                DATiniWL = [DATiniWL; DAT2WL];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniWL);
        if cD ~=1
            T = [cell2mat(DATiniWL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniWL(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniWL = T;
        else
            DATiniWL = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        [rd,~] = size(Ndate); % numero di dati successivi al primo giorno di calcolo
        [rt,~] = size(Ntempo); % numero di dati del primo giorno di calcolo
        % creo la matrice per i dati Extensometer Link
        if saltoWL == 0
            if Check(1,2) > 1
                DatiWeirLink = cell(rd+rt,rWL);
                DatiNTCWeirLink = cell(rd+rt,rWL);
            else
                DatiWeirLink = cell(rt,rWL);
                DatiNTCWeirLink = cell(rt,rWL);
            end
        else
            DatiWeirLink = cell(rd,rWL);
            DatiNTCWeirLink = cell(rd,rWL);
        end
        NWeir = cell2mat(NodoWeirLink(:,2));
        col = 1;
        ii = 1;
        w = 0;
        while ii <= rWL
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NWeir(ii,1);
            nNodo = num2str(nN);
            % Dato
            comando = ['select Val0 from RawDataView where Date = ''' ...
                datainiWL ''' and Time >= ''' tempoiniWL ''' and  ToolNameID = ''' ...
                DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                NodeType ''' and NodeNum ='  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoWL = curs.Data;
            % Dato
            comando = ['select Val0 from RawDataView where Date > ''' ...
                datainiWL ''' and UnitName = ''' IDcentralina ...
                ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
                NodeType ''' and NodeNum = '  nNodo ''];
            curs = exec(conn,comando);
            curs = fetch(curs);
            DATnodoWLd = curs.Data;
            if Therm(ii) == 0 % Non leggo il termometro
                % T
                DATnodoWL_NTC = 0;
                DATnodoWLd_NTC = 0;
            elseif Therm(ii) == 1
                if ChWL(ii,1) == 2
                    comando = ['select Val1 from RawDataView where Date = ''' ...
                        datainiWL ''' and Time >= ''' tempoiniWL ''' and  ToolNameID = ''' ...
                        DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                        NodeType ''' and NodeNum ='  nNodo ''];
                elseif ChWL(ii,1) == 3
                    comando = ['select Val2 from RawDataView where Date = ''' ...
                        datainiWL ''' and Time >= ''' tempoiniWL ''' and  ToolNameID = ''' ...
                        DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                        NodeType ''' and NodeNum ='  nNodo ''];
                elseif ChWL(ii,1) == 4
                    comando = ['select Val3 from RawDataView where Date = ''' ...
                        datainiWL ''' and Time >= ''' tempoiniWL ''' and  ToolNameID = ''' ...
                        DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
                        NodeType ''' and NodeNum ='  nNodo ''];
                end
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoWL_NTC = curs.Data;
                if ChWL(ii,1) == 2
                    comando = ['select Val1 from RawDataView where Date > ''' ...
                        datainiWL ''' and UnitName = ''' IDcentralina ...
                        ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
                        NodeType ''' and NodeNum = '  nNodo ''];
                elseif ChWL(ii,1) == 3
                    comando = ['select Val2 from RawDataView where Date > ''' ...
                        datainiWL ''' and UnitName = ''' IDcentralina ...
                        ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
                        NodeType ''' and NodeNum = '  nNodo ''];
                elseif ChWL(ii,1) == 4
                    comando = ['select Val3 from RawDataView where Date > ''' ...
                        datainiWL ''' and UnitName = ''' IDcentralina ...
                        ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
                        NodeType ''' and NodeNum = '  nNodo ''];
                end
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoWLd_NTC = curs.Data;
            else
                % T
                DATnodoWL_NTC = 0;
                DATnodoWLd_NTC = 0;
            end
            
            [rn,~] = size(DATnodoWLd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoWLd(i,:) = DATnodoWLd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Weir Link ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            [rnT,~] = size(DATnodoWLd_NTC); % controllo date
            if rnT < rd % normalmente sono uguali
                for i = rnT+1:rd
                    DATnodoWLd_NTC(i,:) = DATnodoWLd_NTC(rnT,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['NTC of Node Weir Link ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
            % DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
            if saltoWL == 0
                if ChWL(ii,1) >= 2
                    if Therm(ii,1)==1
                        DatiWeirLink(1:rt,col) = DATnodoWL(:,:); %#ok<*AGROW>
                        DatiNTCWeirLink(1:rt,col) = DATnodoWL_NTC(:,:); %#ok<*AGROW>
                        if Check(1,2) > 1
                            [rrr,~] = size(DATnodoWLd);
                            if rrr ~= rd
                                DatiWeirLink(rt+rd-rrr+1:rt+rd,col) = DATnodoWLd;
                                DatiNTCWeirLink(rt+rd-rrr+1:rt+rd,col) = DATnodoWLd_NTC; %#ok<*AGROW>
                            else
                                DatiWeirLink(rt+1:rt+rd,col) = DATnodoWLd(:,:);
                                DatiNTCWeirLink(rt+1:rt+rd,col) = DATnodoWLd_NTC(:,:); %#ok<*AGROW>
                            end
                        end
                    else
                        DatiWeirLink(1:rt,col) = DATnodoWL(:,:); %#ok<*AGROW>
                        if Check(1,2) > 1
                            DatiWeirLink(rt+1:rt+rd,col) = DATnodoWLd(:,:);
                        end
                    end
                elseif ChWL(ii,1) == 1
                    DatiWeirLink(1:rt,col) = DATnodoWL(:,:); %#ok<*AGROW>
                    if Check(1,2) > 1
                        DatiWeirLink(rt+1:rt+rd,col) = DATnodoWLd(:,:);
                    end
                end
            else
                if ChWL(ii,1) >= 2
                    if Therm(ii,1)==1
                        DatiWeirLink(1:rd,col) = DATnodoWL(:,:); %#ok<*AGROW>
                        DatiNTCWeirLink(1:rd,col) = DATnodoWL_NTC(:,:); %#ok<*AGROW>
                    else
                        DatiWeirLink(1:rd,col) = DATnodoWL(:,:); %#ok<*AGROW>
                    end
                elseif ChWL(ii,1) == 1
                    DatiWeirLink(1:rd,col) = DATnodoWL(:,:); %#ok<*AGROW>
                end
            end
            
            okdatWL = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rWL) ' Weir Link nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatWL);
            ii = ii+1;
            col = col+1;
        end
        if w == 0
            wardat = 'There are not warning for Weir Link!';
            fprintf(fileID,fmt,wardat);
        end
        
        % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
        %  rimpiazzandoli con l'ultimo dato disponibile di quel nodo
        
        % Dati
        [r,c] = size(DatiWeirLink);
        ErrWeirLink = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        if NuovoZeroWL == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiWL));
            else
                rDR = 1;
                cDR = 1;
                RawDate = [];
                DatiRaw = [];
            end
        else
            rDR = 1;
            cDR = 1;
            RawDate = [];
            DatiRaw = [];
        end
        
        for jj=1:c
            % Se il nodo è Dis., devo aumentare di uno la data (il nodo non
            % è ancora stato installato!)
            if strcmp('Dis.',DatiWeirLink(1,jj)) == 1
                for dis = 2:r
                    if strcmp('Dis.',DatiWeirLink(dis,jj)) == 0
                        DatiWeirLink = DatiWeirLink(dis:end,:);
                        DATiniWL = DATiniWL(dis:end,:);
                        [r,c] = size(DatiWeirLink);
                        break
                    elseif isfile(RawDataFile) == 1
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiWeirLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrWeirLink(1,jj) = 1;
                            wardat = 'Data of Weir Link nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                            DIS = 0;
                            break
                        elseif dis == r
                            NAN = 0;
                            DIS = 1;
                            if datenum(datainiWL)+1 < now
                                datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
                                break
                            else
                                yesWL = 0;
                            end
                        end
                    elseif dis == r
                        NAN = 0;
                        DIS = 1;
                        if datenum(datainiWL)+1 < now
                            datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
                            break
                        else
                            yesWL = 0;
                        end
                    end
                end
                
            end
        end
        if DIS ~= 1 && yesWL == 1
            % --- Codice per il primo dato ---
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiWeirLink(1,jj)));
                idxT = find(strcmp('---',DatiWeirLink(1,jj)));
                idxT2 = find(strcmp('-',DatiWeirLink(1,jj)));
                idxE2 = find(strcmp('Err2',DatiWeirLink(1,jj)));
                idxE255 = find(strcmp('Err255',DatiWeirLink(1,jj)));
                idxD = find(strcmp('DMUXe',DatiWeirLink(1,jj)));
                idxE1F = find(strcmp('Err1File',DatiWeirLink(1,jj)));
                idxN = find(strcmp('null',DatiWeirLink(1,jj)));
                idxRX = find(strcmp('No RX',DatiWeirLink(1,jj)));
                idxI = find(strcmp('id Error',DatiWeirLink(1,jj)));
                idxM = find(strcmp('MUX id Error',DatiWeirLink(1,jj)));
                idxC = find(strcmp('CH n. Error',DatiWeirLink(1,jj)));
                idxU = find(strcmp('Unknown Error',DatiWeirLink(1,jj)));
                idxMC = find(strcmp('MsgCorrup',DatiWeirLink(1,jj)));
                idxNS = find(strcmp('NotSupp',DatiWeirLink(1,jj)));
                idxU2 = find(strcmp('Unknown',DatiWeirLink(1,jj)));
                idxNA = find(strcmp('NotAv',DatiWeirLink(1,jj)));
                idxND = find(strcmp('No Data',DatiWeirLink(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);
                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);
                if ri == 1
                    wardat = 'Warning on the correction of Stress Meter nodes: there are not data at the beginning of the array!';
                    fprintf(fileID,fmt,wardat);
                    if rDR==1 && cDR==1 || NuovoZeroWL == 0 % il file non è mai stato scritto, cerco la data precedente
                        NAN = 0;
                        ESCI = 1;
                        if datenum(datainiWL)+1 < now
                            datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
                            break
                        else
                            yesWL = 0;
                        end
                    else
                        if isempty(RawDate) == 1
                            NAN = 0;
                            ESCI = 1;
                            datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
                            break
                        else
                            if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                                DatiWeirLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrWeirLink(1,jj) = 1;
                                wardat = 'Data of Weir Link nodes corrected using Raw Data of reference Csv file.';
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            else
                                NAN = 0;
                                ESCI = 1;
                                datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
                                break
                            end
                        end
                    end
                end
            end
            if ESCI == 0
                for jj=1:c
                    % Trovo l'indice della cella contenenti una determinata stringa.
                    idxE = find(strcmp('Err1',DatiWeirLink(:,jj)));
                    idxT = find(strcmp('---',DatiWeirLink(:,jj)));
                    idxT2 = find(strcmp('-',DatiWeirLink(:,jj)));
                    idxE2 = find(strcmp('Err2',DatiWeirLink(:,jj)));
                    idxE255 = find(strcmp('Err255',DatiWeirLink(:,jj)));
                    idxD = find(strcmp('DMUXe',DatiWeirLink(:,jj)));
                    idxE1F = find(strcmp('Err1File',DatiWeirLink(:,jj)));
                    idxN = find(strcmp('null',DatiWeirLink(:,jj)));
                    idxRX = find(strcmp('No RX',DatiWeirLink(:,jj)));
                    idxI = find(strcmp('id Error',DatiWeirLink(:,jj)));
                    idxM = find(strcmp('MUX id Error',DatiWeirLink(:,jj)));
                    idxC = find(strcmp('CH n. Error',DatiWeirLink(:,jj)));
                    idxU = find(strcmp('Unknown Error',DatiWeirLink(:,jj)));
                    idxMC = find(strcmp('MsgCorrup',DatiWeirLink(:,jj)));
                    idxNS = find(strcmp('NotSupp',DatiWeirLink(:,jj)));
                    idxU2 = find(strcmp('Unknown',DatiWeirLink(:,jj)));
                    idxNA = find(strcmp('NotAv',DatiWeirLink(:,jj)));
                    idxDis = find(strcmp('Dis.',DatiWeirLink(:,jj)));
                    idxND = find(strcmp('No Data',DatiWeirLink(:,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);
                    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,idxDis);
                    idx = union(idx,idxND);
                    [ri,~] = size(idx);
                    for kk=1:ri
                        indice=idx(kk);
                        if indice == 1
                            NAN = 0;
                            ESCI = 1;
                            datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
                            break
                        else
                            DatiWeirLink(indice,jj) = DatiWeirLink(indice-1,jj);
                            ErrWeirLink(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(DatiWeirLink(nnn,jj)));
                        if check == 1
                            DatiWeirLink(nnn,jj) = DatiWeirLink(nnn-1,jj);
                            ErrWeirLink(nnn,jj) = 1;
                            Ncorr = Ncorr+ri;
                        end
                    end
                end
                corrdat = ['' num2str(Ncorr) ' corrections of Weir Link data done!'];
                fprintf(fileID,fmt,corrdat);
                % Concateno informazioni generali e/o letture dai nodi.
                DatiWeirLink = [DATiniWL str2double(DatiWeirLink)];
                % Elimino eventuali date doppie
                a = 2;
                while a <= r
                    if DatiWeirLink(a,1) == DatiWeirLink(a-1,1)
                        DatiWeirLink(a,:) = [];
                        r = r-1;
                    else
                        a = a+1;
                    end
                end
            end
        end
        
        if ESCI == 0
            if sum(Therm(:,1))>0
                if DIS ~= 1 && yesWL == 1
                    % NTC
                    [r,c] = size(DatiNTCWeirLink);
                    Ncorr = 0;
                    if NuovoZeroWL == 1
                        if isfile(RawDataFile) == 1
                            DatiRawNTC = csvread(RawDataFileNTC);
                            [rDR,cDR] = size(DatiRawNTC);
                            DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000;
                            RawDateNTC = find(DatiRawNTC(:,1)<=datenum(datainiWL));
                        else
                            rDR = 1;
                            cDR = 1;
                            DatiRawNTC = [];
                            RawDateNTC = [];
                        end
                    else
                        rDR = 1;
                        cDR = 1;
                        RawDateNTC = [];
                        DatiRawNTC = [];
                    end
                    for jj=1:c
                        % Trovo l'indice della cella contenenti una determinata stringa.
                        idxE = find(strcmp('Err1',DatiNTCWeirLink(1,jj)));
                        idxND = find(strcmp('No Data',DatiNTCWeirLink(1,jj)));
                        idxT3 = find(strcmp('---',DatiNTCWeirLink(1,jj)));
                        idxT = find(strcmp('-',DatiNTCWeirLink(1,jj)));
                        idxE2 = find(strcmp('Err2',DatiNTCWeirLink(1,jj)));
                        idxE255 = find(strcmp('Err255',DatiNTCWeirLink(1,jj)));
                        idxD = find(strcmp('DMUXe',DatiNTCWeirLink(1,jj)));
                        idxE1F = find(strcmp('Err1File',DatiNTCWeirLink(1,jj)));
                        idxN = find(strcmp('null',DatiNTCWeirLink(1,jj)));
                        idxRX = find(strcmp('No RX',DatiNTCWeirLink(1,jj)));
                        idxI = find(strcmp('id Error',DatiNTCWeirLink(1,jj)));
                        idxM = find(strcmp('MUX id Error',DatiNTCWeirLink(1,jj)));
                        idxC = find(strcmp('CH n. Error',DatiNTCWeirLink(1,jj)));
                        idxU = find(strcmp('Unknown Error',DatiNTCWeirLink(1,jj)));
                        idxMC = find(strcmp('MsgCorrup',DatiNTCWeirLink(1,jj)));
                        idxNS = find(strcmp('NotSupp',DatiNTCWeirLink(1,jj)));
                        idxU2 = find(strcmp('Unknown',DatiNTCWeirLink(1,jj)));
                        idxDis = find(strcmp('Dis.',DatiNTCWeirLink(1,jj)));
                        idxNA = find(strcmp('NotAv',DatiNTCWeirLink(1,jj)));
                        idx = union(idxE,idxT3);
                        idx = union(idx,idxT);
                        idx = union(idx,idxND);
                        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,idxDis);
                        idx = union(idx,idxNA);
                        [ri,~] = size(idx);
                        if ri == 1
                            wardat = 'Warning on the correction of NTC of Weir Link nodes: there are not data at the beginning of the array!';
                            fprintf(fileID,fmt,wardat);
                            if rDR==1 && cDR==1 || NuovoZeroWL == 0 % il file non è mai stato scritto, cerco la data precedente
                                NAN = 0;
                                ESCI = 1;
                                if datenum(datainiWL)+1 < now
                                    datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
                                    break
                                else
                                    yesWL = 0;
                                end
                            else
                                if isempty(RawDateNTC) == 1
                                    NAN = 0;
                                    ESCI = 1;
                                    datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
                                    break
                                else
                                    DatiNTCWeirLink(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1)));
                                    if ErrWeirLink(indice,jj) == 0
                                        ErrWeirLink(indice,jj) = 0.5;
                                    else
                                        ErrWeirLink(indice,jj) = 1;
                                    end
                                    wardat = 'Data of NTC of Weir Link nodes corrected using Raw Data of reference Csv file.';
                                    fprintf(fileID,fmt,wardat);
                                    Ncorr = Ncorr+ri;
                                    NAN = 1;
                                end
                            end
                        end
                    end
                    for jj=1:c
                        % Trovo l'indice della cella contenenti una determinata stringa.
                        idxE = find(strcmp('Err1',DatiNTCWeirLink(:,jj)));
                        idxND = find(strcmp('No Data',DatiNTCWeirLink(:,jj)));
                        idxT3 = find(strcmp('---',DatiNTCWeirLink(:,jj)));
                        idxT = find(strcmp('-',DatiNTCWeirLink(:,jj)));
                        idxE2 = find(strcmp('Err2',DatiNTCWeirLink(:,jj)));
                        idxE255 = find(strcmp('Err255',DatiNTCWeirLink(:,jj)));
                        idxD = find(strcmp('DMUXe',DatiNTCWeirLink(:,jj)));
                        idxE1F = find(strcmp('Err1File',DatiNTCWeirLink(:,jj)));
                        idxN = find(strcmp('null',DatiNTCWeirLink(:,jj)));
                        idxRX = find(strcmp('No RX',DatiNTCWeirLink(:,jj)));
                        idxI = find(strcmp('id Error',DatiNTCWeirLink(:,jj)));
                        idxM = find(strcmp('MUX id Error',DatiNTCWeirLink(:,jj)));
                        idxC = find(strcmp('CH n. Error',DatiNTCWeirLink(:,jj)));
                        idxU = find(strcmp('Unknown Error',DatiNTCWeirLink(:,jj)));
                        idxMC = find(strcmp('MsgCorrup',DatiNTCWeirLink(:,jj)));
                        idxNS = find(strcmp('NotSupp',DatiNTCWeirLink(:,jj)));
                        idxU2 = find(strcmp('Unknown',DatiNTCWeirLink(:,jj)));
                        idxDis = find(strcmp('Dis.',DatiNTCWeirLink(:,jj)));
                        idxNA = find(strcmp('NotAv',DatiNTCWeirLink(:,jj)));
                        idx = union(idxE,idxT3);
                        idx = union(idx,idxND);
                        idx = union(idx,idxT);
                        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,idxDis);
                        idx = union(idx,idxNA);
                        [ri,~] = size(idx);
                        for kk=1:ri
                            indice=idx(kk);
                            if indice == 1
                                NAN = 0;
                                ESCI = 1;
                                datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
                                break
                            else
                                DatiNTCWeirLink(indice,jj) = DatiNTCWeirLink(indice-1,jj);
                                if ErrWeirLink(indice,jj) == 0
                                    ErrWeirLink(indice,jj) = 0.5;
                                else
                                    ErrWeirLink(indice,jj) = 1;
                                end
                                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(DatiNTCWeirLink(nnn,jj)));
                            if check == 1
                                DatiNTCWeirLink(nnn,jj) = DatiNTCWeirLink(nnn-1,jj);
                                if ErrWeirLink(indice,jj) == 0
                                    ErrWeirLink(indice,jj) = 0.5;
                                else
                                    ErrWeirLink(indice,jj) = 1;
                                end
                                Ncorr = Ncorr+ri;
                            end
                        end
                    end
                    corrdat = ['' num2str(Ncorr) ' corrections of NTC Weir Link data done!'];
                    fprintf(fileID,fmt,corrdat);
                    % Concateno informazioni generali e/o letture dai nodi.
                    DatiNTCWeirLink = [DATiniWL str2double(DatiNTCWeirLink)];
                    % Elimino eventuali date doppie
                    a = 2;
                    while a <= r
                        if DatiNTCWeirLink(a,1) == DatiNTCWeirLink(a-1,1)
                            DatiNTCWeirLink(a,:) = [];
                            r = r-1;
                        else
                            a = a+1;
                        end
                    end
                end
            end
        end
    end
    if NuovoZeroWL == 1 && yesWL == 1
        [rDR,cDR] = size(DatiRaw);
        if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiWeirLink(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiWeirLink(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiWeirLink(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiWeirLink(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiWeirLink;
        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
        if sum(Therm(:,1))>0
            [rDR,cDR] = size(DatiRawNTC);
            if  rDR~=1 && cDR~=1 && isempty(DatiRawNTC) == 0
                RawDate1 = find(DatiRawNTC(:,1)<=DatiNTCWeirLink(1,1));
                if isempty(RawDate1) == 1
                    RawDate2 = 1;
                elseif RawDate1(end) == rDR
                    RawDate2 = find(DatiNTCWeirLink(:,1)>DatiRawNTC(end,1));
                else
                    RawDate2 = find(DatiNTCWeirLink(:,1)>DatiRawNTC(RawDate1(end)+1,1));
                end
            else
                RawDate1 = [];
                RawDate2 = 1;
            end
            if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
                DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTCWeirLink(RawDate2(1):end,:)];
            elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
                DatiNTC = DatiNTCWeirLink;
            else
                DatiNTC = DatiRawNTC;
            end
            % Elimino appoggio più vecchio di un mese
            RawDate3 = find(DatiNTC(:,1)<now-30);
            if isempty(RawDate3) == 0
                [rDati,~] = size(DatiNTC);
                if RawDate3(end) == rDati
                else
                    DatiNTC = DatiNTC(RawDate3(end)+1:end,:);
                end
            end
            if isfile(RawDataFileNTC) == 1
                delete(RawDataFileNTC);
            end
        end
    else
        Dati = DatiWeirLink;
        if sum(Therm(:,1))>0
            DatiNTC = DatiNTCWeirLink;
        end
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
    if sum(Therm(:,1))>0
        DatiNTC(:,1) = DatiNTC(:,1) - 730000;
        csvwrite(RawDataFileNTC,DatiNTC);
    end
end

%%  Pendulum
if  yesPE == 0 % Non ci sono Pendulum
    DatiPendulum = [];
    ErrPendulum = [];
    wardat = 'lettura function: there are not Pendulum';
    fprintf(fileID,fmt,wardat);
else
    NAN = 0;
    RawDataFile = ['' IDcentralina '-' DTcatena '-PE-RawData.csv'];
    ChPE = cell2mat(NodoPendulum(:,5));
    while NAN == 0
        if datenum(datainiPE) == datenum(Data(1,1))
            tempoiniPE = char(Data(1,2));
        end
        NodeType = 'Pendulum';
        NodeNumPE = num2str(cell2mat(NodoPendulum(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 = ''' ...
            datainiPE ''' and Time >= ''' tempoiniPE ''' and  ToolNameID = ''' DTcatena...
            ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
            ''' and NodeNum = ''' NodeNumPE ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DATiniPE = curs.Data;
        Ntempo = DATiniPE;
        [r,c] = size(DATiniPE);
        saltoPE = 0;
        if  r==1 && c==1
            textdatPE = 'Warning: error reading Pendulum (control unit data)!';
            fprintf(fileID,fmt,textdatPE);
            saltoPE = 1;
        end
        % Step 2 (vedi commento più avanti)
        comando = ['select Date, Time from RawDataView where Date > ''' ...
            datainiPE ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
            ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumPE ''' '];
        curs = exec(conn,comando);
        curs = fetch(curs);
        DAT2PE = curs.Data;
        Ndate = DAT2PE;
        if saltoPE == 1
            DATiniPE = DAT2PE;
        end
        Check = size(DAT2PE);
        if Check(1,2) > 1 % ho superato il primo giorno
            % Concateno le informazioni relative a Step 1 e 2 (se necessario...)
            if saltoPE == 0
                DATiniPE = [DATiniPE; curs.Data];
            end
        end
        % Modifico il formato di data e ora in DATini.
        [rD,cD] = size(DATiniPE);
        if cD ~=1
            T = [cell2mat(DATiniPE(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPE(:,2))];
            T = datenum(T);
            % Converto da Cell Array a Matrice.
            DATiniPE = T;
        else
            DATiniPE = [];
        end
        
        % Scarico dati relativi ai singoli nodi
        ii = 1;
        [rd,~] = size(Ndate);
        [rt,~] = size(Ntempo);
        if saltoPE == 0
            if Check(1,2) > 1 % ho superato il primo giorno
                DatiPendulum = cell(rd+rt,rPE);
            else
                DatiPendulum = cell(rt,rPE);
            end
        else
            DatiPendulum = cell(rd,rPE);
        end
        NPendulum = cell2mat(NodoPendulum(:,2));
        w = 0;
        col = 1;
        while ii <= rPE
            % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
            % ma limitandomi a quelli registrati nel corso di quella singola giornata;
            nN = NPendulum(ii,1);
            nNodo = num2str(nN);
            if ChPE == 2
                comando = ['select Val0, Val1 from RawDataView where Date = ''' ...
                    datainiPE ''' and Time >= ''' tempoiniPE ''' and  ToolNameID = ''' DTcatena...
                    ''' and UnitName = ''' IDcentralina ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoPE = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val1 from RawDataView where Date > ''' ...
                    datainiPE ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoPEd = curs.Data;
            elseif ChPE == 4
                comando = ['select Val0, Val2 from RawDataView where Date = ''' ...
                    datainiPE ''' and Time >= ''' tempoiniPE ''' and  ToolNameID = ''' DTcatena...
                    ''' and UnitName = ''' IDcentralina ''' and NodeNum ='  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoPE = curs.Data;
                % Step 2: Considero le date successive e scarico tutti i dati disponibili.
                comando = ['select Val0, Val2 from RawDataView where Date > ''' ...
                    datainiPE ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
                    ''' and NodeNum = '  nNodo ''];
                curs = exec(conn,comando);
                curs = fetch(curs);
                DATnodoPEd = 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.
            
            if saltoPE == 0
                DatiPendulum(1:rt,col:col+1) = DATnodoPE;
            else
                DatiPendulum(1:rd,col:col+1) = DATnodoPEd;
            end
            
            [rn,~] = size(DATnodoPEd); % controllo date
            if rn < rd % normalmente sono uguali
                for i = rn+1:rd
                    DATnodoPEd(i,:) = DATnodoPEd(rn,:); % se mancano dati, copio gli ultimi
                end
                wardat = ['Node Pendulum ' num2str(ii) ' does NOT work!'];
                fprintf(fileID,fmt,wardat);
                w = 1;
            end
            
            if Check(1,2) > 1
                if saltoPE == 0
                    DatiPendulum(rt+1:rt+rd,col:col+1) = DATnodoPEd;
                end
            else
                DatiPendulum = DatiPendulum(1:end,:);
            end
            okdatPE = ['Data of node number ' num2str(ii) ' of ' ...
                num2str(rPE) ' Pendulum nodes downloaded correctly'];
            fprintf(fileID,fmt,okdatPE);
            ii = ii+1;
            col = col+2;
        end
        if w == 0
            wardat = 'There are not warning for Pendulum!';
            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(DatiPendulum);
        ErrPendulum = zeros(r,c);
        Ncorr = 0;
        ESCI = 0;
        NAN = 1;
        DIS = 0;
        if NuovoZeroPE == 1
            if isfile(RawDataFile) == 1
                DatiRaw = csvread(RawDataFile);
                [rDR,cDR] = size(DatiRaw);
                DatiRaw(:,1) = DatiRaw(:,1) + 730000;
                RawDate = find(DatiRaw(:,1)<=datenum(datainiPE));
            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.',DatiPendulum(1,jj)) == 1
                for dis = 2:r
                    if strcmp('Dis.',DatiPendulum(dis,jj)) == 0
                        DatiPendulum = DatiPendulum(dis:end,:);
                        DATiniPE = DATiniPE(dis:end,:);
                        [r,c] = size(DatiPendulum);
                        break
                    elseif isfile(RawDataFile) == 1
                        if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                            DatiPendulum(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                            ErrPendulum(1,jj) = 1;
                            wardat = 'Data of Pendulum nodes corrected using Raw Data of reference Csv file.';
                            fprintf(fileID,fmt,wardat);
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                            DIS = 0;
                            break
                        elseif dis == r
                            NAN = 0;
                            DIS = 1;
                            if datenum(datainiPE)+1 < now
                                datainiPE = datestr(datenum(datainiPE)+1,'yyyy-mm-dd');
                                break
                            else
                                yesPE = 0;
                            end
                        end
                    elseif dis == r
                        NAN = 0;
                        DIS = 1;
                        if datenum(datainiPE)+1 < now
                            datainiPE = datestr(datenum(datainiPE)+1,'yyyy-mm-dd');
                            break
                        else
                            yesPE = 0;
                        end
                    end
                end
            end
        end
        if DIS ~= 1 && yesPE == 1
            % --- Codice per il primo dato ---
            for jj=1:c
                % Trovo l'indice della cella contenenti una determinata stringa.
                idxE = find(strcmp('Err1',DatiPendulum(1,jj)));
                idxT = find(strcmp('---',DatiPendulum(1,jj)));
                idxT2 = find(strcmp('-',DatiPendulum(1,jj)));
                idxE2 = find(strcmp('Err2',DatiPendulum(1,jj)));
                idxE255 = find(strcmp('Err255',DatiPendulum(1,jj)));
                idxD = find(strcmp('DMUXe',DatiPendulum(1,jj)));
                idxE1F = find(strcmp('Err1File',DatiPendulum(1,jj)));
                idxN = find(strcmp('null',DatiPendulum(1,jj)));
                idxRX = find(strcmp('No RX',DatiPendulum(1,jj)));
                idxI = find(strcmp('id Error',DatiPendulum(1,jj)));
                idxM = find(strcmp('MUX id Error',DatiPendulum(1,jj)));
                idxC = find(strcmp('CH n. Error',DatiPendulum(1,jj)));
                idxCE = find(strcmp('CH n. Er',DatiPendulum(1,jj)));
                idxU = find(strcmp('Unknown Error',DatiPendulum(1,jj)));
                idxMC = find(strcmp('MsgCorrup',DatiPendulum(1,jj)));
                idxNS = find(strcmp('NotSupp',DatiPendulum(1,jj)));
                idxU2 = find(strcmp('Unknown',DatiPendulum(1,jj)));
                idxNA = find(strcmp('NotAv',DatiPendulum(1,jj)));
                idxND = find(strcmp('No Data',DatiPendulum(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);
                [ri,~] = size(idx);
                if ri == 1
                    wardat = 'Warning on the correction of Pendulum nodes: there are not data at the beginning of the array!';
                    fprintf(fileID,fmt,wardat);
                    if rDR==1 && cDR==1 || NuovoZeroPE == 0 % il file non è mai stato scritto, cerco la data precedente
                        NAN = 0;
                        ESCI = 1;
                        if datenum(datainiPE)+1 < now
                            datainiPE = datestr(datenum(datainiPE)+1,'yyyy-mm-dd');
                            break
                        else
                            yesPE = 0;
                        end
                    else
                        if isempty(RawDate) == 1
                            NAN = 0;
                            ESCI = 1;
                            datainiPE = datestr(datenum(datainiPE)-1,'yyyy-mm-dd');
                            break
                        else
                            if isnan(DatiRaw(RawDate(end),jj+1)) == 0
                                DatiPendulum(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
                                ErrPendulum(1,jj) = 1;
                                wardat = 'Data of Pendulum nodes corrected using Raw Data of reference Csv file.';
                                fprintf(fileID,fmt,wardat);
                                Ncorr = Ncorr+ri;
                                NAN = 1;
                            else
                                NAN = 0;
                                ESCI = 1;
                                datainiPE = datestr(datenum(datainiPE)-1,'yyyy-mm-dd');
                                break
                            end
                        end
                    end
                end
            end
            if ESCI == 0
                for jj=1:c
                    % Trovo l'indice della cella contenenti una determinata stringa.
                    idxE = find(strcmp('Err1',DatiPendulum(:,jj)));
                    idxT = find(strcmp('---',DatiPendulum(:,jj)));
                    idxT2 = find(strcmp('-',DatiPendulum(:,jj)));
                    idxE2 = find(strcmp('Err2',DatiPendulum(:,jj)));
                    idxE255 = find(strcmp('Err255',DatiPendulum(:,jj)));
                    idxD = find(strcmp('DMUXe',DatiPendulum(:,jj)));
                    idxE1F = find(strcmp('Err1File',DatiPendulum(:,jj)));
                    idxN = find(strcmp('null',DatiPendulum(:,jj)));
                    idxRX = find(strcmp('No RX',DatiPendulum(:,jj)));
                    idxI = find(strcmp('id Error',DatiPendulum(:,jj)));
                    idxM = find(strcmp('MUX id Error',DatiPendulum(:,jj)));
                    idxC = find(strcmp('CH n. Error',DatiPendulum(:,jj)));
                    idxCE = find(strcmp('CH n. Er',DatiPendulum(:,jj)));
                    idxU = find(strcmp('Unknown Error',DatiPendulum(:,jj)));
                    idxMC = find(strcmp('MsgCorrup',DatiPendulum(:,jj)));
                    idxNS = find(strcmp('NotSupp',DatiPendulum(:,jj)));
                    idxU2 = find(strcmp('Unknown',DatiPendulum(:,jj)));
                    idxNA = find(strcmp('NotAv',DatiPendulum(:,jj)));
                    idxDis = find(strcmp('Dis.',DatiPendulum(:,jj)));
                    idxND = find(strcmp('No Data',DatiPendulum(:,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,idxDis);
                    idx = union(idx,idxND);
                    [ri,~] = size(idx);
                    for kk=1:ri
                        indice=idx(kk);
                        if indice == 1
                            datainiPE = datestr(datenum(datainiPE)-1,'yyyy-mm-dd');
                            ESCI = 1;
                            NAN = 0;
                            break
                        else
                            DatiPendulum(indice,jj) = DatiPendulum(indice-1,jj);
                            ErrPendulum(indice,jj) = 1;
                            Ncorr = Ncorr+ri;
                            NAN = 1;
                        end
                    end
                    if ESCI == 1
                        NAN = 0;
                        break
                    end
                    % Elimino gli eventuali Not a Number
                    for nnn = 2:r
                        check = isnan(cell2mat(DatiPendulum(nnn,jj)));
                        if check == 1
                            DatiPendulum(nnn,jj) = DatiPendulum(nnn-1,jj);
                            ErrPendulum(nnn,jj) = 1;
                            Ncorr = Ncorr+ri;
                        end
                    end
                end
            end
            corrdat = ['' num2str(Ncorr) ' corrections of Pendulum data done!'];
            fprintf(fileID,fmt,corrdat);
            % Concateno informazioni generali e/o letture dai nodi.
            DatiPendulum = [DATiniPE str2double(DatiPendulum)];
            % Elimino eventuali date doppie
            a = 2;
            while a <= r
                if DatiPendulum(a,1) == DatiPendulum(a-1,1)
                    DatiPendulum(a,:) = [];
                    r = r-1;
                else
                    a = a+1;
                end
            end
        end
    end
    if NuovoZeroPE == 1
        if  rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
            RawDate1 = find(DatiRaw(:,1)<=DatiPendulum(1,1));
            if isempty(RawDate1) == 1
                RawDate2 = 1;
            elseif RawDate1(end) == rDR
                RawDate2 = find(DatiPendulum(:,1)>DatiRaw(end,1));
            else
                RawDate2 = find(DatiPendulum(:,1)>DatiRaw(RawDate1(end)+1,1));
            end
        else
            RawDate1 = [];
            RawDate2 = 1;
        end
        if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
            Dati = [DatiRaw(1:RawDate1(end),:);DatiPendulum(RawDate2(1):end,:)];
        elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
            Dati = DatiPendulum;
        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 = DatiPendulum;
    end
    Dati(:,1) = Dati(:,1) - 730000;
    csvwrite(RawDataFile,Dati);
end

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

end