% 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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) 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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)= ''' 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)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)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)