% Questa funzione legge i dati di ogni tipologia di nodo (se presente) % DatiTunnelLink contiene tutti i dati per i Tilt Link % DatiRadialLink contiene tutti i dati per i Radial Link % etc. function [Batteria,DatiTunnelLink,ErrTunnelLink,datainiTuL,... DatiRadialLink,ErrRadialLink,datainiRL,DatiTiltLinkH,ErrTiltLinkH,datainiTLH,... DatiTiltLinkHRH,ErrTiltLinkHRH,datainiTLHRH,DatiPreConvLink,ErrPreConvLink,datainiPCL,... DatiPreConvLinkHR,ErrPreConvLinkHR,datainiPCLHR,DatiPressureLink,ErrPressureLink,... DatiLoadLink,ErrLoadLink,DatiExtensometerLink,DatiExtensometerLink_Rif,... DatiNTCExtensometerLink,ErrExtensometerLink,Dati3DExtensometerLink,ChEL,EL_NTC,... Dati3DExtensometerLink_Rif,DatiNTC3DExtensometerLink,Err3DExtensometerLink,ErrNTC3DExtensometerLink,Ch3DEL,EL3D_NTC,... DatiWireExtensometerLink,DatiNTCWireExtensometerLink,ErrWireExtensometerLink,ChWEL,WEL_NTC,... DatiMultiPointExtensometer,DatiNTCMultiPointExtensometer,ErrMultiPointExtensometer,ErrNTCMultiPointExtensometer,ChMPBEL,MPBEL_NTC,... DatiAnalogLink,ErrAnalogLink,datainiAL,ChAL,AL_NTC,... DatiCrackLink,DatiNTCCrackLink,ErrCrackLink,ChCrL,CrL_NTC,... Dati3DCrackLink,DatiNTC3DCrackLink,Err3DCrackLink,ErrNTC3DCrackLink,Ch3DCrL,CrL3D_NTC,... Dati2DCrackLink,DatiNTC2DCrackLink,Err2DCrackLink,ErrNTC2DCrackLink,Ch2DCrL,CrL2D_NTC,... DatiStressMeter,DatiStressMeter_Rif,DatiNTCStressMeter,DatiNTCStressMeter_Rif,ErrStressMeter,ChSM,SM_NTC,... yesTuL,yesRL,yesTLH,yesTLHRH,yesPCL,yesPCLHR,yesPL,yesLL,yesEL,yes3DEL,... yesWEL,yesMPBEL,yesAL,yesCrL,yes3DCrL,yes2DCrL,yesSM] = ... lettura_Dati(IDcentralina,DTcatena,datainiTuL,tempoiniTuL,NodoTunnelLink,NuovoZeroTuL,date_AC,time_AC,Nodo_AC,... datainiRL,tempoiniRL,NodoRadialLink,NuovoZeroRL,datainiTLH,tempoiniTLH,NodoTiltLinkH,NuovoZeroTLH,... datainiTLHRH,tempoiniTLHRH,NodoTiltLinkHRH,NuovoZeroTLHRH,datainiPCL,tempoiniPCL,NodoPreConvLink,NuovoZeroPCL,... datainiPCLHR,tempoiniPCLHR,NodoPreConvLinkHR,NuovoZeroPCLHR,datainiPL,tempoiniPL,NodoPressureLink,NuovoZeroPrL,... datainiLL,tempoiniLL,NodoLoadLink,NuovoZeroLL,datainiEL,tempoiniEL,Date_Rif_EL,NodoExtensometerLink,NuovoZeroEL,... dataini3DEL,tempoini3DEL,Date_Rif_3DEL,Nodo3DExtensometerLink,NuovoZero3DEL,... datainiWEL,tempoiniWEL,NodoWireExtensometerLink,NuovoZeroWEL,... datainiMPBEL,tempoiniMPBEL,NodoMultiPointRodExtensometer,NuovoZeroMPBEL,... datainiAL,tempoiniAL,NodoAnalogLink,NumBasi,NuovoZeroAL,... datainiCrL,tempoiniCrL,NodoCrackLink,NuovoZeroCrL,dataini3DCrL,tempoini3DCrL,Nodo3DCrackLink,NuovoZero3DCrL,... dataini2DCrL,tempoini2DCrL,Nodo2DCrackLink,NuovoZero2DCrL,... datainiSM,tempoiniSM,Date_Rif_SM,NodoStressMeter,NuovoZeroSM,yesTuL,yesRL,yesTLH,... yesTLHRH,yesPCL,yesPCLHR,yesPL,yesLL,yesEL,yes3DEL,yesWEL,yesMPBEL,yesAL,yesCrL,... yes3DCrL,yes2DCrL,yesSM,rTuL,rRL,rTLH,rTLHRH,rPCL,rPCLHR,rPrL,... rLL,rEL,r3DEL,rWEL,rMPBEL,rAL,rCrL,r3DCrL,r2DCrL,rSM,conn,catena,date,time,FileName) % Log file fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'lettura function started'; fprintf(fileID,fmt,text); %% Batteria % cerco la batteria nel primo nodo 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 == 17 dataini = datainiTuL; tempoini = tempoiniTuL; break elseif i == 18 dataini = datainiRL; tempoini = tempoiniRL; break elseif i == 11 dataini = datainiTLH; tempoini = tempoiniTLH; break elseif i == 12 dataini = datainiTLHRH; tempoini = tempoiniTLHRH; break elseif i == 23 dataini = datainiPCL; tempoini = tempoiniPCL; break elseif i == 24 dataini = datainiPCLHR; tempoini = tempoiniPCLHR; break elseif i == 8 dataini = datainiAL; tempoini = tempoiniAL; break elseif i == 15 dataini = datainiLL; tempoini = tempoiniLL; break elseif i == 16 dataini = datainiEL; tempoini = tempoiniEL; break elseif i == 19 dataini = dataini3DEL; tempoini = tempoini3DEL; break elseif i == 21 dataini = datainiPL; tempoini = tempoiniPL; break elseif i == 22 dataini = datainiWEL; tempoini = tempoiniWEL; break elseif i == 25 dataini = datainiMPBEL; tempoini = tempoiniMPBEL; break elseif i == 36 dataini = datainiCrL; tempoini = tempoiniCrL; break elseif i == 37 dataini = dataini3DCrL; tempoini = tempoini3DCrL; break elseif i == 51 dataini = dataini2DCrL; tempoini = tempoini2DCrL; break elseif i == 47 dataini = datainiSM; tempoini = tempoiniSM; break end j = j+1; else break end end NodeNum = '1'; comando = ['select Date, Time, BatLevel from RawDataView where Date = ''' ... dataini ''' and Time >= ''' tempoini ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' ']; curs = exec(conn,comando); curs = fetch(curs); BatTempo = curs.Data; comando = ['select Date, Time, BatLevel from RawDataView where Date > ''' ... dataini ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' ']; curs = exec(conn,comando); curs = fetch(curs); BatData = curs.Data; if strcmp(char(BatData(1)),'No Data') Batteria = BatTempo; elseif strcmp(char(BatTempo(1)),'No Data') Batteria = BatData; else Batteria = [BatTempo; BatData]; end Data(1,1) = cellstr(date); Data(1,2) = cellstr(time); %% Tunnel Link if yesTuL == 0 % Non ci sono Tunnel Link DatiTunnelLink = []; ErrTunnelLink = []; wardat = 'lettura function: there are not Tunnel Link'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-TuL-RawData.csv']; NAN = 0; date_AC = [date_AC ' ' time_AC]; while NAN == 0 if datenum(datainiTuL) == datenum(Data(1,1)) tempoiniTuL = char(Data(1,2)); end NodeType = 'Tunnel Link'; NodeNumTuL = num2str(cell2mat(NodoTunnelLink(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 = ''' ... datainiTuL ''' and Time >= ''' tempoiniTuL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumTuL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniTuL = curs.Data; Ntempo = DATiniTuL; [r,c] = size(DATiniTuL); saltoTuL = 0; if r==1 && c==1 textdatTuL = 'Warning: error reading Tunnel Link (control unit data)!'; fprintf(fileID,fmt,textdatTuL); saltoTuL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiTuL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumTuL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2TuL = curs.Data; Ndate = DAT2TuL; if saltoTuL == 1 DATiniTuL = DAT2TuL; end Check = size(DAT2TuL); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoTuL == 0 DATiniTuL = [DATiniTuL; DAT2TuL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniTuL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniTuL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTuL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniTuL = T; else DATiniTuL = []; 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 Tunnel Link if saltoTuL == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiTunnelLink = cell(rd+rt,7*rTuL); else DatiTunnelLink = cell(rt,7*rTuL); end else DatiTunnelLink = cell(rd,7*rTuL); end NTunnelLink = cell2mat(NodoTunnelLink(:,2)); col = 7; ii = 1; w = 0; if now < datenum(date_AC) % NON si elabora Arco Rovescio Arco = 0; else Arco = 1; end while ii <= rTuL if ii >= Nodo_AC % Primo nodo arco rovescio if Arco == 1 Continua = 1; else Continua = 0; end else Continua = 1; end if Continua == 1 % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NTunnelLink(ii,1); nNodo = num2str(nN); comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ... datainiTuL ''' and Time >= ''' tempoiniTuL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoTuL = 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 > ''' ... datainiTuL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoTuLd = curs.Data; end % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. ini_col = col-6; if saltoTuL == 0 if Continua == 1 DatiTunnelLink(1:rt,ini_col:col) = DATnodoTuL(:,:); else DatiTunnelLink(1:rt,ini_col:col) = cellstr('0'); end else if Continua == 1 DatiTunnelLink(1:rd,ini_col:col) = DATnodoTuLd(:,:); else DatiTunnelLink(1:rd,ini_col:col) = cellstr('0'); end end [rn,~] = size(DATnodoTuLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoTuLd(i,:) = DATnodoTuLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Tunnel Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoTuL == 0 if Continua == 1 DatiTunnelLink(rt+1:rt+rd,ini_col:col) = DATnodoTuLd(:,:); else DatiTunnelLink(rt+1:rt+rd,ini_col:col) = cellstr('0'); end end else DatiTunnelLink = DatiTunnelLink(1:end,:); end okdatTuL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rTuL) ' Tunnel Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatTuL); ii = ii+1; col = col+7; end if w == 0 wardat = 'There are not warning for Tunnel 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(DatiTunnelLink); ErrTunnelLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroTuL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiTuL)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiTunnelLink(1,jj))); idxND = find(strcmp('No Data',DatiTunnelLink(1,jj))); idxT = find(strcmp('---',DatiTunnelLink(1,jj))); idxT2 = find(strcmp('-',DatiTunnelLink(1,jj))); idxE2 = find(strcmp('Err2',DatiTunnelLink(1,jj))); idxE255 = find(strcmp('Err255',DatiTunnelLink(1,jj))); idxD = find(strcmp('DMUXe',DatiTunnelLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiTunnelLink(1,jj))); idxN = find(strcmp('null',DatiTunnelLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Tunnel Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroTuL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiTuL)+1 < now datainiTuL = datestr(datenum(datainiTuL)+1,'yyyy-mm-dd'); break else yesTuL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiTuL = datestr(datenum(datainiTuL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiTunnelLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrTunnelLink(1,jj) = 1; wardat = 'Data of Tunnel Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiTuL = datestr(datenum(datainiTuL)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c % nodi % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiTunnelLink(:,jj))); idxND = find(strcmp('No Data',DatiTunnelLink(:,jj))); idxT = find(strcmp('---',DatiTunnelLink(:,jj))); idxT2 = find(strcmp('-',DatiTunnelLink(:,jj))); idxE2 = find(strcmp('Err2',DatiTunnelLink(:,jj))); idxE255 = find(strcmp('Err255',DatiTunnelLink(:,jj))); idxD = find(strcmp('DMUXe',DatiTunnelLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiTunnelLink(:,jj))); idxN = find(strcmp('null',DatiTunnelLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiTuL = datestr(datenum(datainiTuL)-1,'yyyy-mm-dd'); break end DatiTunnelLink(indice,jj) = DatiTunnelLink(indice-1,jj); ErrTunnelLink(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r % date check = isnan(cell2mat(DatiTunnelLink(nnn,jj))); if check == 1 DatiTunnelLink(nnn,jj) = DatiTunnelLink(nnn-1,jj); ErrTunnelLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Tunnel Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiTunnelLink = [DATiniTuL str2double(DatiTunnelLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiTunnelLink(a,1) == DatiTunnelLink(a-1,1) DatiTunnelLink(a,:) = []; r = r-1; else a = a+1; end end end end if NuovoZeroTuL == 1 if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiTunnelLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiTunnelLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiTunnelLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiTunnelLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiTunnelLink; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniRL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' 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 Radial 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 UnitName = ''' IDcentralina ''' and ToolNameID = '''... DTcatena ''' 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; DAT2RL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniRL); if rD ~=1 && 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 [rd,~] = size(Ndate); % numero di dati successivi al primo giorno di calcolo [rt,~] = size(Ntempo); % numero di dati del primo giorno di calcolo if saltoRL == 0 % creo la matrice per i dati Radial Link if Check(1,2) > 1 DatiRadialLink = cell(rd+rt,4*rRL); else DatiRadialLink = cell(rt,4*rRL); end else DatiRadialLink = cell(rd,4*rRL); end NRadialLink = cell2mat(NodoRadialLink(:,2)); col = 4; ii = 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 = NRadialLink(ii,1); nNodo = num2str(nN); comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' ... datainiRL ''' and Time >= ''' tempoiniRL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' 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, Val1, Val2, Val6 from RawDataView where Date > ''' ... datainiRL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRLd = 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. ini_col = col-3; if saltoRL == 0 DatiRadialLink(1:rt,ini_col:col) = DATnodoRL(:,:); else DatiRadialLink(1:rd,ini_col:col) = DATnodoRL(:,:); 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 Radial Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoRL == 0 DatiRadialLink(rt+1:rt+rd,ini_col:col) = DATnodoRLd(:,:); end else DatiRadialLink = DatiRadialLink(1:end,:); end okdatRL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rRL) ' Radial Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatRL); ii = ii+1; col = col+4; end if w == 0 wardat = 'There are not warning for Radial 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(DatiRadialLink); ErrRadialLink = 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 = []; DatiRaw = []; end % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiRadialLink(1,jj))); idxND = find(strcmp('No Data',DatiRadialLink(1,jj))); idxT = find(strcmp('---',DatiRadialLink(1,jj))); idxT2 = find(strcmp('-',DatiRadialLink(1,jj))); idxE2 = find(strcmp('Err2',DatiRadialLink(1,jj))); idxE255 = find(strcmp('Err255',DatiRadialLink(1,jj))); idxD = find(strcmp('DMUXe',DatiRadialLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiRadialLink(1,jj))); idxN = find(strcmp('null',DatiRadialLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Radial 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 DatiRadialLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrRadialLink(1,jj) = 1; wardat = 'Data of Radial 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',DatiRadialLink(:,jj))); idxND = find(strcmp('No Data',DatiRadialLink(:,jj))); idxT = find(strcmp('---',DatiRadialLink(:,jj))); idxT2 = find(strcmp('-',DatiRadialLink(:,jj))); idxE2 = find(strcmp('Err2',DatiRadialLink(:,jj))); idxE255 = find(strcmp('Err255',DatiRadialLink(:,jj))); idxD = find(strcmp('DMUXe',DatiRadialLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiRadialLink(:,jj))); idxN = find(strcmp('null',DatiRadialLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiRL = datestr(datenum(datainiRL)-1,'yyyy-mm-dd'); break end DatiRadialLink(indice,jj) = DatiRadialLink(indice-1,jj); ErrRadialLink(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r % date check = isnan(cell2mat(DatiRadialLink(nnn,jj))); if check == 1 DatiRadialLink(nnn,jj) = DatiRadialLink(nnn-1,jj); ErrRadialLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Radial Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiRadialLink = [DATiniRL str2double(DatiRadialLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiRadialLink(a,1) == DatiRadialLink(a-1,1) DatiRadialLink(a,:) = []; r = r-1; else a = a+1; end end end end if NuovoZeroRL == 1 if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiRadialLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiRadialLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiRadialLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiRadialLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiRadialLink; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniTLH ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' 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 UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' 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; DAT2TLH]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniTLH); if rD ~=1 && 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 [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 Tunnel Link if saltoTLH == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiTiltLinkH = cell(rd+rt,4*rTLH); else DatiTiltLinkH = cell(rt,4*rTLH); end else DatiTiltLinkH = cell(rd,4*rTLH); end NTiltLinkH = cell2mat(NodoTiltLinkH(:,2)); col = 4; ii = 1; 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, Val6 from RawDataView where Date = ''' ... datainiTLH ''' and Time >= ''' tempoiniTLH ''' and UnitName = ''' IDcentralina ''' and ToolNameID = '''... DTcatena ''' 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, 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-3; 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+4; 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 = []; DatiRaw = []; 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,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of 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 4 per identificare le temperature Int = jj/4; if floor(Int) == Int % Controllo ampolle if str2double(DatiTiltLinkH(1,jj)) > 1000 if rDR==1 && cDR==1 || NuovoZeroTLH == 0 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 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,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd'); break end 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/4; 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 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 % date 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 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 end if NuovoZeroTLH == 1 [rDR,cDR] = size(DatiRaw); 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 UnitName = ''' IDcentralina ''' and ToolNameID = ''' DTcatena ... ''' 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; DAT2TLHRH]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniTLHRH); if rD ~=1 && 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 [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 Tunnel Link if saltoTLHRH == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiTiltLinkHRH = cell(rd+rt,6*rTLHRH); else DatiTiltLinkHRH = cell(rt,6*rTLHRH); end else DatiTiltLinkHRH = cell(rd,6*rTLHRH); end NTiltLinkHRH = cell2mat(NodoTiltLinkHRH(:,2)); col = 6; ii = 1; 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 UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' 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 okdatTLHRH = ['Data of node number ' num2str(ii) ' of ' ... num2str(rTLHRH) ' Tilt Link HR H nodes downloaded correctly']; fprintf(fileID,fmt,okdatTLHRH); 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 = []; DatiRaw = []; 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,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of 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)) > 1000 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. '... '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',DatiTiltLinkHRH(:,jj))); idxND = find(strcmp('No Data',DatiTiltLinkHRH(1,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,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd'); break end DatiTiltLinkHRH(indice,jj) = DatiTiltLinkHRH(indice-1,jj); ErrTiltLinkHRH(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r % date check = isnan(cell2mat(DatiTiltLinkHRH(nnn,jj))); if check == 1 DatiTiltLinkHRH(nnn,jj) = DatiTiltLinkHRH(nnn-1,jj); ErrTiltLinkHRH(nnn,jj) = 1; Ncorr = Ncorr+ri; 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 end if NuovoZeroTLHRH == 1 [rDR,cDR] = size(DatiRaw); 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)= ''' tempoiniPCL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumPCL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniPCL = curs.Data; Ntempo = DATiniPCL; [r,c] = size(DATiniPCL); saltoPCL = 0; if r==1 && c==1 textdatPCL = 'Warning: error reading PreConv Link (control unit data)!'; fprintf(fileID,fmt,textdatPCL); saltoPCL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiPCL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumPCL ''' ']; curs = exec(conn,comando); curs = fetch(curs); % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DAT2PCL = curs.Data; Ndate = DAT2PCL; if saltoPCL == 1 DATiniPCL = DAT2PCL; end Check = size(DAT2PCL); if Check(1,2) > 1 % ho superato il primo giorno if saltoPCL == 0 DATiniPCL = [DATiniPCL; DAT2PCL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniPCL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniPCL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPCL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniPCL = T; else DATiniPCL = []; end % Scarico dati relativi ai singoli nodi [rd,~] = size(Ndate); [rt,~] = size(Ntempo); if saltoPCL == 0 % creo la matrice per i datiPreConvLink if Check(1,2) > 1 DatiPreConvLink = cell(rd+rt,4*rPCL); else DatiPreConvLink = cell(rt,4*rPCL); end else DatiPreConvLink = cell(rd,4*rPCL); end NPreConvLink = cell2mat(NodoPreConvLink(:,2)); col = 4; ii = 1; w = 0; while ii <= rPCL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NPreConvLink(ii,1); nNodo = num2str(nN); comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' ... datainiPCL ''' and Time >= ''' tempoiniPCL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoPCL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date > ''' ... datainiPCL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoPCLd = 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. ini_col = col-3; if saltoPCL == 0 DatiPreConvLink(1:rt,ini_col:col) = DATnodoPCL(:,:); else DatiPreConvLink(1:rd,ini_col:col) = DATnodoPCL(:,:); end [rn,~] = size(DATnodoPCLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoPCLd(i,:) = DATnodoPCLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node PreConv Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoPCL == 0 DatiPreConvLink(rt+1:rt+rd,ini_col:col) = DATnodoPCLd(:,:); end else DatiPreConvLink = DatiPreConvLink(1:end,:); end okdatPCL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rPCL) ' PreConv Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatPCL); col = col+4; ii = ii+1; end if w == 0 wardat = 'There are not warning for PreConv 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(DatiPreConvLink); ErrPreConvLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroPCL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiPCL)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiPreConvLink(1,jj))); idxND = find(strcmp('No Data',DatiPreConvLink(1,jj))); idxT = find(strcmp('---',DatiPreConvLink(1,jj))); idxT2 = find(strcmp('-',DatiPreConvLink(1,jj))); idxE2 = find(strcmp('Err2',DatiPreConvLink(1,jj))); idxE255 = find(strcmp('Err255',DatiPreConvLink(1,jj))); idxD = find(strcmp('DMUXe',DatiPreConvLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiPreConvLink(1,jj))); idxN = find(strcmp('null',DatiPreConvLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Pre Conv Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroPCL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiPCL)+1 < now datainiPCL = datestr(datenum(datainiPCL)+1,'yyyy-mm-dd'); break else yesPCL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiPCL = datestr(datenum(datainiPCL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiPreConvLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrPreConvLink(1,jj) = 1; wardat = 'Data of PreConv Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiPCL = datestr(datenum(datainiPCL)-1,'yyyy-mm-dd'); break end end end end if ESCI == 0 % Cerco i multipli di 4 per identificare le temperature Int = jj/4; if floor(Int) == Int % Controllo ampolle if str2double(DatiPreConvLink(1,jj)) > 1000 if rDR==1 && cDR==1 || NuovoZeroPCL == 0 NAN = 0; ESCI = 1; if datenum(datainiPCL)+1 < now datainiPCL = datestr(datenum(datainiPCL)+1,'yyyy-mm-dd'); break else yesPCL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiPCL = datestr(datenum(datainiPCL)-1,'yyyy-mm-dd'); break else DatiPreConvLink(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2))); DatiPreConvLink(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1))); DatiPreConvLink(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj))); DatiPreConvLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrPreConvLink(1,jj) = 1; wardat = ['Data of PreConv 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',DatiPreConvLink(:,jj))); idxND = find(strcmp('No Data',DatiPreConvLink(:,jj))); idxT = find(strcmp('---',DatiPreConvLink(:,jj))); idxT2 = find(strcmp('-',DatiPreConvLink(:,jj))); idxE2 = find(strcmp('Err2',DatiPreConvLink(:,jj))); idxE255 = find(strcmp('Err255',DatiPreConvLink(:,jj))); idxD = find(strcmp('DMUXe',DatiPreConvLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiPreConvLink(:,jj))); idxN = find(strcmp('null',DatiPreConvLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiPCL = datestr(datenum(datainiPCL)-1,'yyyy-mm-dd'); break end DatiPreConvLink(indice,jj) = DatiPreConvLink(indice-1,jj); ErrPreConvLink(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end for ii = 2:r % Cerco i multipli di 4 per identificare le temperature Int = jj/4; if floor(Int) == Int % Controllo ampolle if str2double(DatiPreConvLink(ii,jj)) > 1000 DatiPreConvLink(ii,jj-6:jj) = DatiPreConvLink(ii-1,jj-6:jj); ErrPreConvLink(ii,jj) = 1; wardat = ['Data of PreConv 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 % date check = isnan(cell2mat(DatiPreConvLink(nnn,jj))); if check == 1 DatiPreConvLink(nnn,jj) = DatiPreConvLink(nnn-1,jj); ErrPreConvLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end end corrdat = ['' num2str(Ncorr) ' corrections of PreConv Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiPreConvLink = [DATiniPCL str2double(DatiPreConvLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiPreConvLink(a,1) == DatiPreConvLink(a-1,1) DatiPreConvLink(a,:) = []; r = r-1; else a = a+1; end end end if NuovoZeroPCL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiPreConvLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiPreConvLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiPreConvLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiPreConvLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiPreConvLink; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniPCLHR ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumPCLHR ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniPCLHR = curs.Data; Ntempo = DATiniPCLHR; [r,c] = size(DATiniPCLHR); saltoPCLHR = 0; if r==1 && c==1 textdatPCLHR = 'Warning: error reading PreConv Link HR (control unit data)!'; fprintf(fileID,fmt,textdatPCLHR); saltoPCLHR = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiPCLHR ''' and UnitName = ''' IDcentralina ''' and ToolNameID = '''... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ''' ... NodeNumPCLHR ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2PCLHR = curs.Data; Ndate = DAT2PCLHR; if saltoPCLHR == 1 DATiniPCLHR = DAT2PCLHR; end % Concateno le informazioni relative a Step 1 e 2 (se necessario...) Check = size(DAT2PCLHR); if Check(1,2) > 1 % ho superato il primo giorno if saltoPCLHR == 1 DATiniPCLHR = [DATiniPCLHR; DAT2PCLHR]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniPCLHR); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniPCLHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPCLHR(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniPCLHR = T; else DATiniPCLHR = []; end % Scarico dati relativi ai singoli nodi [rd,~] = size(Ndate); [rt,~] = size(Ntempo); % creo la matrice per i dati if saltoPCLHR == 0 if Check(1,2) > 1 DatiPreConvLinkHR = cell(rd+rt,3*rPCLHR); else DatiPreConvLinkHR = cell(rt,3*rPCLHR); end else DatiPreConvLinkHR = cell(rd,3*rPCLHR); end NPreConvLinkHR = cell2mat(NodoPreConvLinkHR(:,2)); ii = 1; col = 3; w = 0; while ii <= rPCL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NPreConvLinkHR(ii,1); nNodo = num2str(nN); comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' datainiPCLHR ''' and Time >= ''' ... tempoiniPCLHR ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoPCLHR = 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 > ''' ... datainiPCLHR ''' and UnitName = ''' IDcentralina ''' and ToolNameID = '''... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoPCLHRd = curs.Data; % Concateno i dati relativi a Step 1 e 2 per il nodo ii-esimo. ini_col = col-5; if saltoPCLHR == 0 DatiPreConvLinkHR(1:rt,ini_col:col) = DATnodoPCLHR(:,:); else DatiPreConvLinkHR(1:rd,ini_col:col) = DATnodoPCLHR(:,:); end [rn,~] = size(DATnodoTLHRdH); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoPCLHRd(i,:) = DATnodoPCLHRd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node PreConv Link HR ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoPCLHR == 0 DatiPreConvLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoPCLHRd(:,:); end else DatiPreConvLinkHR = DatiPreConvLinkHR(1:end,:); end okdatPCLHR = ['Data of node number ' num2str(ii) ' of ' ... num2str(rPCLHR) ' PreConv Link HR nodes downloaded correctly']; fprintf(fileID,fmt,okdatPCLHR); col = col+3; ii = ii+1; end if w == 0 wardat = 'There are not warning for PreConv 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(DatiPreConvLinkHR); ErrPreConvLinkHR = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroPCLHR == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiPCLHR)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiPreConvLinkHR(1,jj))); idxND = find(strcmp('No Data',DatiPreConvLinkHR(1,jj))); idxT = find(strcmp('---',DatiPreConvLinkHR(1,jj))); idxT2 = find(strcmp('-',DatiPreConvLinkHR(1,jj))); idxE2 = find(strcmp('Err2',DatiPreConvLinkHR(1,jj))); idxE255 = find(strcmp('Err255',DatiPreConvLinkHR(1,jj))); idxD = find(strcmp('DMUXe',DatiPreConvLinkHR(1,jj))); idxE1F = find(strcmp('Err1File',DatiPreConvLinkHR(1,jj))); idxN = find(strcmp('null',DatiPreConvLinkHR(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of PreConv Link HR nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroPCLHR == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiPCLHR)+1 < now datainiPCLHR = datestr(datenum(datainiPCLHR)+1,'yyyy-mm-dd'); break else yesPCLHR = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiPCLHR = datestr(datenum(datainiPCLHR)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiPreConvLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrPreConvLinkHR(1,jj) = 1; wardat = 'Data of PreConv 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; datainiPCLHR = datestr(datenum(datainiPCLHR)-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(DatiPreConvLinkHR(1,jj)) < 500 if rDR==1 && cDR==1 || NuovoZeroPCLHR == 0 NAN = 0; ESCI = 1; if datenum(datainiPCLHR)+1 < now datainiPCLHR = datestr(datenum(datainiPCLHR)+1,'yyyy-mm-dd'); break else yesPCLHR = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiPCLHR = datestr(datenum(datainiPCLHR)-1,'yyyy-mm-dd'); break else DatiPreConvLinkHR(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4))); DatiPreConvLinkHR(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3))); DatiPreConvLinkHR(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2))); DatiPreConvLinkHR(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1))); DatiPreConvLinkHR(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj))); DatiPreConvLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrPreConvLinkHR(1,jj) = 1; wardat = ['Data of PreConv 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; 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',DatiPreConvLinkHR(:,jj))); idxND = find(strcmp('No Data',DatiPreConvLinkHR(:,jj))); idxT = find(strcmp('---',DatiPreConvLinkHR(:,jj))); idxT2 = find(strcmp('-',DatiPreConvLinkHR(:,jj))); idxE2 = find(strcmp('Err2',DatiPreConvLinkHR(:,jj))); idxE255 = find(strcmp('Err255',DatiPreConvLinkHR(:,jj))); idxD = find(strcmp('DMUXe',DatiPreConvLinkHR(:,jj))); idxE1F = find(strcmp('Err1File',DatiPreConvLinkHR(:,jj))); idxN = find(strcmp('null',DatiPreConvLinkHR(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiPCLHR = datestr(datenum(datainiPCLHR)-1,'yyyy-mm-dd'); break end DatiPreConvLinkHR(indice,jj) = DatiPreConvLinkHR(indice-1,jj); ErrPreConvLinkHR(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r % date check = isnan(cell2mat(DatiPreConvLinkHR(nnn,jj))); if check == 1 DatiPreConvLinkHR(nnn,jj) = DatiPreConvLinkHR(nnn-1,jj); ErrPreConvLinkHR(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of PreConv Link HR data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiPreConvLinkHR = [DATiniPCLHR str2double(DatiPreConvLinkHR)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiPreConvLinkHR(a,1) == DatiPreConvLinkHR(a-1,1) DatiPreConvLinkHR(a,:) = []; r = r-1; else a = a+1; end end end end if NuovoZeroPCLHR == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiPreConvLinkHR(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiPreConvLinkHR(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiPreConvLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiPreConvLinkHR(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiPreConvLinkHR; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniPL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' 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 Pressure 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 UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' 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; DAT2PL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniPL); if rD ~=1 && 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 [rd,~] = size(Ndate); % numero di dati successivi al primo giorno di calcolo [rt,~] = size(Ntempo); % numero di dati del primo giorno di calcolo if saltoPL == 0 if Check(1,2) > 1 % creo la matrice per i dati Pressure Link DatiPressureLink = cell(rd+rt,rPrL); else DatiPressureLink = cell(rt,rPrL); end else DatiPressureLink = cell(rd,rPrL); end NPressureLink = cell2mat(NodoPressureLink(:,2)); col = 1; ii = 1; w = 0; while ii <= rPrL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NPressureLink(ii,1); nNodo = num2str(nN); comando = ['select Val0 from RawDataView where Date = ''' ... datainiPL ''' and Time >= ''' tempoiniPL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' 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 from RawDataView where Date > ''' ... datainiPL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoPLd = 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 saltoPL == 0 DatiPressureLink(1:rt,col) = DATnodoPL(:,:); else DatiPressureLink(1:rd,col) = DATnodoPL(:,:); 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 Pressure Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoPL == 0 DatiPressureLink(rt+1:rt+rd,col) = DATnodoPLd(:,:); end else DatiPressureLink = DatiPressureLink(1:end,:); end okdatPL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rPrL) ' Pressure Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatPL); ii = ii+1; col = col+1; end if w == 0 wardat = 'There are not warning for Pressure 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(DatiPressureLink); ErrPressureLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroPrL == 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 = []; 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.',DatiPressureLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiPressureLink(dis,jj)) == 0 DatiPressureLink = DatiPressureLink(dis:end,:); DATiniPL = DATiniPL(dis:end,:); [r,c] = size(DatiPressureLink); 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 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',DatiPressureLink(1,jj))); idxT = find(strcmp('---',DatiPressureLink(1,jj))); idxT2 = find(strcmp('-',DatiPressureLink(1,jj))); idxE2 = find(strcmp('Err2',DatiPressureLink(1,jj))); idxE255 = find(strcmp('Err255',DatiPressureLink(1,jj))); idxD = find(strcmp('DMUXe',DatiPressureLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiPressureLink(1,jj))); idxN = find(strcmp('null',DatiPressureLink(1,jj))); idxRX = find(strcmp('No RX',DatiPressureLink(1,jj))); idxI = find(strcmp('id Error',DatiPressureLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiPressureLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiPressureLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiPressureLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiPressureLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiPressureLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiPressureLink(1,jj))); idxNA = find(strcmp('NotAv',DatiPressureLink(1,jj))); idxND = find(strcmp('No Data',DatiPressureLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiPressureLink(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 Pressure Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroPrL == 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 DatiPressureLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrPressureLink(1,jj) = 1; wardat = 'Data of Pressure 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',DatiPressureLink(:,jj))); idxT = find(strcmp('---',DatiPressureLink(:,jj))); idxT2 = find(strcmp('-',DatiPressureLink(:,jj))); idxE2 = find(strcmp('Err2',DatiPressureLink(:,jj))); idxE255 = find(strcmp('Err255',DatiPressureLink(:,jj))); idxD = find(strcmp('DMUXe',DatiPressureLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiPressureLink(:,jj))); idxN = find(strcmp('null',DatiPressureLink(:,jj))); idxRX = find(strcmp('No RX',DatiPressureLink(:,jj))); idxI = find(strcmp('id Error',DatiPressureLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiPressureLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiPressureLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiPressureLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiPressureLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiPressureLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiPressureLink(:,jj))); idxNA = find(strcmp('NotAv',DatiPressureLink(:,jj))); idxND = find(strcmp('No Data',DatiPressureLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiPressureLink(:,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; datainiPL = datestr(datenum(datainiPL)-1,'yyyy-mm-dd'); break else DatiPressureLink(indice,jj) = DatiPressureLink(indice-1,jj); ErrPressureLink(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(DatiPressureLink(nnn,jj))); if check == 1 DatiPressureLink(nnn,jj) = DatiPressureLink(nnn-1,jj); ErrPressureLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Pressure Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiPressureLink = [DATiniPL str2double(DatiPressureLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiPressureLink(a,1) == DatiPressureLink(a-1,1) DatiPressureLink(a,:) = []; r = r-1; else a = a+1; end end end end end if NuovoZeroPrL == 1 && yesPL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiPressureLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiPressureLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiPressureLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiPressureLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiPressureLink; 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 rD ~=1 && cD ~=1 T = [cell2mat(DATiniLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniLL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniLL = T; else DATiniLL = []; end % Scarico dati relativi ai singoli nodi [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 = []; DatiRaw = []; 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 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)= ''' tempoiniEL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniEL = curs.Data; Ntempo = DATiniEL; [r,c] = size(DATiniEL); saltoEL = 0; if r==1 && c==1 textdatEL = 'Warning: error reading Extensometer Link (control unit data)!'; fprintf(fileID,fmt,textdatEL); saltoEL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2EL = curs.Data; Ndate = DAT2EL; if saltoEL == 1 DATiniEL = DAT2EL; end Check = size(DAT2EL); if Check(1,2) > 1 % ho superato il primo giorno if saltoEL == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATiniEL = [DATiniEL; DAT2EL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniEL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniEL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniEL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniEL = T; else DATiniEL = []; 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 col = 1; ii = 1; if saltoEL == 0 if Check(1,2) > 1 DatiExtensometerLink = cell(rd+rt,rEL); DatiNTCExtensometerLink = cell(rd+rt,rEL); else DatiExtensometerLink = cell(rt,rEL); DatiNTCExtensometerLink = cell(rt,rEL); end else DatiExtensometerLink = cell(rd,rEL); DatiNTCExtensometerLink = cell(rd,rEL); end DatiExtensometerLink_Rif = cell(150,rEL); NExtensometerLink = cell2mat(NodoExtensometerLink(:,2)); w = 0; while ii <= rEL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NExtensometerLink(ii,1); nNodo = num2str(nN); % Dato comando = ['select Val0 from RawDataView where Date = ''' ... datainiEL ''' and Time >= ''' tempoiniEL ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoEL = curs.Data; % Dato comando = ['select Val0 from RawDataView where Date > ''' ... datainiEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoELd = curs.Data; % Riferimento comando = ['select Val0 from RawDataView where Date = ''' ... datestr(Date_Rif_EL,'yyyy-mm-dd') ''' and Time >= ''' datestr(Date_Rif_EL,'HH:MM:SS')... ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoEL_Rif = curs.Data; if ChEL(ii,1) == 1 % T DATnodoEL_NTC = 0; DATnodoELd_NTC = 0; elseif ChEL(ii,1) >= 2 if EL_NTC(ii,1)==1 % Temperatura comando = ['select Val1 from RawDataView where Date = ''' ... datainiEL ''' and Time >= ''' tempoiniEL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoEL_NTC = curs.Data; comando = ['select Val1 from RawDataView where Date > ''' ... datainiEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoELd_NTC = curs.Data; else DATnodoEL_NTC = 0; DATnodoELd_NTC = 0; end end % 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 saltoEL == 0 if ChEL(ii,1) >= 2 if EL_NTC(ii,1)==1 DatiExtensometerLink(1:rt,col) = DATnodoEL(:,:); DatiNTCExtensometerLink(1:rt,col) = DATnodoEL_NTC(:,:); else DatiExtensometerLink(1:rt,col) = DATnodoEL(:,:); %#ok<*AGROW> end elseif ChEL(ii,1) == 1 DatiExtensometerLink(1:rt,col) = DATnodoEL(:,:); %#ok<*AGROW> end else if ChEL(ii,1) >= 2 if EL_NTC(ii,1)==1 DatiExtensometerLink(1:rd,col) = DATnodoEL(:,:); DatiNTCExtensometerLink(1:rd,col) = DATnodoEL_NTC(:,:); else DatiExtensometerLink(1:rd,col) = DATnodoEL(:,:); %#ok<*AGROW> end elseif ChEL(ii,1) == 1 DatiExtensometerLink(1:rd,col) = DATnodoEL(:,:); %#ok<*AGROW> end end % Riferimento [dim,~] = size(DATnodoEL_Rif); % controllo date DatiExtensometerLink_Rif(1:dim,col) = DATnodoEL_Rif; if col == 1 DatiExtensometerLink_Rif(dim+1:end,:) = []; end [rn,~] = size(DATnodoELd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoELd(i,:) = DATnodoELd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Extensometer Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end [rnT,~] = size(DATnodoELd_NTC); % controllo date if rnT < rd % normalmente sono uguali for i = rnT+1:rd DATnodoELd_NTC(i,:) = DATnodoELd_NTC(rnT,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node Extensometer Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoEL == 0 if ChEL(ii,1) == 1 DatiExtensometerLink(rt+1:rt+rd,col) = DATnodoELd(:,:); elseif EL_NTC(ii,1) == 0 DatiExtensometerLink(rt+1:rt+rd,col) = DATnodoELd(:,:); else DatiExtensometerLink(rt+1:rt+rd,col) = DATnodoELd(:,:); DatiNTCExtensometerLink(rt+1:rt+rd,col) = DATnodoELd_NTC(:,:); end end else DatiExtensometerLink = DatiExtensometerLink(1:end,:); DatiNTCExtensometerLink = DatiNTCExtensometerLink(1:end,:); end okdatEL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rEL) ' Extensometer Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatEL); ii = ii+1; col = col+1; end if w == 0 wardat = 'There are not warning for Extensometer 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(DatiExtensometerLink); ErrExtensometerLink = zeros(r,c); Ncorr = 0; NAN = 1; ESCI = 0; RIF = 0; row = 1; if NuovoZeroEL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiEL)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end FileRif = ['' IDcentralina '-' DTcatena '-ExtensometerRif.csv']; while RIF == 0 if row <= dim % Controllo la data di riferimento idxE = find(strcmp('Err1',DatiExtensometerLink_Rif(row,:))); idxT = find(strcmp('---',DatiExtensometerLink_Rif(row,:))); idxT2 = find(strcmp('-',DatiExtensometerLink_Rif(row,:))); idxE2 = find(strcmp('Err2',DatiExtensometerLink_Rif(row,:))); idxE255 = find(strcmp('Err255',DatiExtensometerLink_Rif(row,:))); idxD = find(strcmp('DMUXe',DatiExtensometerLink_Rif(row,:))); idxE1F = find(strcmp('Err1File',DatiExtensometerLink_Rif(row,:))); idxN = find(strcmp('null',DatiExtensometerLink_Rif(row,:))); idxRX = find(strcmp('No RX',DatiExtensometerLink_Rif(row,:))); idxI = find(strcmp('id Error',DatiExtensometerLink_Rif(row,:))); idxM = find(strcmp('MUX id Error',DatiExtensometerLink_Rif(row,:))); idxC = find(strcmp('CH n. Error',DatiExtensometerLink_Rif(row,:))); idxU = find(strcmp('Unknown Error',DatiExtensometerLink_Rif(row,:))); idxMC = find(strcmp('MsgCorrup',DatiExtensometerLink_Rif(row,:))); idxNS = find(strcmp('NotSupp',DatiExtensometerLink_Rif(row,:))); idxU2 = find(strcmp('Unknown',DatiExtensometerLink_Rif(row,:))); idxNA = find(strcmp('NotAv',DatiExtensometerLink_Rif(row,:))); idxDIS = find(strcmp('Dis.',DatiExtensometerLink_Rif(row,:))); idxND = find(strcmp('No Data',DatiExtensometerLink_Rif(row,:))); idxCE = find(strcmp('CH n. Er',DatiExtensometerLink_Rif(row,:))); 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); if ri >= 1 && isempty(idx) == 0 % Se almeno uno è in errore, allora guardo la riga dopo if isfile(FileRif) == 1 DatiRif = csvread(FileRif); if isnan(DatiRif(1,ri)) == 0 DatiExtensometerLink_Rif(1,ri) = cellstr(num2str(DatiRif(1,ri))); else row = row+1; end else row = row+1; end else RIF = 1; DatiExtensometerLink_Rif = DatiExtensometerLink_Rif(row,:); end else Date_Rif_EL = datestr(datenum(Date_Rif_EL)+1,'yyyy-mm-dd'); RIF = 1; NAN = 0; end end if NAN == 1 for jj=1:c % Se il nodo è Dis., devo aumentare di uno la data (il nodo non % è ancora stato installato!) if strcmp('Dis.',DatiExtensometerLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiExtensometerLink(dis,jj)) == 0 DatiExtensometerLink = DatiExtensometerLink(dis:end,:); DATiniEL = DATiniEL(dis:end,:); DatiNTCExtensometerLink = DatiNTCExtensometerLink(dis:end,:); [r,c] = size(DatiExtensometerLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(datainiEL)+1 < now datainiEL = datestr(datenum(datainiEL)+1,'yyyy-mm-dd'); break else yesEL = 0; end end end end end if DIS ~= 1 && yesEL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiExtensometerLink(1,jj))); idxT = find(strcmp('---',DatiExtensometerLink(1,jj))); idxT2 = find(strcmp('-',DatiExtensometerLink(1,jj))); idxE2 = find(strcmp('Err2',DatiExtensometerLink(1,jj))); idxE255 = find(strcmp('Err255',DatiExtensometerLink(1,jj))); idxD = find(strcmp('DMUXe',DatiExtensometerLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiExtensometerLink(1,jj))); idxN = find(strcmp('null',DatiExtensometerLink(1,jj))); idxRX = find(strcmp('No RX',DatiExtensometerLink(1,jj))); idxI = find(strcmp('id Error',DatiExtensometerLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiExtensometerLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiExtensometerLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiExtensometerLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiExtensometerLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiExtensometerLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiExtensometerLink(1,jj))); idxNA = find(strcmp('NotAv',DatiExtensometerLink(1,jj))); idxND = find(strcmp('No Data',DatiExtensometerLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiExtensometerLink(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 Extensometer Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiEL)+1 < now datainiEL = datestr(datenum(datainiEL)+1,'yyyy-mm-dd'); break else yesEL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiEL = datestr(datenum(datainiEL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiExtensometerLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrExtensometerLink(1,jj) = 1; wardat = 'Data of Extensometer Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiEL = datestr(datenum(datainiEL)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c idxE = find(strcmp('Err1',DatiExtensometerLink(:,jj))); idxT = find(strcmp('---',DatiExtensometerLink(:,jj))); idxT2 = find(strcmp('-',DatiExtensometerLink(:,jj))); idxE2 = find(strcmp('Err2',DatiExtensometerLink(:,jj))); idxE255 = find(strcmp('Err255',DatiExtensometerLink(:,jj))); idxD = find(strcmp('DMUXe',DatiExtensometerLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiExtensometerLink(:,jj))); idxN = find(strcmp('null',DatiExtensometerLink(:,jj))); idxRX = find(strcmp('No RX',DatiExtensometerLink(:,jj))); idxI = find(strcmp('id Error',DatiExtensometerLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiExtensometerLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiExtensometerLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiExtensometerLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiExtensometerLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiExtensometerLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiExtensometerLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiExtensometerLink(:,jj))); idxNA = find(strcmp('NotAv',DatiExtensometerLink(:,jj))); idxND = find(strcmp('No Data',DatiExtensometerLink(:,jj))); idx = union(idxND,idxE); idx = union(idx,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,idxCE); 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; datainiEL = datestr(datenum(datainiEL)-1,'yyyy-mm-dd'); break else DatiExtensometerLink(indice,jj) = DatiExtensometerLink(indice-1,jj); ErrExtensometerLink(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(DatiExtensometerLink(nnn,jj))); if check == 1 DatiExtensometerLink(nnn,jj) = DatiExtensometerLink(nnn-1,jj); ErrExtensometerLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Extensometer Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiExtensometerLink = [DATiniEL str2double(DatiExtensometerLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiExtensometerLink(a,1) == DatiExtensometerLink(a-1,1) DatiExtensometerLink(a,:) = []; r = r-1; else a = a+1; end end end end if ESCI == 0 if sum(EL_NTC(:,1))>0 if DIS ~= 1 && yesEL == 1 % T [r,c] = size(DatiNTCExtensometerLink); Ncorr = 0; if NuovoZeroEL == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(datainiEL)); else rDR = 1; cDR = 1; RawDateNTC = []; DatiRawNTC = []; 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',DatiNTCExtensometerLink(1,jj))); idxT = find(strcmp('---',DatiNTCExtensometerLink(1,jj))); idxT2 = find(strcmp('-',DatiNTCExtensometerLink(1,jj))); idxE2 = find(strcmp('Err2',DatiNTCExtensometerLink(1,jj))); idxE255 = find(strcmp('Err255',DatiNTCExtensometerLink(1,jj))); idxD = find(strcmp('DMUXe',DatiNTCExtensometerLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTCExtensometerLink(1,jj))); idxN = find(strcmp('null',DatiNTCExtensometerLink(1,jj))); idxRX = find(strcmp('No RX',DatiNTCExtensometerLink(1,jj))); idxI = find(strcmp('id Error',DatiNTCExtensometerLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTCExtensometerLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTCExtensometerLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTCExtensometerLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCExtensometerLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTCExtensometerLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTCExtensometerLink(1,jj))); idxNA = find(strcmp('NotAv',DatiNTCExtensometerLink(1,jj))); idxND = find(strcmp('No Data',DatiNTCExtensometerLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCExtensometerLink(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 NTC of Extensometer Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiEL)+1 < now datainiEL = datestr(datenum(datainiEL)+1,'yyyy-mm-dd'); break else yesEL = 0; end else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; datainiEL = datestr(datenum(datainiEL)-1,'yyyy-mm-dd'); break else DatiNTCExtensometerLink(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if ErrExtensometerLink(indice,jj) == 0 ErrExtensometerLink(indice,jj) = 0.5; else ErrExtensometerLink(indice,jj) = 1; end wardat = 'Data of NTC of Extensometer 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',DatiNTCExtensometerLink(:,jj))); idxT = find(strcmp('-',DatiNTCExtensometerLink(:,jj))); idxT3 = find(strcmp('---',DatiNTCExtensometerLink(:,jj))); idxE2 = find(strcmp('Err2',DatiNTCExtensometerLink(:,jj))); idxE255 = find(strcmp('Err255',DatiNTCExtensometerLink(:,jj))); idxD = find(strcmp('DMUXe',DatiNTCExtensometerLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTCExtensometerLink(:,jj))); idxN = find(strcmp('null',DatiNTCExtensometerLink(:,jj))); idxRX = find(strcmp('No RX',DatiNTCExtensometerLink(:,jj))); idxI = find(strcmp('id Error',DatiNTCExtensometerLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTCExtensometerLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTCExtensometerLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTCExtensometerLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCExtensometerLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTCExtensometerLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTCExtensometerLink(:,jj))); idxNA = find(strcmp('NotAv',DatiNTCExtensometerLink(:,jj))); idxND = find(strcmp('No Data',DatiNTCExtensometerLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCExtensometerLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxT3); 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; datainiEL = datestr(datenum(datainiEL)-1,'yyyy-mm-dd'); break else DatiNTCExtensometerLink(indice,jj) = DatiNTCExtensometerLink(indice-1,jj); if ErrExtensometerLink(indice,jj) == 0 ErrExtensometerLink(indice,jj) = 0.5; else ErrExtensometerLink(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(DatiNTCExtensometerLink(nnn,jj))); if check == 1 DatiNTCExtensometerLink(nnn,jj) = DatiNTCExtensometerLink(nnn-1,jj); if ErrExtensometerLink(indice,jj) == 0 ErrExtensometerLink(indice,jj) = 0.5; else ErrExtensometerLink(indice,jj) = 1; end Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC for Extensometer Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTCExtensometerLink = [DATiniEL str2double(DatiNTCExtensometerLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTCExtensometerLink(a,1) == DatiNTCExtensometerLink(a-1,1) DatiNTCExtensometerLink(a,:) = []; r = r-1; else a = a+1; end end end end end end end if NuovoZeroEL == 1 && yesEL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiExtensometerLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiExtensometerLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiExtensometerLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiExtensometerLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiExtensometerLink; 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)<=DatiNTCExtensometerLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTCExtensometerLink(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTCExtensometerLink(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTCExtensometerLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTCExtensometerLink; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTCExtensometerLink; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(EL_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end if isfile(FileRif) == 0 csvwrite(FileRif,str2double(DatiExtensometerLink_Rif)); end end %% 3D Extensometer Link if yes3DEL == 0 % Non ci sono 3D Extensometer Link Dati3DExtensometerLink = []; Dati3DExtensometerLink_Rif = []; Err3DExtensometerLink = []; DatiNTC3DExtensometerLink = []; ErrNTC3DExtensometerLink = []; Ch3DEL = []; EL3D_NTC = []; wardat = 'lettura function: there are not 3D Extensometer Link'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-3DExtensometer-RawData.csv']; % Specifico per 3D Extensometer Link RawDataFileNTC = ['' IDcentralina '-' DTcatena '-3DExtensometerNTC-RawData.csv']; % Specifico per NTC 3D Extensometer Link Ch3DEL = cell2mat(Nodo3DExtensometerLink(:,4)); EL3D_NTC = cell2mat(Nodo3DExtensometerLink(:,5)); NAN = 0; DIS = 0; while NAN == 0 if datenum(dataini3DEL) == datenum(Data(1,1)) tempoini3DEL = char(Data(1,2)); end NodeType = '3D Extensometer Link'; NodeNum3DEL = num2str(cell2mat(Nodo3DExtensometerLink(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 = ''' ... dataini3DEL ''' and Time >= ''' tempoini3DEL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNum3DEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATini3DEL = curs.Data; Ntempo = DATini3DEL; [r,c] = size(DATini3DEL); salto3DEL = 0; if r==1 && c==1 textdat3DEL = 'Warning: error reading 3D Extensometer Link (control unit data)!'; fprintf(fileID,fmt,textdat3DEL); salto3DEL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... dataini3DEL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNum3DEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT23DEL = curs.Data; Ndate = DAT23DEL; if salto3DEL == 1 DATini3DEL = DAT23DEL; end Check = size(DAT23DEL); if Check(1,2) > 1 % ho superato il primo giorno if salto3DEL == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATini3DEL = [DATini3DEL; DAT23DEL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATini3DEL); if rD ~=1 && cD ~=1 T = [cell2mat(DATini3DEL(:,1)) repmat(' ', [rD,1]) cell2mat(DATini3DEL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATini3DEL = T; else DATini3DEL = []; 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 if salto3DEL == 0 % creo la matrice per i dati 3D Extensometer Link if Check(1,2) > 1 Dati3DExtensometerLink = cell(rd+rt,3*r3DEL); DatiNTC3DExtensometerLink = cell(rd+rt,r3DEL); else Dati3DExtensometerLink = cell(rt,3*r3DEL); DatiNTC3DExtensometerLink = cell(rt,r3DEL); end else Dati3DExtensometerLink = cell(rd,3*r3DEL); DatiNTC3DExtensometerLink = cell(rd,r3DEL); end Dati3DExtensometerLink_Rif = cell(150,3*r3DEL); N3DExtensometerLink = cell2mat(Nodo3DExtensometerLink(:,2)); col = 1; colT = 1; ii = 1; w = 0; while ii <= r3DEL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = N3DExtensometerLink(ii,1); nNodo = num2str(nN); comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' ... dataini3DEL ''' and Time >= ''' tempoini3DEL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DEL = curs.Data; comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ... dataini3DEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DELd = curs.Data; % Riferimento comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' ... datestr(Date_Rif_3DEL,'yyyy-mm-dd') ''' and Time >= ''' datestr(Date_Rif_3DEL,'HH:MM:SS')... ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DEL_Rif = curs.Data; if Ch3DEL(ii,1) == 3 % T DATnodo3DEL_NTC = 0; DATnodo3DELd_NTC = 0; elseif Ch3DEL(ii,1) == 4 if EL3D_NTC(ii,1)==1 comando = ['select Val3 from RawDataView where Date = ''' ... dataini3DEL ''' and Time >= ''' tempoini3DEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DEL_NTC = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val3 from RawDataView where Date > ''' ... dataini3DEL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType... ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DELd_NTC = curs.Data; else DATnodo3DEL_NTC = 0; DATnodo3DELd_NTC = 0; end end % 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 salto3DEL == 0 Dati3DExtensometerLink(1:rt,col:col+2) = DATnodo3DEL(:,:); if Ch3DEL(ii,1) == 1 DatiNTC3DExtensometerLink(1:rt,colT) = DATnodo3DEL_NTC(:,:); end else Dati3DExtensometerLink(1:rd,col:col+2) = DATnodo3DEL(:,:); if Ch3DEL(ii,1) == 1 DatiNTC3DExtensometerLink(1:rd,colT) = DATnodo3DEL_NTC(:,:); end end % Riferimento [dim,~] = size(DATnodo3DEL_Rif); % controllo date Dati3DExtensometerLink_Rif(1:dim,col:col+2) = DATnodo3DEL_Rif; if col == 1 Dati3DExtensometerLink_Rif(dim+1:end,:) = []; end [rn,~] = size(DATnodo3DELd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodo3DELd(i,:) = DATnodo3DELd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node 3D Extensometer Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end [rnT,~] = size(DATnodo3DELd_NTC); % controllo date if rnT < rd % normalmente sono uguali for i = rnT+1:rd DATnodo3DELd_NTC(i,:) = DATnodo3DELd_NTC(rnT,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node 3D Extensometer Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if salto3DEL == 0 Dati3DExtensometerLink(rt+1:rt+rd,col:col+2) = DATnodo3DELd(:,:); if EL3D_NTC(ii,1) == 1 % Si NTC Dati3DExtensometerLink(rt+1:rt+rd,colT) = DATnodo3DELd_NTC(:,:); end end else Dati3DExtensometerLink = Dati3DExtensometerLink(1:end,:); DatiNTC3DExtensometerLink = DatiNTC3DExtensometerLink(1:end,:); end okdat3DEL = ['Data of node number ' num2str(ii) ' of ' ... num2str(r3DEL) ' 3D Extensometer Link nodes downloaded correctly']; fprintf(fileID,fmt,okdat3DEL); ii = ii+1; col = col+3; colT = colT+1; end if w == 0 wardat = 'There are not warning for 3D Extensometer 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(Dati3DExtensometerLink); Err3DExtensometerLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; RIF = 0; row = 1; if NuovoZero3DEL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(dataini3DEL)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end while RIF == 0 if row <= dim % Controllo la data di riferimento idxE = find(strcmp('Err1',Dati3DExtensometerLink_Rif(row,:))); idxT = find(strcmp('---',Dati3DExtensometerLink_Rif(row,:))); idxT2 = find(strcmp('-',Dati3DExtensometerLink_Rif(row,:))); idxE2 = find(strcmp('Err2',Dati3DExtensometerLink_Rif(row,:))); idxE255 = find(strcmp('Err255',Dati3DExtensometerLink_Rif(row,:))); idxD = find(strcmp('DMUXe',Dati3DExtensometerLink_Rif(row,:))); idxE1F = find(strcmp('Err1File',Dati3DExtensometerLink_Rif(row,:))); idxN = find(strcmp('null',Dati3DExtensometerLink_Rif(row,:))); idxRX = find(strcmp('No RX',Dati3DExtensometerLink_Rif(row,:))); idxI = find(strcmp('id Error',Dati3DExtensometerLink_Rif(row,:))); idxM = find(strcmp('MUX id Error',Dati3DExtensometerLink_Rif(row,:))); idxC = find(strcmp('CH n. Error',Dati3DExtensometerLink_Rif(row,:))); idxU = find(strcmp('Unknown Error',Dati3DExtensometerLink_Rif(row,:))); idxMC = find(strcmp('MsgCorrup',Dati3DExtensometerLink_Rif(row,:))); idxNS = find(strcmp('NotSupp',Dati3DExtensometerLink_Rif(row,:))); idxU2 = find(strcmp('Unknown',Dati3DExtensometerLink_Rif(row,:))); idxNA = find(strcmp('NotAv',Dati3DExtensometerLink_Rif(row,:))); idxDIS = find(strcmp('Dis.',Dati3DExtensometerLink_Rif(row,:))); idxND = find(strcmp('No Data',Dati3DExtensometerLink_Rif(row,:))); idxCE = find(strcmp('CH n. Er',Dati3DExtensometerLink_Rif(row,:))); 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); if ri >= 1 && isempty(idx) == 0 % Se almeno uno è in errore, allora guardo la riga dopo row = row+1; else RIF = 1; Dati3DExtensometerLink_Rif = Dati3DExtensometerLink_Rif(row,:); end else Date_Rif_3DEL = datestr(datenum(Date_Rif_3DEL)+1,'yyyy-mm-dd'); RIF = 1; NAN = 0; end end for jj=1:c % Se il nodo è Dis., devo aumentare di uno la data (il nodo non % è ancora stato installato!) if strcmp('Dis.',Dati3DExtensometerLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',Dati3DExtensometerLink(dis,jj)) == 0 Dati3DExtensometerLink = Dati3DExtensometerLink(dis:end,:); DatiNTC3DExtensometerLink = DatiNTC3DExtensometerLink(dis:end,:); DATini3DEL = DATini3DEL(dis:end,:); [r,c] = size(Dati3DExtensometerLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(dataini3DEL)+1 < now dataini3DEL = datestr(datenum(dataini3DEL)+1,'yyyy-mm-dd'); break else yes3DEL = 0; end end end end end if DIS ~= 1 && yes3DEL == 1 % --- Codice per il primo dato --- for jj=1:c idxE = find(strcmp('Err1',Dati3DExtensometerLink(1,jj))); idxT = find(strcmp('---',Dati3DExtensometerLink(1,jj))); idxT2 = find(strcmp('-',Dati3DExtensometerLink(1,jj))); idxE2 = find(strcmp('Err2',Dati3DExtensometerLink(1,jj))); idxE255 = find(strcmp('Err255',Dati3DExtensometerLink(1,jj))); idxD = find(strcmp('DMUXe',Dati3DExtensometerLink(1,jj))); idxE1F = find(strcmp('Err1File',Dati3DExtensometerLink(1,jj))); idxN = find(strcmp('null',Dati3DExtensometerLink(1,jj))); idxRX = find(strcmp('No RX',Dati3DExtensometerLink(1,jj))); idxI = find(strcmp('id Error',Dati3DExtensometerLink(1,jj))); idxM = find(strcmp('MUX id Error',Dati3DExtensometerLink(1,jj))); idxC = find(strcmp('CH n. Error',Dati3DExtensometerLink(1,jj))); idxU = find(strcmp('Unknown Error',Dati3DExtensometerLink(1,jj))); idxMC = find(strcmp('MsgCorrup',Dati3DExtensometerLink(1,jj))); idxNS = find(strcmp('NotSupp',Dati3DExtensometerLink(1,jj))); idxU2 = find(strcmp('Unknown',Dati3DExtensometerLink(1,jj))); idxNA = find(strcmp('NotAv',Dati3DExtensometerLink(1,jj))); idxND = find(strcmp('No Data',Dati3DExtensometerLink(1,jj))); idxCE = find(strcmp('CH n. Er',Dati3DExtensometerLink(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 3D Extensometer Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZero3DEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(dataini3DEL)+1 < now dataini3DEL = datestr(datenum(dataini3DEL)+1,'yyyy-mm-dd'); break else yes3DEL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; dataini3DEL = datestr(datenum(dataini3DEL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 Dati3DExtensometerLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); Err3DExtensometerLink(1,jj) = 1; wardat = 'Data of 3D Extensometer Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; dataini3DEL = datestr(datenum(dataini3DEL)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c idxE = find(strcmp('Err1',Dati3DExtensometerLink(:,jj))); idxT = find(strcmp('---',Dati3DExtensometerLink(:,jj))); idxT2 = find(strcmp('-',Dati3DExtensometerLink(:,jj))); idxE2 = find(strcmp('Err2',Dati3DExtensometerLink(:,jj))); idxE255 = find(strcmp('Err255',Dati3DExtensometerLink(:,jj))); idxD = find(strcmp('DMUXe',Dati3DExtensometerLink(:,jj))); idxE1F = find(strcmp('Err1File',Dati3DExtensometerLink(:,jj))); idxN = find(strcmp('null',Dati3DExtensometerLink(:,jj))); idxRX = find(strcmp('No RX',Dati3DExtensometerLink(:,jj))); idxI = find(strcmp('id Error',Dati3DExtensometerLink(:,jj))); idxM = find(strcmp('MUX id Error',Dati3DExtensometerLink(:,jj))); idxC = find(strcmp('CH n. Error',Dati3DExtensometerLink(:,jj))); idxU = find(strcmp('Unknown Error',Dati3DExtensometerLink(:,jj))); idxMC = find(strcmp('MsgCorrup',Dati3DExtensometerLink(:,jj))); idxNS = find(strcmp('NotSupp',Dati3DExtensometerLink(:,jj))); idxU2 = find(strcmp('Unknown',Dati3DExtensometerLink(:,jj))); idxNA = find(strcmp('NotAv',Dati3DExtensometerLink(:,jj))); idxND = find(strcmp('No Data',Dati3DExtensometerLink(:,jj))); idxCE = find(strcmp('CH n. Er',Dati3DExtensometerLink(:,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; dataini3DEL = datestr(datenum(dataini3DEL)+1,'yyyy-mm-dd'); break else Dati3DExtensometerLink(indice,jj) = Dati3DExtensometerLink(indice-1,jj); Err3DExtensometerLink(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(Dati3DExtensometerLink(nnn,jj))); if check == 1 Dati3DExtensometerLink(nnn,jj) = Dati3DExtensometerLink(nnn-1,jj); Err3DExtensometerLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of 3D Extensometer Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. Dati3DExtensometerLink = [DATini3DEL str2double(Dati3DExtensometerLink)]; Dati3DExtensometerLink_Rif = str2double(Dati3DExtensometerLink_Rif); % Elimino eventuali date doppie a = 2; while a <= r if Dati3DExtensometerLink(a,1) == Dati3DExtensometerLink(a-1,1) Dati3DExtensometerLink(a,:) = []; r = r-1; else a = a+1; end end end end if ESCI == 0 if sum(EL3D_NTC(:,1))>0 if DIS ~= 1 && yes3DEL == 1 % T [r,c] = size(DatiNTC3DExtensometerLink); ErrNTC3DExtensometerLink = zeros(r,c); Ncorr = 0; if NuovoZero3DEL == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(dataini3DEL)); else rDR = 1; cDR = 1; RawDateNTC = []; DatiRawNTC = []; 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',DatiNTC3DExtensometerLink(1,jj))); idxT = find(strcmp('---',DatiNTC3DExtensometerLink(1,jj))); idxT2 = find(strcmp('-',DatiNTC3DExtensometerLink(1,jj))); idxE2 = find(strcmp('Err2',DatiNTC3DExtensometerLink(1,jj))); idxE255 = find(strcmp('Err255',DatiNTC3DExtensometerLink(1,jj))); idxD = find(strcmp('DMUXe',DatiNTC3DExtensometerLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTC3DExtensometerLink(1,jj))); idxN = find(strcmp('null',DatiNTC3DExtensometerLink(1,jj))); idxRX = find(strcmp('No RX',DatiNTC3DExtensometerLink(1,jj))); idxI = find(strcmp('id Error',DatiNTC3DExtensometerLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTC3DExtensometerLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTC3DExtensometerLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTC3DExtensometerLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTC3DExtensometerLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTC3DExtensometerLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTC3DExtensometerLink(1,jj))); idxNA = find(strcmp('NotAv',DatiNTC3DExtensometerLink(1,jj))); idxND = find(strcmp('No Data',DatiNTC3DExtensometerLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiNTC3DExtensometerLink(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 NTC of 3D Extensometer Link nodes: there are not data at '... 'the beginning of the array!']; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZero3DEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; dataini3DEL = datestr(datenum(dataini3DEL)-1,'yyyy-mm-dd'); break else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; if datenum(dataini3DEL)+1 < now dataini3DEL = datestr(datenum(dataini3DEL)+1,'yyyy-mm-dd'); break else yes3DEL = 0; end else DatiNTC3DExtensometerLink(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if Err3DExtensometerLink(indice,jj) == 0 Err3DExtensometerLink(indice,jj) = 0.5; else Err3DExtensometerLink(indice,jj) = 1; end wardat = 'Data of NTC of 3D Extensometer 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',DatiNTC3DExtensometerLink(:,jj))); idxT = find(strcmp('-',DatiNTC3DExtensometerLink(:,jj))); idxT3 = find(strcmp('---',DatiNTC3DExtensometerLink(:,jj))); idxE2 = find(strcmp('Err2',DatiNTC3DExtensometerLink(:,jj))); idxE255 = find(strcmp('Err255',DatiNTC3DExtensometerLink(:,jj))); idxD = find(strcmp('DMUXe',DatiNTC3DExtensometerLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTC3DExtensometerLink(:,jj))); idxN = find(strcmp('null',DatiNTC3DExtensometerLink(:,jj))); idxRX = find(strcmp('No RX',DatiNTC3DExtensometerLink(:,jj))); idxI = find(strcmp('id Error',DatiNTC3DExtensometerLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTC3DExtensometerLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTC3DExtensometerLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTC3DExtensometerLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTC3DExtensometerLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTC3DExtensometerLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTC3DExtensometerLink(:,jj))); idxNA = find(strcmp('NotAv',DatiNTC3DExtensometerLink(:,jj))); idxND = find(strcmp('No Data',DatiNTC3DExtensometerLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiNTC3DExtensometerLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxCE); idx = union(idx,idxT3); 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); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; dataini3DEL = datestr(datenum(dataini3DEL)+1,'yyyy-mm-dd'); else DatiNTC3DExtensometerLink(indice,jj) = DatiNTC3DExtensometerLink(indice-1,jj); if Err3DExtensometerLink(indice,jj) == 0 ErrNTC3DExtensometerLink(indice,jj) = 0.5; else ErrNTC3DExtensometerLink(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(DatiNTC3DExtensometerLink(nnn,jj))); if check == 1 DatiNTC3DExtensometerLink(nnn,jj) = DatiNTC3DExtensometerLink(nnn-1,jj); ErrNTC3DExtensometerLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC for 3D Extensometer Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTC3DExtensometerLink = [DATini3DEL str2double(DatiNTC3DExtensometerLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTC3DExtensometerLink(a,1) == DatiNTC3DExtensometerLink(a-1,1) DatiNTC3DExtensometerLink(a,:) = []; r = r-1; else a = a+1; end end end else ErrNTC3DExtensometerLink = 0; end end end if NuovoZero3DEL == 1 && yes3DEL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=Dati3DExtensometerLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(Dati3DExtensometerLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(Dati3DExtensometerLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);Dati3DExtensometerLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = Dati3DExtensometerLink; 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)<=DatiNTC3DExtensometerLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTC3DExtensometerLink(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTC3DExtensometerLink(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTC3DExtensometerLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTC3DExtensometerLink; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTC3DExtensometerLink; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(EL3D_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end end %% Wire Extensometer Link if yesWEL == 0 % Non ci sono Wire Extensometer Link DatiWireExtensometerLink = []; DatiNTCWireExtensometerLink = []; ErrWireExtensometerLink = []; ChWEL = []; WEL_NTC = []; wardat = 'lettura function: there are not Wire Extensometer Link'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-Wire-RawData.csv']; % Specifico per Wire Extensometer Link RawDataFileNTC = ['' IDcentralina '-' DTcatena '-NTCWire-RawData.csv']; NAN = 0; DIS = 0; ChWEL = cell2mat(NodoWireExtensometerLink(:,4)); WEL_NTC = cell2mat(NodoWireExtensometerLink(:,5)); while NAN == 0 if datenum(datainiWEL) == datenum(Data(1,1)) tempoiniWEL = char(Data(1,2)); end NodeType = 'Wire Extensometer Link'; NodeNumWEL = num2str(cell2mat(NodoWireExtensometerLink(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 = ''' ... datainiWEL ''' and Time >= ''' tempoiniWEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumWEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniWEL = curs.Data; Ntempo = DATiniWEL; [r,c] = size(DATiniWEL); saltoWEL = 0; if r==1 && c==1 textdatWEL = 'Warning: error reading Wire Extensometer Link (control unit data)!'; fprintf(fileID,fmt,textdatWEL); saltoWEL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiWEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumWEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2WEL = curs.Data; Ndate = DAT2WEL; if saltoWEL == 1 DATiniWEL = DAT2WEL; end Check = size(DAT2WEL); if Check(1,2) > 1 % ho superato il primo giorno if saltoWEL == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATiniWEL = [DATiniWEL; DAT2WEL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniWEL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniWEL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniWEL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniWEL = T; else DATiniWEL = []; 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 if saltoWEL == 0 % creo la matrice per i dati Wire Extensometer Link if Check(1,2) > 1 DatiWireExtensometerLink = cell(rd+rt,rWEL); DatiNTCWireExtensometerLink = cell(rd+rt,rWEL); else DatiWireExtensometerLink = cell(rt,rWEL); DatiNTCWireExtensometerLink = cell(rt,rWEL); end else DatiWireExtensometerLink = cell(rd,rWEL); DatiNTCWireExtensometerLink = cell(rd,rWEL); end NWExtensometerLink = cell2mat(NodoWireExtensometerLink(:,2)); col = 1; ii = 1; w = 0; while ii <= rWEL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NWExtensometerLink(ii,1); nNodo = num2str(nN); comando = ['select Val0 from RawDataView where Date = ''' ... datainiWEL ''' and Time >= ''' tempoiniWEL ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoWEL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0 from RawDataView where Date > ''' ... datainiWEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoWELd = curs.Data; % Concateno i dati relativi a Step 1 e 2 per il nodo ii-esimo. if ChWEL(ii,1) == 1 % T DATnodoWEL_NTC = cell(1,1); DATnodoWELd_NTC = cell(1,1); elseif ChWEL(ii,1) >= 2 if WEL_NTC(ii,1)==1 if ChWEL(ii,1) == 2 comando = ['select Val1 from RawDataView where Date = ''' ... datainiWEL ''' and Time >= ''' tempoiniWEL ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; elseif ChWEL(ii,1) == 4 comando = ['select Val2 from RawDataView where Date = ''' ... datainiWEL ''' and Time >= ''' tempoiniWEL ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; end curs = exec(conn,comando); curs = fetch(curs); DATnodoWEL_NTC = curs.Data; % Dato if ChWEL(ii,1) == 2 comando = ['select Val1 from RawDataView where Date > ''' ... datainiWEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''... NodeType ''' and NodeNum = ' nNodo '']; elseif ChWEL(ii,1) == 4 comando = ['select Val2 from RawDataView where Date > ''' ... datainiWEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''... NodeType ''' and NodeNum = ' nNodo '']; end curs = exec(conn,comando); curs = fetch(curs); DATnodoWELd_NTC = curs.Data; else DATnodoWEL_NTC = cell(1,1); DATnodoWELd_NTC = cell(1,1); end end [rn,~] = size(DATnodoWELd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoWELd(i,:) = DATnodoWELd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Wire Extensometer Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if WEL_NTC(ii,1)==1 [rnT,~] = size(DATnodoWELd_NTC); % controllo date if rnT < rd % normalmente sono uguali for i = rnT+1:rd DATnodoWELd_NTC(i,:) = DATnodoWELd_NTC(rn,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node Wire Extensometer Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end end % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. if saltoWEL == 0 if ChWEL(ii,1) >= 2 if WEL_NTC(ii,1) == 1 DatiWireExtensometerLink(1:rt,col) = DATnodoWEL(:,:); DatiNTCWireExtensometerLink(1:rt,col) = DATnodoWEL_NTC(:,:); if Check(1,2) > 1 DatiWireExtensometerLink(rt+1:rt+rd,col) = DATnodoWELd(:,:); DatiNTCWireExtensometerLink(rt+1:rt+rd,col) = DATnodoWELd_NTC(:,:); end else DatiWireExtensometerLink(1:rt,col) = DATnodoWEL(:,:); if Check(1,2) > 1 DatiWireExtensometerLink(rt+1:rt+rd,col) = DATnodoWELd(:,:); end end elseif ChWEL(ii,1) == 1 DatiWireExtensometerLink(1:rt,col) = DATnodoWEL(:,:); if Check(1,2) > 1 DatiWireExtensometerLink(rt+1:rt+rd,col) = DATnodoWELd(:,:); end end else if ChWEL(ii,1) >= 2 if WEL_NTC(ii,1) == 1 DatiWireExtensometerLink(1:rd,col) = DATnodoWEL(:,:); DatiNTCWireExtensometerLink(1:rd,col) = DATnodoWEL_NTC(:,:); else DatiWireExtensometerLink(1:rd,col) = DATnodoWEL(:,:); end elseif ChWEL(ii,1) == 1 DatiWireExtensometerLink(1:rd,col) = DATnodoWEL(:,:); end end okdatWEL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rWEL) ' Wire Extensometer Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatWEL); ii = ii+1; col = col+1; end if w == 0 wardat = 'There are not warning for Wire Extensometer 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(DatiWireExtensometerLink); ErrWireExtensometerLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroWEL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiWEL)); 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.',DatiWireExtensometerLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiWireExtensometerLink(dis,jj)) == 0 DatiWireExtensometerLink = DatiWireExtensometerLink(dis:end,:); DatiNTCWireExtensometerLink = DatiNTCWireExtensometerLink(dis:end,:); DATiniWEL = DATiniWEL(dis:end,:); [r,c] = size(DatiWireExtensometerLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(datainiWEL)+1 < now datainiWEL = datestr(datenum(datainiWEL)+1,'yyyy-mm-dd'); break else yesWEL = 0; end end end end end if DIS ~= 1 && yesWEL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiWireExtensometerLink(1,jj))); idxT = find(strcmp('---',DatiWireExtensometerLink(1,jj))); idxT2 = find(strcmp('-',DatiWireExtensometerLink(1,jj))); idxE2 = find(strcmp('Err2',DatiWireExtensometerLink(1,jj))); idxE255 = find(strcmp('Err255',DatiWireExtensometerLink(1,jj))); idxD = find(strcmp('DMUXe',DatiWireExtensometerLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiWireExtensometerLink(1,jj))); idxN = find(strcmp('null',DatiWireExtensometerLink(1,jj))); idxRX = find(strcmp('No RX',DatiWireExtensometerLink(1,jj))); idxI = find(strcmp('id Error',DatiWireExtensometerLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiWireExtensometerLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiWireExtensometerLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiWireExtensometerLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiWireExtensometerLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiWireExtensometerLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiWireExtensometerLink(1,jj))); idxNA = find(strcmp('NotAv',DatiWireExtensometerLink(1,jj))); idxND = find(strcmp('No Data',DatiWireExtensometerLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiWireExtensometerLink(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 Wire Extensometer Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroWEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiWEL)+1 < now datainiWEL = datestr(datenum(datainiWEL)+1,'yyyy-mm-dd'); break else yesWEL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiWEL = datestr(datenum(datainiWEL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiWireExtensometerLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrWireExtensometerLink(1,jj) = 1; wardat = 'Data of Wire Extensometer Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; dataini3DEL = datestr(datenum(dataini3DEL)-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',DatiWireExtensometerLink(:,jj))); idxT = find(strcmp('---',DatiWireExtensometerLink(:,jj))); idxT2 = find(strcmp('-',DatiWireExtensometerLink(:,jj))); idxE2 = find(strcmp('Err2',DatiWireExtensometerLink(:,jj))); idxE255 = find(strcmp('Err255',DatiWireExtensometerLink(:,jj))); idxD = find(strcmp('DMUXe',DatiWireExtensometerLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiWireExtensometerLink(:,jj))); idxN = find(strcmp('null',DatiWireExtensometerLink(:,jj))); idxRX = find(strcmp('No RX',DatiWireExtensometerLink(:,jj))); idxI = find(strcmp('id Error',DatiWireExtensometerLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiWireExtensometerLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiWireExtensometerLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiWireExtensometerLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiWireExtensometerLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiWireExtensometerLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiWireExtensometerLink(:,jj))); idxNA = find(strcmp('NotAv',DatiWireExtensometerLink(:,jj))); idxND = find(strcmp('No Data',DatiWireExtensometerLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiWireExtensometerLink(:,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 wardat = 'Warning on the correction of Wire Extensometer Link: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); NAN = 0; ESCI = 1; datainiWEL = datestr(datenum(datainiWEL)-1,'yyyy-mm-dd'); else DatiWireExtensometerLink(indice,jj) = DatiWireExtensometerLink(indice-1,jj); ErrWireExtensometerLink(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(DatiWireExtensometerLink(nnn,jj))); if check == 1 DatiWireExtensometerLink(nnn,jj) = DatiWireExtensometerLink(nnn-1,jj); ErrWireExtensometerLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Wire Extensometer Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiWireExtensometerLink = [DATiniWEL str2double(DatiWireExtensometerLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiWireExtensometerLink(a,1) == DatiWireExtensometerLink(a-1,1) DatiWireExtensometerLink(a,:) = []; r = r-1; else a = a+1; end end end end if ESCI == 0 if sum(WEL_NTC(:,1))>0 % NTC if DIS ~= 1 && yesWEL == 1 [r,c] = size(DatiNTCWireExtensometerLink); Ncorr = 0; if NuovoZeroWEL == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(datainiWEL)); else rDR = 1; cDR = 1; RawDateNTC = []; DatiRawNTC = []; 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',DatiNTCWireExtensometerLink(1,jj))); idxND = find(strcmp('No Data',DatiNTCWireExtensometerLink(1,jj))); idxT3 = find(strcmp('---',DatiNTCWireExtensometerLink(1,jj))); idxT = find(strcmp('-',DatiNTCWireExtensometerLink(1,jj))); idxE2 = find(strcmp('Err2',DatiNTCWireExtensometerLink(1,jj))); idxE255 = find(strcmp('Err255',DatiNTCWireExtensometerLink(1,jj))); idxD = find(strcmp('DMUXe',DatiNTCWireExtensometerLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTCWireExtensometerLink(1,jj))); idxN = find(strcmp('null',DatiNTCWireExtensometerLink(1,jj))); idxRX = find(strcmp('No RX',DatiNTCWireExtensometerLink(1,jj))); idxI = find(strcmp('id Error',DatiNTCWireExtensometerLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTCWireExtensometerLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTCWireExtensometerLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTCWireExtensometerLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCWireExtensometerLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTCWireExtensometerLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTCWireExtensometerLink(1,jj))); idxNA = find(strcmp('NotAv',DatiNTCWireExtensometerLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCWireExtensometerLink(1,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of NTC of Wire Extensometer Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroWEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiWEL)+1 < now datainiWEL = datestr(datenum(datainiWEL)+1,'yyyy-mm-dd'); break else yesWEL = 0; end else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; datainiWEL = datestr(datenum(datainiWEL)-1,'yyyy-mm-dd'); break else DatiNTCWireExtensometerLink(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if ErrWireExtensometerLink(indice,jj) == 0 ErrWireExtensometerLink(indice,jj) = 0.5; else ErrWireExtensometerLink(indice,jj) = 1; end wardat = 'Data of NTC of Wire Extensometer 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',DatiNTCWireExtensometerLink(:,jj))); idxND = find(strcmp('No Data',DatiNTCWireExtensometerLink(:,jj))); idxT3 = find(strcmp('---',DatiNTCWireExtensometerLink(:,jj))); idxT = find(strcmp('-',DatiNTCWireExtensometerLink(:,jj))); idxE2 = find(strcmp('Err2',DatiNTCWireExtensometerLink(:,jj))); idxE255 = find(strcmp('Err255',DatiNTCWireExtensometerLink(:,jj))); idxD = find(strcmp('DMUXe',DatiNTCWireExtensometerLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTCWireExtensometerLink(:,jj))); idxN = find(strcmp('null',DatiNTCWireExtensometerLink(:,jj))); idxRX = find(strcmp('No RX',DatiNTCWireExtensometerLink(:,jj))); idxI = find(strcmp('id Error',DatiNTCWireExtensometerLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTCWireExtensometerLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTCWireExtensometerLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTCWireExtensometerLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCWireExtensometerLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTCWireExtensometerLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTCWireExtensometerLink(:,jj))); idxNA = find(strcmp('NotAv',DatiNTCWireExtensometerLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCWireExtensometerLink(:,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 if DIS == 1 wardat = 'Warning on the correction of NTC of Wire Extensometer Link: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); NAN = 0; ESCI = 1; datainiWEL = datestr(datenum(datainiWEL)+1,'yyyy-mm-dd'); break else wardat = 'Warning on the correction of NTC of Wire Extensometer 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 NAN = 0; ESCI = 1; datainiWEL = datestr(datenum(datainiWEL)-1,'yyyy-mm-dd'); break else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; datainiWEL = datestr(datenum(datainiWEL)-1,'yyyy-mm-dd'); break else DatiNTCWireExtensometerLink(indice,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if ErrWireExtensometerLink(indice,jj) == 0 ErrWireExtensometerLink(indice,jj) = 0.5; else ErrWireExtensometerLink(indice,jj) = 1; end wardat = 'Data of Wire Extensometer Link nodes corrected using Raw Data of Excel file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; end end end else DatiNTCWireExtensometerLink(indice,jj) = DatiNTCWireExtensometerLink(indice-1,jj); if ErrWireExtensometerLink(indice,jj) == 0 ErrWireExtensometerLink(indice,jj) = 0.5; else ErrWireExtensometerLink(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(DatiNTCWireExtensometerLink(nnn,jj))); if check == 1 DatiNTCWireExtensometerLink(nnn,jj) = DatiNTCWireExtensometerLink(nnn-1,jj); if ErrWireExtensometerLink(indice,jj) == 0 ErrWireExtensometerLink(indice,jj) = 0.5; else ErrWireExtensometerLink(indice,jj) = 1; end Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC Wire Extensometer Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTCWireExtensometerLink = [DATiniWEL str2double(DatiNTCWireExtensometerLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTCWireExtensometerLink(a,1) == DatiNTCWireExtensometerLink(a-1,1) DatiNTCWireExtensometerLink(a,:) = []; r = r-1; else a = a+1; end end end end end end if NuovoZeroWEL == 1 && yesWEL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiWireExtensometerLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiWireExtensometerLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiWireExtensometerLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiWireExtensometerLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiWireExtensometerLink; 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)<=DatiNTCWireExtensometerLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTCWireExtensometerLink(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTCWireExtensometerLink(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTCWireExtensometerLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTCWireExtensometerLink; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTCWireExtensometerLink; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(WEL_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end end %% MultiPoint Borehole Extensometer Link if yesMPBEL == 0 % Non ci sono Multipoint borehole rod extensometer DatiMultiPointExtensometer = []; DatiNTCMultiPointExtensometer = []; ErrMultiPointExtensometer = []; ErrNTCMultiPointExtensometer = []; ChMPBEL = []; MPBEL_NTC = []; wardat = 'lettura function: there are not Multi Point Extensometer Link'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-MPBEL-RawData.csv']; % Specifico per MPBE Link RawDataFileNTC = ['' IDcentralina '-' DTcatena '-NTCMPBEL-RawData.csv']; % Specifico per NTC MPBE Link ChMPBEL = cell2mat(NodoMultiPointRodExtensometer(:,4)); MPBEL_NTC = cell2mat(NodoMultiPointRodExtensometer(:,5)); NAN = 0; DIS = 0; while NAN == 0 if datenum(datainiMPBEL) == datenum(Data(1,1)) tempoiniMPBEL = char(Data(1,2)); end NodeType = 'Multipoint borehole rod extensometer'; NodeNumMPBEL = num2str(cell2mat(NodoMultiPointRodExtensometer(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 = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumMPBEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniMPBEL = curs.Data; Ntempo = DATiniMPBEL; [r,c] = size(DATiniMPBEL); saltoMPBEL = 0; if r==1 && c==1 textdatMPBEL = 'Warning: error reading Multipoint borehole rod extensometer (control unit data)!'; fprintf(fileID,fmt,textdatMPBEL); saltoMPBEL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumMPBEL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2MPBEL = curs.Data; Ndate = DAT2MPBEL; if saltoMPBEL == 1 DATiniMPBEL = DAT2MPBEL; end Check = size(DAT2MPBEL); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoMPBEL == 0 DATiniMPBEL = [DATiniMPBEL; DAT2MPBEL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniMPBEL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniMPBEL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniMPBEL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniMPBEL = T; else DATiniMPBEL = []; 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 Multipoint borehole rod extensometer if saltoMPBEL == 0 if Check(1,2) > 1 DatiMultiPointExtensometer = cell(rd+rt,rMPBEL*NumBasi); DatiNTCMultiPointExtensometer = cell(rd+rt,rMPBEL*NumBasi); else DatiMultiPointExtensometer = cell(rt,rMPBEL*NumBasi); DatiNTCMultiPointExtensometer = cell(rt,rMPBEL*NumBasi); end else DatiMultiPointExtensometer = cell(rd,rMPBEL*NumBasi); DatiNTCMultiPointExtensometer = cell(rd,rMPBEL*NumBasi); end NMPBExtensometerLink = cell2mat(NodoMultiPointRodExtensometer(:,2)); col = 1; ii = 1; w = 0; while ii <= rMPBEL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NMPBExtensometerLink(ii,1); nNodo = num2str(nN); % 1 Base if NumBasi == 1 % Dato comando = ['select Val0 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd = curs.Data; if ChMPBEL(ii,1) >= 2 && MPBEL_NTC(ii,1) == 1 % leggo la temperatura % T comando = ['select Val1 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL_NTC = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val1 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd_NTC = curs.Data; else % non la leggo DATnodoMPBEL_NTC = 0; DATnodoMPBELd_NTC = 0; end % 2 Basi elseif NumBasi == 2 if ChMPBEL(ii,1) == 4 % Dato comando = ['select Val0, Val2 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val2 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd = curs.Data; else % Dato comando = ['select Val0, Val1 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd = curs.Data; end if ChMPBEL(ii,1) >= 3 && MPBEL_NTC(ii,1) == 1 % leggo la temperatura % T comando = ['select Val2 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL_NTC = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val2 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd_NTC = curs.Data; else % non la leggo DATnodoMPBEL_NTC = 0; DATnodoMPBELd_NTC = 0; end elseif NumBasi == 3 if ChMPBEL(ii,1) == 6 % Dato comando = ['select Val0, Val2, Val4 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val2, Val4 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd = curs.Data; else % Dato comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd = curs.Data; end if ChMPBEL(ii,1) >= 4 && MPBEL_NTC(ii,1) == 1 % leggo la temperatura della prima base % T comando = ['select Val3 from RawDataView where Date = ''' ... datainiMPBEL ''' and Time >= ''' tempoiniMPBEL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBEL_NTC = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val3 from RawDataView where Date > ''' ... datainiMPBEL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoMPBELd_NTC = curs.Data; else DATnodoMPBEL_NTC = 0; DATnodoMPBELd_NTC = 0; end end % 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 NumBasi == 1 if saltoMPBEL == 0 DatiMultiPointExtensometer(1:rt,col) = DATnodoMPBEL(:,:); if ChMPBEL(ii) >= 2 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(1:rt,col) = DATnodoMPBEL_NTC(:,:); end else DatiMultiPointExtensometer(1:rd,col) = DATnodoMPBEL(:,:); if ChMPBEL(ii) >= 2 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(1:rd,col) = DATnodoMPBEL_NTC(:,:); end end elseif NumBasi == 2 if saltoMPBEL == 0 DatiMultiPointExtensometer(1:rt,col:col+1) = DATnodoMPBEL(:,:); if ChMPBEL(ii) >= 3 && MPBEL_NTC(ii) == 1 || ChMPBEL(ii) == 4 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(1:rt,col) = DATnodoMPBEL_NTC(:,:); end else DatiMultiPointExtensometer(1:rd,col:col+1) = DATnodoMPBEL(:,:); if ChMPBEL(ii) >= 3 && MPBEL_NTC(ii) == 1 || ChMPBEL(ii) == 4 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(1:rd,col) = DATnodoMPBEL_NTC(:,:); end end elseif NumBasi == 3 if saltoMPBEL == 0 DatiMultiPointExtensometer(1:rt,col:col+2) = DATnodoMPBEL(:,:); if ChMPBEL(ii) >= 4 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(1:rt,col) = DATnodoMPBEL_NTC(:,:); end else DatiMultiPointExtensometer(1:rd,col:col+2) = DATnodoMPBEL(:,:); if ChMPBEL(ii) >= 4 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(1:rd,col) = DATnodoMPBEL_NTC(:,:); end end end [rn,~] = size(DATnodoMPBELd); % controllo date [rnT,~] = size(DATnodoMPBELd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoMPBELd(i,:) = DATnodoMPBELd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Multipoint Borehole Rod Extensometer ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if rnT < rd % normalmente sono uguali for i = rnT+1:rd DATnodoMPBELd_NTC(i,:) = DATnodoMPBELd_NTC(rnT,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node Multipoint Borehole Rod Extensometer ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoMPBEL == 0 if NumBasi == 1 DatiMultiPointExtensometer(rt+1:rt+rd,col) = DATnodoMPBELd(:,:); if ChMPBEL(ii) >= 2 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(rt+1:rt+rd,col) = DATnodoMPBELd_NTC(:,:); end elseif NumBasi == 2 DatiMultiPointExtensometer(rt+1:rt+rd,col:col+1) = DATnodoMPBELd(:,:); if ChMPBEL(ii) >= 3 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(rt+1:rt+rd,col) = DATnodoMPBELd_NTC(:,:); end elseif NumBasi == 3 DatiMultiPointExtensometer(rt+1:rt+rd,col:col+2) = DATnodoMPBELd(:,:); if ChMPBEL(ii) >= 4 && MPBEL_NTC(ii) == 1 DatiNTCMultiPointExtensometer(rt+1:rt+rd,col) = DATnodoMPBELd_NTC(:,:); end end end else DatiMultiPointExtensometer = DatiMultiPointExtensometer(1:end,:); DatiNTCMultiPointExtensometer = DatiNTCMultiPointExtensometer(1:end,:); end okdatMPBEL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rMPBEL) ' Multipoint Borehole Rod Extensometer nodes downloaded correctly']; fprintf(fileID,fmt,okdatMPBEL); ii = ii+1; if NumBasi == 1 col = col+1; elseif NumBasi == 2 col = col+2; elseif NumBasi == 3 col = col+3; elseif NumBasi == 4 col = col+4; elseif NumBasi == 5 col = col+5; elseif NumBasi == 6 col = col+6; end end if w == 0 wardat = 'There are not warning for Multipoint Borehole Rod Extensometer!'; fprintf(fileID,fmt,wardat); end % ---- Dati Multibase -------------- % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiMultiPointExtensometer); ErrMultiPointExtensometer = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroMPBEL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiMPBEL)); 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.',DatiMultiPointExtensometer(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiMultiPointExtensometer(dis,jj)) == 0 DatiMultiPointExtensometer = DatiMultiPointExtensometer(dis:end,:); DatiNTCMultiPointExtensometer = DatiNTCMultiPointExtensometer(dis:end,:); DATiniMPBEL = DATiniMPBEL(dis:end,:); [r,c] = size(DatiMultiPointExtensometer); break elseif dis == r NAN = 0; DIS = 1; if datenum(datainiMPBEL)+1 < now datainiMPBEL = datestr(datenum(datainiMPBEL)+1,'yyyy-mm-dd'); break else yesMPBEL = 0; end end end end end if DIS ~= 1 && yesMPBEL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiMultiPointExtensometer(1,jj))); idxT = find(strcmp('---',DatiMultiPointExtensometer(1,jj))); idxT2 = find(strcmp('-',DatiMultiPointExtensometer(1,jj))); idxE2 = find(strcmp('Err2',DatiMultiPointExtensometer(1,jj))); idxE255 = find(strcmp('Err255',DatiMultiPointExtensometer(1,jj))); idxD = find(strcmp('DMUXe',DatiMultiPointExtensometer(1,jj))); idxE1F = find(strcmp('Err1File',DatiMultiPointExtensometer(1,jj))); idxN = find(strcmp('null',DatiMultiPointExtensometer(1,jj))); idxRX = find(strcmp('No RX',DatiMultiPointExtensometer(1,jj))); idxI = find(strcmp('id Error',DatiMultiPointExtensometer(1,jj))); idxM = find(strcmp('MUX id Error',DatiMultiPointExtensometer(1,jj))); idxC = find(strcmp('CH n. Error',DatiMultiPointExtensometer(1,jj))); idxU = find(strcmp('Unknown Error',DatiMultiPointExtensometer(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiMultiPointExtensometer(1,jj))); idxNS = find(strcmp('NotSupp',DatiMultiPointExtensometer(1,jj))); idxU2 = find(strcmp('Unknown',DatiMultiPointExtensometer(1,jj))); idxNA = find(strcmp('NotAv',DatiMultiPointExtensometer(1,jj))); idxND = find(strcmp('No Data',DatiMultiPointExtensometer(1,jj))); idxCE = find(strcmp('CH n. Er',DatiMultiPointExtensometer(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 MultiPoint Rod Extensometer Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroMPBEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiMPBEL)+1 < now datainiMPBEL = datestr(datenum(datainiMPBEL)+1,'yyyy-mm-dd'); break else yesMPBEL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiMPBEL = datestr(datenum(datainiMPBEL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiMultiPointExtensometer(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrMultiPointExtensometer(1,jj) = 1; wardat = 'Data of MultiPoint Rod Extensometer Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiMPBEL = datestr(datenum(datainiMPBEL)-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',DatiMultiPointExtensometer(:,jj))); idxT = find(strcmp('---',DatiMultiPointExtensometer(:,jj))); idxT2 = find(strcmp('-',DatiMultiPointExtensometer(:,jj))); idxE2 = find(strcmp('Err2',DatiMultiPointExtensometer(:,jj))); idxE255 = find(strcmp('Err255',DatiMultiPointExtensometer(:,jj))); idxD = find(strcmp('DMUXe',DatiMultiPointExtensometer(:,jj))); idxE1F = find(strcmp('Err1File',DatiMultiPointExtensometer(:,jj))); idxN = find(strcmp('null',DatiMultiPointExtensometer(:,jj))); idxRX = find(strcmp('No RX',DatiMultiPointExtensometer(:,jj))); idxI = find(strcmp('id Error',DatiMultiPointExtensometer(:,jj))); idxM = find(strcmp('MUX id Error',DatiMultiPointExtensometer(:,jj))); idxC = find(strcmp('CH n. Error',DatiMultiPointExtensometer(:,jj))); idxU = find(strcmp('Unknown Error',DatiMultiPointExtensometer(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiMultiPointExtensometer(:,jj))); idxNS = find(strcmp('NotSupp',DatiMultiPointExtensometer(:,jj))); idxU2 = find(strcmp('Unknown',DatiMultiPointExtensometer(:,jj))); idxNA = find(strcmp('NotAv',DatiMultiPointExtensometer(:,jj))); idxND = find(strcmp('No Data',DatiMultiPointExtensometer(:,jj))); idxCE = find(strcmp('CH n. Er',DatiMultiPointExtensometer(:,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; datainiMPBEL = datestr(datenum(datainiMPBEL)-1,'yyyy-mm-dd'); else DatiMultiPointExtensometer(indice,jj) = DatiMultiPointExtensometer(indice-1,jj); ErrMultiPointExtensometer(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(DatiMultiPointExtensometer(nnn,jj))); if check == 1 DatiMultiPointExtensometer(nnn,jj) = DatiMultiPointExtensometer(nnn-1,jj); ErrMultiPointExtensometer(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Multipoint Borehole Rod Extensometer data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiMultiPointExtensometer = [DATiniMPBEL str2double(DatiMultiPointExtensometer)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiMultiPointExtensometer(a,1) == DatiMultiPointExtensometer(a-1,1) DatiMultiPointExtensometer(a,:) = []; r = r-1; else a = a+1; end end end end if ESCI == 0 if sum(MPBEL_NTC(:,1))>0 if DIS ~= 1 && yesMPBEL == 1 % ---- Dati NTC Multibase -------------- % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiNTCMultiPointExtensometer); ErrNTCMultiPointExtensometer = zeros(r,c); Ncorr = 0; if NuovoZeroMPBEL == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(datainiMPBEL)); else rDR = 1; cDR = 1; RawDateNTC = []; DatiRawNTC = []; 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',DatiNTCMultiPointExtensometer(1,jj))); idxT = find(strcmp('---',DatiNTCMultiPointExtensometer(1,jj))); idxT2 = find(strcmp('-',DatiNTCMultiPointExtensometer(1,jj))); idxE2 = find(strcmp('Err2',DatiNTCMultiPointExtensometer(1,jj))); idxE255 = find(strcmp('Err255',DatiNTCMultiPointExtensometer(1,jj))); idxD = find(strcmp('DMUXe',DatiNTCMultiPointExtensometer(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTCMultiPointExtensometer(1,jj))); idxN = find(strcmp('null',DatiNTCMultiPointExtensometer(1,jj))); idxRX = find(strcmp('No RX',DatiNTCMultiPointExtensometer(1,jj))); idxI = find(strcmp('id Error',DatiNTCMultiPointExtensometer(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTCMultiPointExtensometer(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTCMultiPointExtensometer(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTCMultiPointExtensometer(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCMultiPointExtensometer(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTCMultiPointExtensometer(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTCMultiPointExtensometer(1,jj))); idxNA = find(strcmp('NotAv',DatiNTCMultiPointExtensometer(1,jj))); idxND = find(strcmp('No Data',DatiNTCMultiPointExtensometer(1,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCMultiPointExtensometer(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 NTC of MultiPoint Rod Extensometer Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroMPBEL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiMPBEL)+1 < now datainiMPBEL = datestr(datenum(datainiMPBEL)+1,'yyyy-mm-dd'); break else yesMPBEL = 0; end else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; datainiMPBEL = datestr(datenum(datainiMPBEL)-1,'yyyy-mm-dd'); break else DatiNTCMultiPointExtensometer(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if ErrMultiPointExtensometer(indice,jj) == 0 ErrMultiPointExtensometer(indice,jj) = 0.5; else ErrMultiPointExtensometer(indice,jj) = 1; end wardat = 'Data of NTC of Multi Point Rod Extensometer 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',DatiNTCMultiPointExtensometer(:,jj))); idxT3 = find(strcmp('---',DatiNTCMultiPointExtensometer(:,jj))); idxT = find(strcmp('-',DatiNTCMultiPointExtensometer(:,jj))); idxE2 = find(strcmp('Err2',DatiNTCMultiPointExtensometer(:,jj))); idxE255 = find(strcmp('Err255',DatiNTCMultiPointExtensometer(:,jj))); idxD = find(strcmp('DMUXe',DatiNTCMultiPointExtensometer(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTCMultiPointExtensometer(:,jj))); idxN = find(strcmp('null',DatiNTCMultiPointExtensometer(:,jj))); idxRX = find(strcmp('No RX',DatiNTCMultiPointExtensometer(:,jj))); idxI = find(strcmp('id Error',DatiNTCMultiPointExtensometer(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTCMultiPointExtensometer(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTCMultiPointExtensometer(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTCMultiPointExtensometer(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCMultiPointExtensometer(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTCMultiPointExtensometer(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTCMultiPointExtensometer(:,jj))); idxNA = find(strcmp('NotAv',DatiNTCMultiPointExtensometer(:,jj))); idxND = find(strcmp('No Data',DatiNTCMultiPointExtensometer(:,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCMultiPointExtensometer(:,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiMPBEL = datestr(datenum(datainiMPBEL)-1,'yyyy-mm-dd'); break else DatiNTCMultiPointExtensometer(indice,jj) = DatiNTCMultiPointExtensometer(indice-1,jj); ErrNTCMultiPointExtensometer(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(DatiNTCMultiPointExtensometer(nnn,jj))); if check == 1 DatiNTCMultiPointExtensometer(nnn,jj) = DatiNTCMultiPointExtensometer(nnn-1,jj); if ErrMultiPointExtensometer(indice,jj) == 0 ErrMultiPointExtensometer(indice,jj) = 0.5; else ErrMultiPointExtensometer(indice,jj) = 1; end Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC of Multipoint Borehole Rod Extensometer data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTCMultiPointExtensometer = [DATiniMPBEL str2double(DatiNTCMultiPointExtensometer)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTCMultiPointExtensometer(a,1) == DatiNTCMultiPointExtensometer(a-1,1) DatiNTCMultiPointExtensometer(a,:) = []; r = r-1; else a = a+1; end end end else ErrNTCMultiPointExtensometer = 0; end end end if NuovoZeroMPBEL == 1 && yesMPBEL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiMultiPointExtensometer(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiMultiPointExtensometer(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiMultiPointExtensometer(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiMultiPointExtensometer(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiMultiPointExtensometer; 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(DatiRaw(:,1)<=DatiNTCMultiPointExtensometer(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTCMultiPointExtensometer(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTCMultiPointExtensometer(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTCMultiPointExtensometer(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTCMultiPointExtensometer; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTCMultiPointExtensometer; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(MPBEL_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end end %% Analog Link if yesAL == 0 % Non ci sono Analog Link DatiAnalogLink = []; ErrAnalogLink = []; ChAL = []; AL_NTC = []; wardat = 'lettura function: there are not Analog Link'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-AL-RawData.csv']; % Specifico per An Link ChAL = cell2mat(NodoAnalogLink(:,4)); AL_NTC = cell2mat(NodoAnalogLink(:,5)); NAN = 0; DIS = 0; while NAN == 0 if datenum(datainiAL) == datenum(Data(1,1)) tempoiniAL = char(Data(1,2)); end NodeType = 'Analog Link'; NodeNumAL = num2str(cell2mat(NodoAnalogLink(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 = ''' ... datainiAL ''' and Time >= ''' tempoiniAL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumAL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniAL = curs.Data; Ntempo = DATiniAL; [r,c] = size(DATiniAL); saltoAL = 0; if r==1 && c==1 textdatAL = 'Warning: error reading Analog Link (control unit data)!'; fprintf(fileID,fmt,textdatAL); saltoAL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiAL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumAL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2AL = curs.Data; Ndate = DAT2AL; if saltoAL == 1 DATiniAL = DAT2AL; end Check = size(DAT2AL); if Check(1,2) > 1 % ho superato il primo giorno if saltoAL == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATiniAL = [DATiniAL; DAT2AL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniAL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniAL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniAL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniAL = T; else DATiniAL = []; 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 Analog Link if saltoAL == 0 if Check(1,2) > 1 DatiAnalogLink = cell(rd+rt,rAL*ChAL); else DatiAnalogLink = cell(rt,rAL*ChAL); end else DatiAnalogLink = cell(rd,rAL*ChAL); end NAnalogLink = cell2mat(NodoAnalogLink(:,2)); col = ChAL; ii = 1; w = 0; while ii <= rAL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NAnalogLink(ii,1); nNodo = num2str(nN); if ChAL == 1 comando = ['select Val0 from RawDataView where Date = ''' ... datainiAL ''' and Time >= ''' tempoiniAL ''' and ToolNameID = '''... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = '''... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoAL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0 from RawDataView where Date > ''' ... datainiAL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoALd = curs.Data; elseif AnalogCh == 2 comando = ['select Val0, Val1 from RawDataView where Date = ''' ... datainiAL ''' and Time >= ''' tempoiniAL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoAL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1 from RawDataView where Date > ''' ... datainiAL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoALd = curs.Data; elseif AnalogCh == 3 comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' ... datainiAL ''' and Time >= ''' tempoiniAL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoAL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ... datainiAL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoALd = curs.Data; elseif AnalogCh == 4 comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' ... datainiAL ''' and Time >= ''' tempoiniAL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoAL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ... datainiAL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoALd = curs.Data; elseif AnalogCh == 5 comando = ['select Val0, Val1, Val2, Val3, Val4 from RawDataView where Date = ''' ... datainiAL ''' and Time >= ''' tempoiniAL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoAL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2, Val3, Val4 from RawDataView where Date > ''' ... datainiAL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoALd = curs.Data; elseif AnalogCh == 6 comando = ['select Val0, Val1, Val2, Val3, Val4, Val5 from RawDataView where Date = ''' ... datainiAL ''' and Time >= ''' tempoiniAL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoAL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2, Val3, Val4, Val5 from RawDataView where Date > ''' ... datainiAL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoALd = curs.Data; end % 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 saltoAL == 0 if AnalogCh == 1 DatiAnalogLink(1:rt,col) = DATnodoAL(:,:); elseif AnalogCh == 2 ini_col = col-1; DatiAnalogLink(1:rt,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 3 ini_col = col-2; DatiAnalogLink(1:rt,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 4 ini_col = col-3; DatiAnalogLink(1:rt,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 5 ini_col = col-4; DatiAnalogLink(1:rt,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 6 ini_col = col-5; DatiAnalogLink(1:rt,ini_col:col) = DATnodoAL(:,:); end else if AnalogCh == 1 DatiAnalogLink(1:rd,col) = DATnodoAL(:,:); elseif AnalogCh == 2 ini_col = col-1; DatiAnalogLink(1:rd,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 3 ini_col = col-2; DatiAnalogLink(1:rd,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 4 ini_col = col-3; DatiAnalogLink(1:rd,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 5 ini_col = col-4; DatiAnalogLink(1:rd,ini_col:col) = DATnodoAL(:,:); elseif AnalogCh == 6 ini_col = col-5; DatiAnalogLink(1:rd,ini_col:col) = DATnodoAL(:,:); end end [rn,~] = size(DATnodoALd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoALd(i,:) = DATnodoALd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Analog Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoAL == 0 if ChAL == 1 DatiAnalogLink(rt+1:rt+rd,col) = DATnodoALd(:,:); else DatiAnalogLink(rt+1:rt+rd,ini_col:col) = DATnodoALd(:,:); end end else DatiAnalogLink = DatiAnalogLink(1:end,:); end okdatAL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rAL) ' Analog Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatAL); ii = ii+1; if ChAL == 1 col = col+1; elseif ChAL == 2 col = col+2; elseif ChAL == 3 col = col+3; elseif ChAL == 4 col = col+4; elseif ChAL == 5 col = col+5; elseif ChAL == 6 col = col+6; end end if w == 0 wardat = 'There are not warning for Analog 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(DatiAnalogLink); ErrAnalogLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroAL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiAL)); 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.',DatiAnalogLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiAnalogLink(dis,jj)) == 0 DatiAnalogLink = DatiAnalogLink(dis:end,:); DATiniAL = DATiniAL(dis:end,:); [r,c] = size(DatiAnalogLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(datainiAL)+1 < now datainiAL = datestr(datenum(datainiAL)+1,'yyyy-mm-dd'); break else yesAL = 0; end end end end end if DIS ~= 1 && yesAL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiAnalogLink(1,jj))); idxT = find(strcmp('---',DatiAnalogLink(1,jj))); idxT2 = find(strcmp('-',DatiAnalogLink(1,jj))); idxE2 = find(strcmp('Err2',DatiAnalogLink(1,jj))); idxE255 = find(strcmp('Err255',DatiAnalogLink(1,jj))); idxD = find(strcmp('DMUXe',DatiAnalogLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiAnalogLink(1,jj))); idxN = find(strcmp('null',DatiAnalogLink(1,jj))); idxRX = find(strcmp('No RX',DatiAnalogLink(1,jj))); idxI = find(strcmp('id Error',DatiAnalogLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiAnalogLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiAnalogLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiAnalogLink(1,jj))); idxDis = find(strcmp('Dis.',DatiAnalogLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiAnalogLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiAnalogLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiAnalogLink(1,jj))); idxNA = find(strcmp('NotAv',DatiAnalogLink(1,jj))); idxND = find(strcmp('No Data',DatiAnalogLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiAnalogLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxDis); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Analog Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroAL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiAL)+1 < now datainiAL = datestr(datenum(datainiAL)+1,'yyyy-mm-dd'); break else yesAL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiAL = datestr(datenum(datainiAL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiAnalogLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrAnalogLink(1,jj) = 1; wardat = 'Data of Analog Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiAL = datestr(datenum(datainiAL)-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',DatiAnalogLink(:,jj))); idxT = find(strcmp('---',DatiAnalogLink(:,jj))); idxT2 = find(strcmp('-',DatiAnalogLink(:,jj))); idxE2 = find(strcmp('Err2',DatiAnalogLink(:,jj))); idxE255 = find(strcmp('Err255',DatiAnalogLink(:,jj))); idxD = find(strcmp('DMUXe',DatiAnalogLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiAnalogLink(:,jj))); idxN = find(strcmp('null',DatiAnalogLink(:,jj))); idxRX = find(strcmp('No RX',DatiAnalogLink(:,jj))); idxI = find(strcmp('id Error',DatiAnalogLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiAnalogLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiAnalogLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiAnalogLink(:,jj))); idxDis = find(strcmp('Dis.',DatiAnalogLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiAnalogLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiAnalogLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiAnalogLink(:,jj))); idxNA = find(strcmp('NotAv',DatiAnalogLink(:,jj))); idxND = find(strcmp('No Data',DatiAnalogLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiAnalogLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxDis); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiAL = datestr(datenum(datainiAL)-1,'yyyy-mm-dd'); else DatiAnalogLink(indice,jj) = DatiAnalogLink(indice-1,jj); ErrAnalogLink(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(DatiAnalogLink(nnn,jj))); if check == 1 DatiAnalogLink(nnn,jj) = DatiAnalogLink(nnn-1,jj); ErrAnalogLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Analog Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiAnalogLink = [DATiniAL str2double(DatiAnalogLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiAnalogLink(a,1) == DatiAnalogLink(a-1,1) DatiAnalogLink(a,:) = []; r = r-1; else a = a+1; end end end end end if NuovoZeroAL == 1 && yesAL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiAnalogLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiAnalogLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiAnalogLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiAnalogLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiAnalogLink; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumCrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniCrL = curs.Data; Ntempo = DATiniCrL; [r,c] = size(DATiniCrL); saltoCrL = 0; if r==1 && c==1 textdatCrL = 'Warning: error reading Crack Link (control unit data)!'; fprintf(fileID,fmt,textdatCrL); saltoCrL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiCrL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumCrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2CrL = curs.Data; Ndate = DAT2CrL; if saltoCrL == 1 DATiniCrL = DAT2CrL; end Check = size(DAT2CrL); if Check(1,2) > 1 % ho superato il primo giorno if saltoCrL == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATiniCrL = [DATiniCrL; DAT2CrL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniCrL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniCrL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniCrL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniCrL = T; else DATiniCrL = []; 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 saltoCrL == 0 if Check(1,2) > 1 DatiCrackLink = cell(rd+rt,rCrL); DatiNTCCrackLink = cell(rd+rt,rCrL); else DatiCrackLink = cell(rt,rCrL); DatiNTCCrackLink = cell(rt,rCrL); end else DatiCrackLink = cell(rd,rCrL); DatiNTCCrackLink = cell(rd,rCrL); end NCrackLink = cell2mat(NodoCrackLink(:,2)); col = 1; ii = 1; w = 0; while ii <= rCrL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NCrackLink(ii,1); nNodo = num2str(nN); % Dato comando = ['select Val0 from RawDataView where Date = ''' ... datainiCrL ''' and Time >= ''' tempoiniCrL ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoCrL = curs.Data; % Dato comando = ['select Val0 from RawDataView where Date > ''' ... datainiCrL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoCrLd = curs.Data; if ChCrL(ii,1) == 1 % T DATnodoCrL_NTC = cell(1,1); DATnodoCrLd_NTC = cell(1,1); elseif ChCrL(ii,1) == 2 if CrL_NTC(ii,1)==1 comando = ['select Val1 from RawDataView where Date = ''' ... datainiCrL ''' and Time >= ''' tempoiniCrL ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoCrL_NTC = curs.Data; % Dato comando = ['select Val1 from RawDataView where Date > ''' ... datainiCrL ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoCrLd_NTC = curs.Data; else DATnodoCrL_NTC = cell(1,1); DATnodoCrLd_NTC = cell(1,1); end end [rn,~] = size(DATnodoCrLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoCrLd(i,:) = DATnodoCrLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Crack Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end [rnT,~] = size(DATnodoCrLd_NTC); % controllo date if rnT < rd % normalmente sono uguali for i = rnT+1:rd DATnodoCrLd_NTC(i,:) = DATnodoCrLd_NTC(rnT,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node Crack 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 saltoCrL == 0 if ChCrL(ii,1) >= 2 if CrL_NTC(ii,1)==1 DatiCrackLink(1:rt,col) = DATnodoCrL(:,:); %#ok<*AGROW> DatiNTCCrackLink(1:rt,col) = DATnodoCrL_NTC(:,:); %#ok<*AGROW> if Check(1,2) > 1 DatiCrackLink(rt+1:rt+rd,col) = DATnodoCrLd(:,:); DatiNTCCrackLink(rt+1:rt+rd,col) = DATnodoCrLd_NTC(:,:); %#ok<*AGROW> end else DatiCrackLink(1:rt,col) = DATnodoCrL(:,:); %#ok<*AGROW> if Check(1,2) > 1 DatiCrackLink(rt+1:rt+rd,col) = DATnodoCrLd(:,:); end end elseif ChCrL(ii,1) == 1 DatiCrackLink(1:rt,col) = DATnodoCrL(:,:); %#ok<*AGROW> if Check(1,2) > 1 DatiCrackLink(rt+1:rt+rd,col) = DATnodoCrLd(:,:); end end else if ChCrL(ii,1) >= 2 if CrL_NTC(ii,1)==1 DatiCrackLink(1:rd,col) = DATnodoCrL(:,:); %#ok<*AGROW> DatiNTCCrackLink(1:rd,col) = DATnodoCrL_NTC(:,:); %#ok<*AGROW> else DatiCrackLink(1:rd,col) = DATnodoCrL(:,:); %#ok<*AGROW> end elseif ChCrL(ii,1) == 1 DatiCrackLink(1:rd,col) = DATnodoCrL(:,:); %#ok<*AGROW> end end okdatCrL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rCrL) ' Crack Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatCrL); ii = ii+1; col = col+1; end if w == 0 wardat = 'There are not warning for Crack 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(DatiCrackLink); ErrCrackLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroCrL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiCrL)); 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.',DatiCrackLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiCrackLink(dis,jj)) == 0 DatiCrackLink = DatiCrackLink(dis:end,:); DatiNTCCrackLink = DatiNTCCrackLink(dis:end,:); DATiniCrL = DATiniCrL(dis:end,:); [r,c] = size(DatiCrackLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(datainiCrL)+1 < now datainiCrL = datestr(datenum(datainiCrL)+1,'yyyy-mm-dd'); break else yesCrL = 0; end end end end end if DIS ~= 1 && yesCrL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiCrackLink(1,jj))); idxT = find(strcmp('---',DatiCrackLink(1,jj))); idxT2 = find(strcmp('-',DatiCrackLink(1,jj))); idxE2 = find(strcmp('Err2',DatiCrackLink(1,jj))); idxE255 = find(strcmp('Err255',DatiCrackLink(1,jj))); idxD = find(strcmp('DMUXe',DatiCrackLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiCrackLink(1,jj))); idxN = find(strcmp('null',DatiCrackLink(1,jj))); idxRX = find(strcmp('No RX',DatiCrackLink(1,jj))); idxI = find(strcmp('id Error',DatiCrackLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiCrackLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiCrackLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiCrackLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiCrackLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiCrackLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiCrackLink(1,jj))); idxNA = find(strcmp('NotAv',DatiCrackLink(1,jj))); idxND = find(strcmp('No Data',DatiCrackLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiCrackLink(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 Crack Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroCrL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiCrL)+1 < now datainiCrL = datestr(datenum(datainiCrL)+1,'yyyy-mm-dd'); break else yesCrL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiCrL = datestr(datenum(datainiCrL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiCrackLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrCrackLink(1,jj) = 1; wardat = 'Data of Crack Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiCrL = datestr(datenum(datainiCrL)-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',DatiCrackLink(:,jj))); idxT = find(strcmp('---',DatiCrackLink(:,jj))); idxT2 = find(strcmp('-',DatiCrackLink(:,jj))); idxE2 = find(strcmp('Err2',DatiCrackLink(:,jj))); idxE255 = find(strcmp('Err255',DatiCrackLink(:,jj))); idxD = find(strcmp('DMUXe',DatiCrackLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiCrackLink(:,jj))); idxN = find(strcmp('null',DatiCrackLink(:,jj))); idxRX = find(strcmp('No RX',DatiCrackLink(:,jj))); idxI = find(strcmp('id Error',DatiCrackLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiCrackLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiCrackLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiCrackLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiCrackLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiCrackLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiCrackLink(:,jj))); idxNA = find(strcmp('NotAv',DatiCrackLink(:,jj))); idxND = find(strcmp('No Data',DatiCrackLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiCrackLink(:,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; datainiCrL = datestr(datenum(datainiCrL)+1,'yyyy-mm-dd'); break else DatiCrackLink(indice,jj) = DatiCrackLink(indice-1,jj); ErrCrackLink(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(DatiCrackLink(nnn,jj))); if check == 1 DatiCrackLink(nnn,jj) = DatiCrackLink(nnn-1,jj); ErrCrackLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Crack Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiCrackLink = [DATiniCrL str2double(DatiCrackLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiCrackLink(a,1) == DatiCrackLink(a-1,1) DatiCrackLink(a,:) = []; r = r-1; else a = a+1; end end end end if ESCI == 0 if sum(CrL_NTC(:,1))>0 if DIS ~= 1 && yesCrL == 1 % NTC [r,c] = size(DatiNTCCrackLink); Ncorr = 0; if NuovoZeroCrL == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(datainiCrL)); else rDR = 1; cDR = 1; RawDateNTC = []; DatiRawNTC = []; 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',DatiNTCCrackLink(1,jj))); idxND = find(strcmp('No Data',DatiNTCCrackLink(1,jj))); idxT3 = find(strcmp('---',DatiNTCCrackLink(1,jj))); idxT = find(strcmp('-',DatiNTCCrackLink(1,jj))); idxE2 = find(strcmp('Err2',DatiNTCCrackLink(1,jj))); idxE255 = find(strcmp('Err255',DatiNTCCrackLink(1,jj))); idxD = find(strcmp('DMUXe',DatiNTCCrackLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTCCrackLink(1,jj))); idxN = find(strcmp('null',DatiNTCCrackLink(1,jj))); idxRX = find(strcmp('No RX',DatiNTCCrackLink(1,jj))); idxI = find(strcmp('id Error',DatiNTCCrackLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTCCrackLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTCCrackLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTCCrackLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCCrackLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTCCrackLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTCCrackLink(1,jj))); idxNA = find(strcmp('NotAv',DatiNTCCrackLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCCrackLink(1,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of NTC of Crack Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroCrL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiCrL)+1 < now datainiCrL = datestr(datenum(datainiCrL)+1,'yyyy-mm-dd'); break else yesCrL = 0; end else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; datainiCrL = datestr(datenum(datainiCrL)-1,'yyyy-mm-dd'); break else DatiNTCCrackLink(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if ErrCrackLink(indice,jj) == 0 ErrCrackLink(indice,jj) = 0.5; else ErrCrackLink(indice,jj) = 1; end wardat = 'Data of NTC of Crack 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',DatiNTCCrackLink(:,jj))); idxND = find(strcmp('No Data',DatiNTCCrackLink(:,jj))); idxT3 = find(strcmp('---',DatiNTCCrackLink(:,jj))); idxT = find(strcmp('-',DatiNTCCrackLink(:,jj))); idxE2 = find(strcmp('Err2',DatiNTCCrackLink(:,jj))); idxE255 = find(strcmp('Err255',DatiNTCCrackLink(:,jj))); idxD = find(strcmp('DMUXe',DatiNTCCrackLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTCCrackLink(:,jj))); idxN = find(strcmp('null',DatiNTCCrackLink(:,jj))); idxRX = find(strcmp('No RX',DatiNTCCrackLink(:,jj))); idxI = find(strcmp('id Error',DatiNTCCrackLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTCCrackLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTCCrackLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTCCrackLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCCrackLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTCCrackLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTCCrackLink(:,jj))); idxNA = find(strcmp('NotAv',DatiNTCCrackLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiNTCCrackLink(:,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 if DIS == 1 wardat = 'Warning on the correction of NTC of Crack Link: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); NAN = 0; ESCI = 1; datainiCrL = datestr(datenum(datainiCrL)+1,'yyyy-mm-dd'); break else wardat = 'Warning on the correction of NTC of Crack 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 NAN = 0; ESCI = 1; datainiCrL = datestr(datenum(datainiCrL)-1,'yyyy-mm-dd'); break else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; datainiCrL = datestr(datenum(datainiCrL)-1,'yyyy-mm-dd'); break else DatiNTCCrackLink(indice,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if ErrCrackLink(indice,jj) == 0 ErrCrackLink(indice,jj) = 0.5; else ErrCrackLink(indice,jj) = 1; end wardat = 'Data of Crack Link nodes corrected using Raw Data of Excel file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; end end end else DatiNTCCrackLink(indice,jj) = DatiNTCCrackLink(indice-1,jj); if ErrCrackLink(indice,jj) == 0 ErrCrackLink(indice,jj) = 0.5; else ErrCrackLink(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(DatiNTCCrackLink(nnn,jj))); if check == 1 DatiNTCCrackLink(nnn,jj) = DatiNTCCrackLink(nnn-1,jj); if ErrCrackLink(indice,jj) == 0 ErrCrackLink(indice,jj) = 0.5; else ErrCrackLink(indice,jj) = 1; end Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC Crack Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTCCrackLink = [DATiniCrL str2double(DatiNTCCrackLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTCCrackLink(a,1) == DatiNTCCrackLink(a-1,1) DatiNTCCrackLink(a,:) = []; r = r-1; else a = a+1; end end end end end end if NuovoZeroCrL == 1 && yesCrL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiCrackLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiCrackLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiCrackLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiCrackLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiCrackLink; 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)<=DatiNTCCrackLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTCCrackLink(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTCCrackLink(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTCCrackLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTCCrackLink; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTCCrackLink; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(CrL_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end end %% 3D Crack Link if yes3DCrL == 0 % Non ci sono 3D Crack Link Dati3DCrackLink = []; DatiNTC3DCrackLink = []; Err3DCrackLink = []; ErrNTC3DCrackLink = []; Ch3DCrL = []; CrL3D_NTC = []; wardat = 'lettura function: there are not 3D Crack Link'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-3DCrack-RawData.csv']; % Specifico per 3D Crack Link RawDataFileNTC = ['' IDcentralina '-' DTcatena '-3DCrackNTC-RawData.csv']; % Specifico per 3D Crack Link Ch3DCrL = cell2mat(Nodo3DCrackLink(:,4)); CrL3D_NTC = cell2mat(Nodo3DCrackLink(:,5)); NAN = 0; DIS = 0; while NAN == 0 if datenum(dataini3DCrL) == datenum(Data(1,1)) tempoini3DCrL = char(Data(1,2)); end NodeType = '3D Crack Link'; NodeNum3DCrL = num2str(cell2mat(Nodo3DCrackLink(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 = ''' ... dataini3DCrL ''' and Time >= ''' tempoini3DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNum3DCrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATini3DCrL = curs.Data; Ntempo = DATini3DCrL; [r,c] = size(DATini3DCrL); salto3DCrL = 0; if r==1 && c==1 textdat3DCrL = 'Warning: error reading 3D Crack Link (control unit data)!'; fprintf(fileID,fmt,textdat3DCrL); salto3DCrL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... dataini3DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNum3DCrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT23DCrL = curs.Data; Ndate = DAT23DCrL; if salto3DCrL == 1 DATini3DCrL = DAT23DCrL; end Check = size(DAT23DCrL); if Check(1,2) > 1 % ho superato il primo giorno if salto3DCrL == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATini3DCrL = [DATini3DCrL; DAT23DCrL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATini3DCrL); if rD ~=1 && cD ~=1 T = [cell2mat(DATini3DCrL(:,1)) repmat(' ', [rD,1]) cell2mat(DATini3DCrL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATini3DCrL = T; else DATini3DCrL = []; 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 if salto3DCrL == 0 % creo la matrice per i dati 3D Crack Link if Check(1,2) > 1 Dati3DCrackLink = cell(rd+rt,3*r3DCrL); DatiNTC3DCrackLink = cell(rd+rt,r3DCrL); else Dati3DCrackLink = cell(rt,3*r3DCrL); DatiNTC3DCrackLink = cell(rt,r3DCrL); end else Dati3DCrackLink = cell(rd,3*r3DCrL); DatiNTC3DCrackLink = cell(rd,r3DCrL); end col = 1; ii = 1; w = 0; N3DCrackLink = cell2mat(Nodo3DCrackLink(:,2)); while ii <= r3DCrL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = N3DCrackLink(ii,1); nNodo = num2str(nN); if Ch3DCrL(ii,1) == 3 || Ch3DCrL(ii,1) == 4 comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' ... dataini3DCrL ''' and Time >= ''' tempoini3DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DCrL = curs.Data; comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ... dataini3DCrL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DCrLd = curs.Data; if Ch3DCrL(ii,1) == 4 % Termometro comando = ['select Val3 from RawDataView where Date = ''' ... dataini3DCrL ''' and Time >= ''' tempoini3DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DCrL_NTC = curs.Data; comando = ['select Val3 from RawDataView where Date > ''' ... dataini3DCrL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DCrL_NTCd = curs.Data; else DATnodo3DCrL_NTC = 0; DATnodo3DCrL_NTCd = 0; end elseif Ch3DCrL(ii,1) >= 6 comando = ['select Val0, Val2, Val4 from RawDataView where Date = ''' ... dataini3DCrL ''' and Time >= ''' tempoini3DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DCrL = curs.Data; comando = ['select Val0, Val2, Val4 from RawDataView where Date > ''' ... dataini3DCrL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo3DCrLd = curs.Data; DATnodo3DCrL_NTC = 0; DATnodo3DCrL_NTCd = 0; end % 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. [rn,~] = size(DATnodo3DCrLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodo3DCrLd(i,:) = DATnodo3DCrLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node 3D Crack Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end [rn,~] = size(DATnodo3DCrL_NTCd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodo3DCrL_NTCd(i,:) = DATnodo3DCrL_NTCd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node 3D Crack Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if salto3DCrL == 0 if Ch3DCrL(ii,1) == 4 if CrL3D_NTC(ii,1) == 1 Dati3DCrackLink(1:rt,col:col+2) = DATnodo3DCrL; %#ok<*AGROW> DatiNTC3DCrackLink(1:rt,ii) = DATnodo3DCrL_NTC; %#ok<*AGROW> if Check(1,2) > 1 Dati3DCrackLink(rt+1:rt+rd,col:col+2) = DATnodo3DCrLd; DatiNTC3DCrackLink(rt+1:rt+rd,ii) = DATnodo3DCrL_NTCd; %#ok<*AGROW> end else Dati3DCrackLink(1:rt,col:col+2) = DATnodo3DCrL; %#ok<*AGROW> if Check(1,2) > 1 Dati3DCrackLink(rt+1:rt+rd,col:col+2) = DATnodo3DCrLd; end end elseif Ch3DCrL(ii,1) == 3 || Ch3DCrL(ii,1) >= 6 Dati3DCrackLink(1:rt,col:col+2) = DATnodo3DCrL; %#ok<*AGROW> if Check(1,2) > 1 Dati3DCrackLink(rt+1:rt+rd,col:col+2) = DATnodo3DCrLd; end end else if Ch3DCrL(ii,1) == 4 if CrL3D_NTC(ii,1)==1 Dati3DCrackLink(1:rd,col:col+2) = DATnodo3DCrL; %#ok<*AGROW> DatiNTC3DCrackLink(1:rd,ii) = DATnodo3DCrL_NTC; %#ok<*AGROW> else Dati3DCrackLink(1:rd,col:col+2) = DATnodo3DCrL; %#ok<*AGROW> end elseif Ch3DCrL(ii,1) == 1 Dati3DCrackLink(1:rd,col:col+2) = DATnodo3DCrL; %#ok<*AGROW> end end okdat3DCrL = ['Data of node number ' num2str(ii) ' of ' ... num2str(r3DCrL) ' 3D Crack Link nodes downloaded correctly']; fprintf(fileID,fmt,okdat3DCrL); ii = ii+1; col = col+3; end if w == 0 wardat = 'There are not warning for 3D Crack 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(Dati3DCrackLink); Err3DCrackLink = zeros(r,c); Ncorr = 0; NAN = 1; ESCI = 0; if NuovoZero3DCrL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(dataini3DCrL)); 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.',Dati3DCrackLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',Dati3DCrackLink(dis,jj)) == 0 Dati3DCrackLink = Dati3DCrackLink(dis:end,:); DatiNTC3DCrackLink = DatiNTC3DCrackLink(dis:end,:); DATini3DCrL = DATini3DCrL(dis:end,:); [r,c] = size(Dati3DCrackLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(dataini3DCrL)+1 < now dataini3DCrL = datestr(datenum(dataini3DCrL)+1,'yyyy-mm-dd'); break else yes3DCrL = 0; end end end end end if NAN == 1 if DIS ~= 1 && yes3DCrL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',Dati3DCrackLink(1,jj))); idxT = find(strcmp('---',Dati3DCrackLink(1,jj))); idxT2 = find(strcmp('-',Dati3DCrackLink(1,jj))); idxE2 = find(strcmp('Err2',Dati3DCrackLink(1,jj))); idxE255 = find(strcmp('Err255',Dati3DCrackLink(1,jj))); idxD = find(strcmp('DMUXe',Dati3DCrackLink(1,jj))); idxE1F = find(strcmp('Err1File',Dati3DCrackLink(1,jj))); idxN = find(strcmp('null',Dati3DCrackLink(1,jj))); idxRX = find(strcmp('No RX',Dati3DCrackLink(1,jj))); idxI = find(strcmp('id Error',Dati3DCrackLink(1,jj))); idxM = find(strcmp('MUX id Error',Dati3DCrackLink(1,jj))); idxC = find(strcmp('CH n. Error',Dati3DCrackLink(1,jj))); idxU = find(strcmp('Unknown Error',Dati3DCrackLink(1,jj))); idxMC = find(strcmp('MsgCorrup',Dati3DCrackLink(1,jj))); idxNS = find(strcmp('NotSupp',Dati3DCrackLink(1,jj))); idxU2 = find(strcmp('Unknown',Dati3DCrackLink(1,jj))); idxNA = find(strcmp('NotAv',Dati3DCrackLink(1,jj))); idxND = find(strcmp('No Data',Dati3DCrackLink(1,jj))); idxCE = find(strcmp('CH n. Er',Dati3DCrackLink(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 3D Crack Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZero3DCrL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(dataini3DCrL)+1 < now dataini3DCrL = datestr(datenum(dataini3DCrL)+1,'yyyy-mm-dd'); break else yes3DCrL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; dataini3DCrL = datestr(datenum(dataini3DCrL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 Dati3DCrackLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); Err3DCrackLink(1,jj) = 1; wardat = 'Data of 3D Crack Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; dataini3DCrL = datestr(datenum(dataini3DCrL)-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',Dati3DCrackLink(:,jj))); idxT = find(strcmp('---',Dati3DCrackLink(:,jj))); idxT2 = find(strcmp('-',Dati3DCrackLink(:,jj))); idxE2 = find(strcmp('Err2',Dati3DCrackLink(:,jj))); idxE255 = find(strcmp('Err255',Dati3DCrackLink(:,jj))); idxD = find(strcmp('DMUXe',Dati3DCrackLink(:,jj))); idxE1F = find(strcmp('Err1File',Dati3DCrackLink(:,jj))); idxN = find(strcmp('null',Dati3DCrackLink(:,jj))); idxRX = find(strcmp('No RX',Dati3DCrackLink(:,jj))); idxI = find(strcmp('id Error',Dati3DCrackLink(:,jj))); idxM = find(strcmp('MUX id Error',Dati3DCrackLink(:,jj))); idxC = find(strcmp('CH n. Error',Dati3DCrackLink(:,jj))); idxU = find(strcmp('Unknown Error',Dati3DCrackLink(:,jj))); idxMC = find(strcmp('MsgCorrup',Dati3DCrackLink(:,jj))); idxNS = find(strcmp('NotSupp',Dati3DCrackLink(:,jj))); idxU2 = find(strcmp('Unknown',Dati3DCrackLink(:,jj))); idxNA = find(strcmp('NotAv',Dati3DCrackLink(:,jj))); idxND = find(strcmp('No Data',Dati3DCrackLink(:,jj))); idxCE = find(strcmp('CH n. Er',Dati3DCrackLink(:,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; dataini3DCrL = datestr(datenum(dataini3DCrL)-1,'yyyy-mm-dd'); break else Dati3DCrackLink(indice,jj) = Dati3DCrackLink(indice-1,jj); Err3DCrackLink(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(Dati3DCrackLink(nnn,jj))); if check == 1 Dati3DCrackLink(nnn,jj) = Dati3DCrackLink(nnn-1,jj); Err3DCrackLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of 3D Crack Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. Dati3DCrackLink = [DATini3DCrL str2double(Dati3DCrackLink)]; % Elimino eventuali date doppie a = 2; while a <= r if Dati3DCrackLink(a,1) == Dati3DCrackLink(a-1,1) Dati3DCrackLink(a,:) = []; r = r-1; else a = a+1; end end end end end if ESCI == 0 if sum(CrL3D_NTC(:,1))>0 % NTC % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiNTC3DCrackLink); Ncorr = 0; ErrNTC3DCrackLink = zeros(r,c); if NuovoZero3DCrL == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(dataini3DCrL)); else rDR = 1; cDR = 1; RawDateNTC = []; DatiRawNTC = []; 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',DatiNTC3DCrackLink(1,jj))); idxT3 = find(strcmp('---',DatiNTC3DCrackLink(1,jj))); idxT = find(strcmp('-',DatiNTC3DCrackLink(1,jj))); idxE2 = find(strcmp('Err2',DatiNTC3DCrackLink(1,jj))); idxE255 = find(strcmp('Err255',DatiNTC3DCrackLink(1,jj))); idxD = find(strcmp('DMUXe',DatiNTC3DCrackLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTC3DCrackLink(1,jj))); idxN = find(strcmp('null',DatiNTC3DCrackLink(1,jj))); idxRX = find(strcmp('No RX',DatiNTC3DCrackLink(1,jj))); idxI = find(strcmp('id Error',DatiNTC3DCrackLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTC3DCrackLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTC3DCrackLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTC3DCrackLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTC3DCrackLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTC3DCrackLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTC3DCrackLink(1,jj))); idxNA = find(strcmp('NotAv',DatiNTC3DCrackLink(1,jj))); idxND = find(strcmp('No Data',DatiNTC3DCrackLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiNTC3DCrackLink(1,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of 3D Crack Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZero3DCrL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(dataini3DCrL)+1 < now dataini3DCrL = datestr(datenum(dataini3DCrL)+1,'yyyy-mm-dd'); break else yes3DCrL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; dataini3DCrL = datestr(datenum(dataini3DCrL)-1,'yyyy-mm-dd'); break else Dati3DCrackLink(1,jj) = cellstr(num2str(DatiRaw(RawDateNTC(end),jj+1))); Err3DCrackLink(1,jj) = 1; wardat = 'Data of 3D Crack 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',DatiNTC3DCrackLink(:,jj))); idxT3 = find(strcmp('---',DatiNTC3DCrackLink(:,jj))); idxT = find(strcmp('-',DatiNTC3DCrackLink(:,jj))); idxE2 = find(strcmp('Err2',DatiNTC3DCrackLink(:,jj))); idxE255 = find(strcmp('Err255',DatiNTC3DCrackLink(:,jj))); idxD = find(strcmp('DMUXe',DatiNTC3DCrackLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTC3DCrackLink(:,jj))); idxN = find(strcmp('null',DatiNTC3DCrackLink(:,jj))); idxRX = find(strcmp('No RX',DatiNTC3DCrackLink(:,jj))); idxI = find(strcmp('id Error',DatiNTC3DCrackLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTC3DCrackLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTC3DCrackLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTC3DCrackLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTC3DCrackLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTC3DCrackLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTC3DCrackLink(:,jj))); idxNA = find(strcmp('NotAv',DatiNTC3DCrackLink(:,jj))); idxND = find(strcmp('No Data',DatiNTC3DCrackLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiNTC3DCrackLink(:,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; dataini3DCrL = datestr(datenum(dataini3DCrL)-1,'yyyy-mm-dd'); else DatiNTC3DCrackLink(indice,jj) = DatiNTC3DCrackLink(indice-1,jj); ErrNTC3DCrackLink(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(DatiNTC3DCrackLink(nnn,jj))); if check == 1 DatiNTC3DCrackLink(nnn,jj) = DatiNTC3DCrackLink(nnn-1,jj); ErrNTC3DCrackLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC of 3D Crack Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTC3DCrackLink = [DATini3DCrL str2double(DatiNTC3DCrackLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTC3DCrackLink(a,1) == DatiNTC3DCrackLink(a-1,1) DatiNTC3DCrackLink(a,:) = []; r = r-1; else a = a+1; end end else ErrNTC3DCrackLink = 0; end end end if NuovoZero3DCrL == 1 && yes3DCrL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=Dati3DCrackLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(Dati3DCrackLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(Dati3DCrackLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);Dati3DCrackLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = Dati3DCrackLink; 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)<=DatiNTC3DCrackLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTC3DCrackLink(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTC3DCrackLink(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTC3DCrackLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTC3DCrackLink; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTC3DCrackLink; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(CrL3D_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end end %% 2D Crack Link if yes2DCrL == 0 % Non ci sono 2D Crack Link Dati2DCrackLink = []; DatiNTC2DCrackLink = []; Err2DCrackLink = []; ErrNTC2DCrackLink = []; Ch2DCrL = []; CrL2D_NTC = []; wardat = 'lettura function: there are not 2D Crack Link'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-2DCrack-RawData.csv']; % Specifico per 2D Crack Link RawDataFileNTC = ['' IDcentralina '-' DTcatena '-2DCrackNTC-RawData.csv']; % Specifico per 2D Crack Link Ch2DCrL = cell2mat(Nodo2DCrackLink(:,4)); CrL2D_NTC = cell2mat(Nodo2DCrackLink(:,5)); NAN = 0; DIS = 0; while NAN == 0 if datenum(dataini2DCrL) == datenum(Data(1,1)) tempoini2DCrL = char(Data(1,2)); end NodeType = '2D Crack Link'; NodeNum2DCrL = num2str(cell2mat(Nodo2DCrackLink(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 = ''' ... dataini2DCrL ''' and Time >= ''' tempoini2DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNum2DCrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATini2DCrL = curs.Data; Ntempo = DATini2DCrL; [r,c] = size(DATini2DCrL); salto2DCrL = 0; if r==1 && c==1 textdat2DCrL = 'Warning: error reading 2D Crack Link (control unit data)!'; fprintf(fileID,fmt,textdat2DCrL); salto2DCrL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... dataini2DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNum2DCrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT22DCrL = curs.Data; Ndate = DAT22DCrL; if salto2DCrL == 1 DATini2DCrL = DAT22DCrL; end Check = size(DAT22DCrL); if Check(1,2) > 1 % ho superato il primo giorno if salto2DCrL == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATini2DCrL = [DATini2DCrL; DAT22DCrL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATini2DCrL); if rD ~=1 && cD ~=1 T = [cell2mat(DATini2DCrL(:,1)) repmat(' ', [rD,1]) cell2mat(DATini2DCrL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATini2DCrL = T; else DATini2DCrL = []; 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 if salto2DCrL == 0 % creo la matrice per i dati 2D Crack Link if Check(1,2) > 1 Dati2DCrackLink = cell(rd+rt,2*r2DCrL); DatiNTC2DCrackLink = cell(rd+rt,r2DCrL); else Dati2DCrackLink = cell(rt,2*r2DCrL); DatiNTC2DCrackLink = cell(rt,r2DCrL); end else Dati2DCrackLink = cell(rd,2*r2DCrL); DatiNTC2DCrackLink = cell(rd,r2DCrL); end col = 1; ii = 1; w = 0; N2DCrackLink = cell2mat(Nodo2DCrackLink(:,2)); Ch2DCrL = cell2mat(Ch2DCrL); while ii <= r2DCrL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = N2DCrackLink(ii,1); nNodo = num2str(nN); if Ch2DCrL(ii,1) == 2 || Ch2DCrL(ii,1) == 3 comando = ['select Val0, Val1 from RawDataView where Date = ''' ... dataini2DCrL ''' and Time >= ''' tempoini2DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo2DCrL = curs.Data; comando = ['select Val0, Val1 from RawDataView where Date > ''' ... dataini2DCrL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo2DCrLd = curs.Data; if Ch2DCrL(ii,1) == 3 % Termometro comando = ['select Val2 from RawDataView where Date = ''' ... dataini2DCrL ''' and Time >= ''' tempoini2DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo2DCrL_NTC = curs.Data; comando = ['select Val2 from RawDataView where Date > ''' ... dataini2DCrL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo2DCrL_NTCd = curs.Data; else DATnodo2DCrL_NTC = 0; DATnodo2DCrL_NTCd = 0; end elseif Ch2DCrL(ii,1) >= 4 comando = ['select Val0, Val2 from RawDataView where Date = ''' ... dataini32CrL ''' and Time >= ''' tempoini2DCrL ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo2DCrL = curs.Data; comando = ['select Val0, Val2 from RawDataView where Date > ''' ... dataini2DCrL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ... DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodo2DCrLd = curs.Data; DATnodo2DCrL_NTC = 0; DATnodo2DCrL_NTCd = 0; end % 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. [rn,~] = size(DATnodo2DCrLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodo2DCrLd(i,:) = DATnodo2DCrLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node 2D Crack Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end [rn,~] = size(DATnodo2DCrL_NTCd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodo2DCrL_NTCd(i,:) = DATnodo2DCrL_NTCd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node 2D Crack Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if salto2DCrL == 0 if Ch2DCrL(ii,1) == 3 if CrL2D_NTC(ii,1) == 1 Dati2DCrackLink(1:rt,col:col+1) = DATnodo2DCrL; %#ok<*AGROW> Dati2DCrackLink_NTC(1:rt,ii) = DATnodo2DCrL_NTC; %#ok<*AGROW> if Check(1,2) > 1 Dati2DCrackLink(rt+1:rt+rd,col:col+1) = DATnodo2DCrLd; Dati2DCrackLink_NTC(rt+1:rt+rd,ii) = DATnodo2DCrL_NTCd; %#ok<*AGROW> end else Dati2DCrackLink(1:rt,col:col+1) = DATnodo2DCrL; %#ok<*AGROW> if Check(1,2) > 1 Dati2DCrackLink(rt+1:rt+rd,col:col+1) = DATnodo3DCrLd; end end elseif Ch3DCrL(ii,1) == 2 || Ch3DCrL(ii,1) >= 4 Dati2DCrackLink(1:rt,col:col+1) = DATnodo2DCrL; %#ok<*AGROW> if Check(1,2) > 1 Dati2DCrackLink(rt+1:rt+rd,col:col+1) = DATnodo2DCrLd; end end else if Ch2DCrL(ii,1) == 3 if CrL2D_NTC(ii,1)==1 Dati2DCrackLink(1:rd,col:col+1) = DATnodo2DCrL; %#ok<*AGROW> Dati2DCrackLink_NTC(1:rd,ii) = DATnodo2DCrL_NTC; %#ok<*AGROW> else Dati2DCrackLink(1:rd,col:col+1) = DATnodo2DCrL; %#ok<*AGROW> end elseif Ch2DCrL(ii,1) == 1 Dati2DCrackLink(1:rd,col:col+1) = DATnodo2DCrL; %#ok<*AGROW> end end okdat2DCrL = ['Data of node number ' num2str(ii) ' of ' ... num2str(r2DCrL) ' 2D Crack Link nodes downloaded correctly']; fprintf(fileID,fmt,okdat2DCrL); ii = ii+1; col = col+2; end if w == 0 wardat = 'There are not warning for 2D Crack 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(Dati2DCrackLink); Err2DCrackLink = zeros(r,c); Ncorr = 0; NAN = 1; ESCI = 0; if NuovoZero2DCrL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(dataini2DCrL)); 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.',Dati2DCrackLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',Dati2DCrackLink(dis,jj)) == 0 Dati2DCrackLink = Dati2DCrackLink(dis:end,:); DatiNTC2DCrackLink = DatiNTC2DCrackLink(dis:end,:); DATini2DCrL = DATini2DCrL(dis:end,:); [r,c] = size(Dati2DCrackLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(dataini2DCrL)+1 < now dataini2DCrL = datestr(datenum(dataini2DCrL)+1,'yyyy-mm-dd'); break else yes2DCrL = 0; end end end end end if NAN == 1 if DIS ~= 1 && yes2DCrL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',Dati2DCrackLink(1,jj))); idxT = find(strcmp('---',Dati2DCrackLink(1,jj))); idxT2 = find(strcmp('-',Dati2DCrackLink(1,jj))); idxE2 = find(strcmp('Err2',Dati2DCrackLink(1,jj))); idxE255 = find(strcmp('Err255',Dati2DCrackLink(1,jj))); idxD = find(strcmp('DMUXe',Dati2DCrackLink(1,jj))); idxE1F = find(strcmp('Err1File',Dati2DCrackLink(1,jj))); idxN = find(strcmp('null',Dati2DCrackLink(1,jj))); idxRX = find(strcmp('No RX',Dati2DCrackLink(1,jj))); idxI = find(strcmp('id Error',Dati2DCrackLink(1,jj))); idxM = find(strcmp('MUX id Error',Dati2DCrackLink(1,jj))); idxC = find(strcmp('CH n. Error',Dati2DCrackLink(1,jj))); idxU = find(strcmp('Unknown Error',Dati2DCrackLink(1,jj))); idxMC = find(strcmp('MsgCorrup',Dati2DCrackLink(1,jj))); idxNS = find(strcmp('NotSupp',Dati2DCrackLink(1,jj))); idxU2 = find(strcmp('Unknown',Dati2DCrackLink(1,jj))); idxNA = find(strcmp('NotAv',Dati2DCrackLink(1,jj))); idxND = find(strcmp('No Data',Dati2DCrackLink(1,jj))); idxCE = find(strcmp('CH n. Er',Dati2DCrackLink(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 2D Crack Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZero2DCrL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(dataini2DCrL)+1 < now dataini2DCrL = datestr(datenum(dataini2DCrL)+1,'yyyy-mm-dd'); break else yes2DCrL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; dataini2DCrL = datestr(datenum(dataini2DCrL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 Dati2DCrackLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); Err2DCrackLink(1,jj) = 1; wardat = 'Data of 2D Crack Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; dataini2DCrL = datestr(datenum(dataini2DCrL)-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',Dati2DCrackLink(:,jj))); idxT = find(strcmp('---',Dati2DCrackLink(:,jj))); idxT2 = find(strcmp('-',Dati2DCrackLink(:,jj))); idxE2 = find(strcmp('Err2',Dati2DCrackLink(:,jj))); idxE255 = find(strcmp('Err255',Dati2DCrackLink(:,jj))); idxD = find(strcmp('DMUXe',Dati2DCrackLink(:,jj))); idxE1F = find(strcmp('Err1File',Dati2DCrackLink(:,jj))); idxN = find(strcmp('null',Dati2DCrackLink(:,jj))); idxRX = find(strcmp('No RX',Dati2DCrackLink(:,jj))); idxI = find(strcmp('id Error',Dati2DCrackLink(:,jj))); idxM = find(strcmp('MUX id Error',Dati2DCrackLink(:,jj))); idxC = find(strcmp('CH n. Error',Dati2DCrackLink(:,jj))); idxU = find(strcmp('Unknown Error',Dati2DCrackLink(:,jj))); idxMC = find(strcmp('MsgCorrup',Dati2DCrackLink(:,jj))); idxNS = find(strcmp('NotSupp',Dati2DCrackLink(:,jj))); idxU2 = find(strcmp('Unknown',Dati2DCrackLink(:,jj))); idxNA = find(strcmp('NotAv',Dati2DCrackLink(:,jj))); idxND = find(strcmp('No Data',Dati2DCrackLink(:,jj))); idxCE = find(strcmp('CH n. Er',Dati2DCrackLink(:,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; dataini2DCrL = datestr(datenum(dataini2DCrL)-1,'yyyy-mm-dd'); break else Dati2DCrackLink(indice,jj) = Dati2DCrackLink(indice-1,jj); Err2DCrackLink(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(Dati2DCrackLink(nnn,jj))); if check == 1 Dati2DCrackLink(nnn,jj) = Dati2DCrackLink(nnn-1,jj); Err2DCrackLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of 2D Crack Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. Dati2DCrackLink = [DATini2DCrL str2double(Dati2DCrackLink)]; % Elimino eventuali date doppie a = 2; while a <= r if Dati2DCrackLink(a,1) == Dati2DCrackLink(a-1,1) Dati2DCrackLink(a,:) = []; r = r-1; else a = a+1; end end end end end if ESCI == 0 if sum(CrL2D_NTC(:,1))>0 % NTC % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiNTC2DCrackLink); Ncorr = 0; ErrNTC2DCrackLink = zeros(r,c); if NuovoZero2DCrL == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(dataini2DCrL)); else rDR = 1; cDR = 1; RawDateNTC = []; DatiRawNTC = []; 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',DatiNTC2DCrackLink(1,jj))); idxT3 = find(strcmp('---',DatiNTC2DCrackLink(1,jj))); idxT = find(strcmp('-',DatiNTC2DCrackLink(1,jj))); idxE2 = find(strcmp('Err2',DatiNTC2DCrackLink(1,jj))); idxE255 = find(strcmp('Err255',DatiNTC2DCrackLink(1,jj))); idxD = find(strcmp('DMUXe',DatiNTC2DCrackLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTC2DCrackLink(1,jj))); idxN = find(strcmp('null',DatiNTC2DCrackLink(1,jj))); idxRX = find(strcmp('No RX',DatiNTC2DCrackLink(1,jj))); idxI = find(strcmp('id Error',DatiNTC2DCrackLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTC2DCrackLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTC2DCrackLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTC2DCrackLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTC2DCrackLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTC2DCrackLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTC2DCrackLink(1,jj))); idxNA = find(strcmp('NotAv',DatiNTC2DCrackLink(1,jj))); idxND = find(strcmp('No Data',DatiNTC2DCrackLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiNTC2DCrackLink(1,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of 2D Crack Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZero2DCrL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(dataini2DCrL)+1 < now dataini2DCrL = datestr(datenum(dataini2DCrL)+1,'yyyy-mm-dd'); break else yes2DCrL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; dataini2DCrL = datestr(datenum(dataini2DCrL)-1,'yyyy-mm-dd'); break else Dati2DCrackLink(1,jj) = cellstr(num2str(DatiRaw(RawDateNTC(end),jj+1))); Err2DCrackLink(1,jj) = 1; wardat = 'Data of 2D Crack 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',DatiNTC2DCrackLink(:,jj))); idxT3 = find(strcmp('---',DatiNTC2DCrackLink(:,jj))); idxT = find(strcmp('-',DatiNTC2DCrackLink(:,jj))); idxE2 = find(strcmp('Err2',DatiNTC2DCrackLink(:,jj))); idxE255 = find(strcmp('Err255',DatiNTC2DCrackLink(:,jj))); idxD = find(strcmp('DMUXe',DatiNTC2DCrackLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTC2DCrackLink(:,jj))); idxN = find(strcmp('null',DatiNTC2DCrackLink(:,jj))); idxRX = find(strcmp('No RX',DatiNTC2DCrackLink(:,jj))); idxI = find(strcmp('id Error',DatiNTC2DCrackLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTC2DCrackLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTC2DCrackLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTC2DCrackLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTC2DCrackLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTC2DCrackLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTC2DCrackLink(:,jj))); idxNA = find(strcmp('NotAv',DatiNTC2DCrackLink(:,jj))); idxND = find(strcmp('No Data',DatiNTC2DCrackLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiNTC2DCrackLink(:,jj))); idx = union(idxE,idxT3); idx = union(idx,idxND); idx = union(idx,idxCE); 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,idxNA); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; dataini2DCrL = datestr(datenum(dataini2DCrL)-1,'yyyy-mm-dd'); else DatiNTC2DCrackLink(indice,jj) = DatiNTC2DCrackLink(indice-1,jj); ErrNTC2DCrackLink(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(DatiNTC2DCrackLink(nnn,jj))); if check == 1 DatiNTC2DCrackLink(nnn,jj) = DatiNTC2DCrackLink(nnn-1,jj); ErrNTC2DCrackLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC of 2D Crack Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTC2DCrackLink = [DATini2DCrL str2double(DatiNTC2DCrackLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTC2DCrackLink(a,1) == DatiNTC2DCrackLink(a-1,1) DatiNTC2DCrackLink(a,:) = []; r = r-1; else a = a+1; end end else ErrNTC2DCrackLink = 0; end end end if NuovoZero2DCrL == 1 && yes2DCrL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=Dati2DCrackLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(Dati2DCrackLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(Dati2DCrackLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);Dati2DCrackLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = Dati2DCrackLink; 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)<=DatiNTC2DCrackLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTC2DCrackLink(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTC2DCrackLink(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTC2DCrackLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTC2DCrackLink; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTC2DCrackLink; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(CrL2D_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end end %% Stress Meter attiva_SM = zeros(1,rSM); if yesSM == 0 % Non ci sono Stress Meter DatiStressMeter = []; DatiNTCStressMeter = []; DatiStressMeter_Rif = []; DatiNTCStressMeter_Rif = []; ErrStressMeter = []; ChSM = []; SM_NTC = []; wardat = 'lettura function: there are not Stress Meter'; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-Stress-RawData.csv']; % Specifico per Stress Meter RawDataFileNTC = ['' IDcentralina '-' DTcatena '-NTCStress-RawData.csv']; ChSM = cell2mat(NodoStressMeter(:,4)); SM_NTC = cell2mat(NodoStressMeter(:,5)); NAN = 0; DIS = 0; while NAN == 0 if datenum(datainiSM) == datenum(Data(1,1)) tempoiniSM = char(Data(1,2)); end NodeType = 'Stress Meter'; NodeNumSM = num2str(cell2mat(NodoStressMeter(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 = ''' ... datainiSM ''' and Time >= ''' tempoiniSM ''' and UnitName = ''' IDcentralina... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ... NodeType ''' and NodeNum = ''' NodeNumSM ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniSM = curs.Data; Ntempo = DATiniSM; [r,c] = size(DATiniSM); saltoSM = 0; if r==1 && c==1 textdatSM = 'Warning: error reading Stress Meter (control unit data)!'; fprintf(fileID,fmt,textdatSM); saltoSM = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiSM ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumSM ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2SM = curs.Data; Ndate = DAT2SM; if saltoSM == 1 DATiniSM = DAT2SM; end Check = size(DAT2SM); if Check(1,2) > 1 % ho superato il primo giorno if saltoSM == 0 % Concateno le informazioni relative a Step 1 e 2 (se necessario...) DATiniSM = [DATiniSM; DAT2SM]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniSM); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniSM(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniSM(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniSM = T; else DATiniSM = []; 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 saltoSM == 0 if Check(1,2) > 1 DatiStressMeter = cell(rd+rt,rSM); DatiNTCStressMeter = cell(rd+rt,rSM); else DatiStressMeter = cell(rt,rSM); DatiNTCStressMeter = cell(rt,rSM); end else DatiStressMeter = cell(rd,rSM); DatiNTCStressMeter = cell(rd,rSM); end DatiStressMeter_Rif = cell(150,rSM); DatiNTCStressMeter_Rif = cell(150,rSM); NStress = cell2mat(NodoStressMeter(:,2)); col = 1; ii = 1; w = 0; while ii <= rSM % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NStress(ii,1); nNodo = num2str(nN); % Dato comando = ['select Val0 from RawDataView where Date = ''' ... datainiSM ''' and Time >= ''' tempoiniSM ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoSM = curs.Data; % Dato comando = ['select Val0 from RawDataView where Date > ''' ... datainiSM ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoSMd = curs.Data; % Riferimento comando = ['select Val0 from RawDataView where Date = ''' ... datestr(Date_Rif_SM,'yyyy-mm-dd') ''' and Time >= ''' datestr(Date_Rif_SM,'HH:MM:SS')... ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoSM_Rif = curs.Data; if ChSM(ii,1) == 1 % T DATnodoSM_NTC = 0; DATnodoSMd_NTC = 0; elseif ChSM(ii,1) == 2 if SM_NTC(ii,1)==1 comando = ['select Val1 from RawDataView where Date = ''' ... datainiSM ''' and Time >= ''' tempoiniSM ''' and ToolNameID = ''' ... DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoSM_NTC = curs.Data; % Dato comando = ['select Val1 from RawDataView where Date > ''' ... datainiSM ''' and UnitName = ''' IDcentralina ... ''' and ToolNameID = ''' DTcatena ''' and NodeType = '''... NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoSMd_NTC = curs.Data; % Riferimento comando = ['select Val1 from RawDataView where Date = ''' ... datestr(Date_Rif_SM,'yyyy-mm-dd') ''' and Time >= ''' datestr(Date_Rif_SM,'HH:MM:SS')... ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoNTCSM_Rif = curs.Data; else DATnodoSM_NTC = 0; DATnodoSMd_NTC = 0; end end [rn,~] = size(DATnodoSMd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoSMd(i,:) = DATnodoSMd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Stress Meter ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end [rnT,~] = size(DATnodoSMd_NTC); % controllo date if rnT < rd % normalmente sono uguali for i = rnT+1:rd DATnodoSMd_NTC(i,:) = DATnodoSMd_NTC(rnT,:); % se mancano dati, copio gli ultimi end wardat = ['NTC of Node Stress Meter ' 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 saltoSM == 0 if ChSM(ii,1) >= 2 if SM_NTC(ii,1)==1 DatiStressMeter(1:rt,col) = DATnodoSM(:,:); %#ok<*AGROW> DatiNTCStressMeter(1:rt,col) = DATnodoSM_NTC(:,:); %#ok<*AGROW> if Check(1,2) > 1 [rrr,~] = size(DATnodoSMd); if rrr ~= rd DatiStressMeter(rt+rd-rrr+1:rt+rd,col) = DATnodoSMd; DatiNTCStressMeter(rt+rd-rrr+1:rt+rd,col) = DATnodoSMd_NTC; %#ok<*AGROW> else DatiStressMeter(rt+1:rt+rd,col) = DATnodoSMd(:,:); DatiNTCStressMeter(rt+1:rt+rd,col) = DATnodoSMd_NTC(:,:); %#ok<*AGROW> end end else DatiStressMeter(1:rt,col) = DATnodoSM(:,:); %#ok<*AGROW> if Check(1,2) > 1 DatiStressMeter(rt+1:rt+rd,col) = DATnodoSMd(:,:); end end elseif ChSM(ii,1) == 1 DatiStressMeter(1:rt,col) = DATnodoSM(:,:); %#ok<*AGROW> if Check(1,2) > 1 DatiStressMeter(rt+1:rt+rd,col) = DATnodoSMd(:,:); end end else if ChSM(ii,1) >= 2 if SM_NTC(ii,1)==1 DatiStressMeter(1:rd,col) = DATnodoSM(:,:); %#ok<*AGROW> DatiNTCStressMeter(1:rd,col) = DATnodoSM_NTC(:,:); %#ok<*AGROW> else DatiStressMeter(1:rd,col) = DATnodoSM(:,:); %#ok<*AGROW> end elseif ChSM(ii,1) == 1 DatiStressMeter(1:rd,col) = DATnodoSM(:,:); %#ok<*AGROW> end end % Riferimento [dim,~] = size(DATnodoSM_Rif); % controllo date DatiStressMeter_Rif(1:dim,col) = DATnodoSM_Rif; if col == 1 DatiStressMeter_Rif(dim+1:end,:) = []; end [dimT,~] = size(DATnodoNTCSM_Rif); % controllo date DatiNTCStressMeter_Rif(1:dimT,col) = DATnodoNTCSM_Rif; if col == 1 DatiNTCStressMeter_Rif(dim+1:end,:) = []; end okdatSM = ['Data of node number ' num2str(ii) ' of ' ... num2str(rSM) ' Stress Meter nodes downloaded correctly']; fprintf(fileID,fmt,okdatSM); ii = ii+1; col = col+1; end if w == 0 wardat = 'There are not warning for Stress Meter!'; 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(DatiStressMeter); ErrStressMeter = zeros(r,c); Ncorr = 0; ESCI = 0; Rilancia = 0; NAN = 1; if NuovoZeroSM == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiSM)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end [dim,numS] = size(DatiStressMeter_Rif); for SM = 1:numS RIF = 0; row = 1; rompi = 0; while RIF == 0 if attiva_SM(1,SM) == 0 if row <= dim % Controllo la data di riferimento idxE = find(strcmp('Err1',DatiStressMeter_Rif(row,SM))); idxT = find(strcmp('---',DatiStressMeter_Rif(row,SM))); idxE2 = find(strcmp('Err2',DatiStressMeter_Rif(row,SM))); idxE255 = find(strcmp('Err255',DatiStressMeter_Rif(row,SM))); idxD = find(strcmp('DMUXe',DatiStressMeter_Rif(row,SM))); idxE1F = find(strcmp('Err1File',DatiStressMeter_Rif(row,SM))); idxN = find(strcmp('null',DatiStressMeter_Rif(row,SM))); idxRX = find(strcmp('No RX',DatiStressMeter_Rif(row,SM))); idxI = find(strcmp('id Error',DatiStressMeter_Rif(row,SM))); idxM = find(strcmp('MUX id Error',DatiStressMeter_Rif(row,SM))); idxC = find(strcmp('CH n. Error',DatiStressMeter_Rif(row,SM))); idxU = find(strcmp('Unknown Error',DatiStressMeter_Rif(row,SM))); idxMC = find(strcmp('MsgCorrup',DatiStressMeter_Rif(row,SM))); idxNS = find(strcmp('NotSupp',DatiStressMeter_Rif(row,SM))); idxU2 = find(strcmp('Unknown',DatiStressMeter_Rif(row,SM))); idxNA = find(strcmp('NotAv',DatiStressMeter_Rif(row,SM))); idxDIS = find(strcmp('Dis.',DatiStressMeter_Rif(row,SM))); idxND = find(strcmp('No Data',DatiStressMeter_Rif(row,SM))); idxPP = find(strcmp('[]',DatiStressMeter_Rif(row,SM))); idxCE = find(strcmp('CH n. Er',DatiStressMeter_Rif(row,SM))); idx = union(idxE,idxT); 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); idx = union(idx,idxPP); [~,ri] = size(idx); if isempty(idx) == 0 || isempty(cell2mat(DatiStressMeter_Rif(row,SM))) == 1 if ri >= 1 % Se almeno uno è in errore, allora guardo la riga dopo row = row+1; else RIF = 1; if attiva_SM(1,SM) == 0 DatiStress_Rif(1,SM) = DatiStressMeter_Rif(row,SM); DatiNTCStress_Rif(1,SM) = str2double(DatiNTCStressMeter_Rif(row,SM)); end attiva_SM(1,SM) = 1; end else RIF = 1; if attiva_SM(1,SM) == 0 DatiStress_Rif(1,SM) = DatiStressMeter_Rif(row,SM); DatiNTCStress_Rif(1,SM) = str2double(DatiNTCStressMeter_Rif(row,SM)); end attiva_SM(1,SM) = 1; end else Date_Rif_SM = floor(Date_Rif_SM)+1; if Date_Rif_SM > now Rilancia = 0; RIF = 1; DatiStress_Rif(1,SM) = num2cell(0); DatiNTCStress_Rif(1,SM) = 0; attiva_SM(1,SM) = 0; else RIF = 1; NAN = 0; Rilancia = 1; end rompi = 1; end else break end end if rompi == 1 break end end if Rilancia == 0 for jj=1:c % Se il nodo è Dis., devo aumentare di uno la data (il nodo non % è ancora stato installato!) if strcmp('Dis.',DatiStressMeter(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiStressMeter(dis,jj)) == 0 DatiStressMeter = DatiStressMeter(dis:end,:); DATiniSM = DATiniSM(dis:end,:); [r,c] = size(DatiStressMeter); break elseif dis == r NAN = 0; DIS = 1; if datenum(datainiSM)+1 < now datainiSM = datestr(datenum(datainiSM)+1,'yyyy-mm-dd'); break else yesSM = 0; end end end end end if DIS ~= 1 && yesSM == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiStressMeter(1,jj))); idxT = find(strcmp('---',DatiStressMeter(1,jj))); idxT2 = find(strcmp('-',DatiStressMeter(1,jj))); idxE2 = find(strcmp('Err2',DatiStressMeter(1,jj))); idxE255 = find(strcmp('Err255',DatiStressMeter(1,jj))); idxD = find(strcmp('DMUXe',DatiStressMeter(1,jj))); idxE1F = find(strcmp('Err1File',DatiStressMeter(1,jj))); idxN = find(strcmp('null',DatiStressMeter(1,jj))); idxRX = find(strcmp('No RX',DatiStressMeter(1,jj))); idxI = find(strcmp('id Error',DatiStressMeter(1,jj))); idxM = find(strcmp('MUX id Error',DatiStressMeter(1,jj))); idxC = find(strcmp('CH n. Error',DatiStressMeter(1,jj))); idxU = find(strcmp('Unknown Error',DatiStressMeter(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiStressMeter(1,jj))); idxNS = find(strcmp('NotSupp',DatiStressMeter(1,jj))); idxU2 = find(strcmp('Unknown',DatiStressMeter(1,jj))); idxNA = find(strcmp('NotAv',DatiStressMeter(1,jj))); idxND = find(strcmp('No Data',DatiStressMeter(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 || NuovoZeroSM == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiSM)+1 < now datainiSM = datestr(datenum(datainiSM)+1,'yyyy-mm-dd'); break else yesSM = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiSM = datestr(datenum(datainiSM)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiStressMeter(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrStressMeter(1,jj) = 1; wardat = 'Data of Stress Meter nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiSM = datestr(datenum(datainiSM)-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',DatiStressMeter(:,jj))); idxT = find(strcmp('---',DatiStressMeter(:,jj))); idxT2 = find(strcmp('-',DatiStressMeter(:,jj))); idxE2 = find(strcmp('Err2',DatiStressMeter(:,jj))); idxE255 = find(strcmp('Err255',DatiStressMeter(:,jj))); idxD = find(strcmp('DMUXe',DatiStressMeter(:,jj))); idxE1F = find(strcmp('Err1File',DatiStressMeter(:,jj))); idxN = find(strcmp('null',DatiStressMeter(:,jj))); idxRX = find(strcmp('No RX',DatiStressMeter(:,jj))); idxI = find(strcmp('id Error',DatiStressMeter(:,jj))); idxM = find(strcmp('MUX id Error',DatiStressMeter(:,jj))); idxC = find(strcmp('CH n. Error',DatiStressMeter(:,jj))); idxU = find(strcmp('Unknown Error',DatiStressMeter(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiStressMeter(:,jj))); idxNS = find(strcmp('NotSupp',DatiStressMeter(:,jj))); idxU2 = find(strcmp('Unknown',DatiStressMeter(:,jj))); idxNA = find(strcmp('NotAv',DatiStressMeter(:,jj))); idxND = find(strcmp('No Data',DatiStressMeter(:,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); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiSM = datestr(datenum(datainiSM)-1,'yyyy-mm-dd'); break else DatiStressMeter(indice,jj) = DatiStressMeter(indice-1,jj); ErrStressMeter(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(DatiStressMeter(nnn,jj))); if check == 1 DatiStressMeter(nnn,jj) = DatiStressMeter(nnn-1,jj); ErrStressMeter(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Stress Meter data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiStressMeter = [DATiniSM str2double(DatiStressMeter)]; DatiStress_Rif = str2double(DatiStress_Rif); % Elimino eventuali date doppie a = 2; while a <= r if DatiStressMeter(a,1) == DatiStressMeter(a-1,1) DatiStressMeter(a,:) = []; r = r-1; else a = a+1; end end end end if ESCI == 0 if sum(SM_NTC(:,1))>0 if DIS ~= 1 && yesSM == 1 % NTC [r,c] = size(DatiNTCStressMeter); Ncorr = 0; if NuovoZeroSM == 1 if isfile(RawDataFile) == 1 DatiRawNTC = csvread(RawDataFileNTC); [rDR,cDR] = size(DatiRawNTC); DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000; RawDateNTC = find(DatiRawNTC(:,1)<=datenum(datainiSM)); 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',DatiNTCStressMeter(1,jj))); idxND = find(strcmp('No Data',DatiNTCStressMeter(1,jj))); idxT3 = find(strcmp('---',DatiNTCStressMeter(1,jj))); idxT = find(strcmp('-',DatiNTCStressMeter(1,jj))); idxE2 = find(strcmp('Err2',DatiNTCStressMeter(1,jj))); idxE255 = find(strcmp('Err255',DatiNTCStressMeter(1,jj))); idxD = find(strcmp('DMUXe',DatiNTCStressMeter(1,jj))); idxE1F = find(strcmp('Err1File',DatiNTCStressMeter(1,jj))); idxN = find(strcmp('null',DatiNTCStressMeter(1,jj))); idxRX = find(strcmp('No RX',DatiNTCStressMeter(1,jj))); idxI = find(strcmp('id Error',DatiNTCStressMeter(1,jj))); idxM = find(strcmp('MUX id Error',DatiNTCStressMeter(1,jj))); idxC = find(strcmp('CH n. Error',DatiNTCStressMeter(1,jj))); idxU = find(strcmp('Unknown Error',DatiNTCStressMeter(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCStressMeter(1,jj))); idxNS = find(strcmp('NotSupp',DatiNTCStressMeter(1,jj))); idxU2 = find(strcmp('Unknown',DatiNTCStressMeter(1,jj))); idxNA = find(strcmp('NotAv',DatiNTCStressMeter(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,idxNA); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of NTC of Stress Meter nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroSM == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiSM)+1 < now datainiSM = datestr(datenum(datainiSM)+1,'yyyy-mm-dd'); break else yesSM = 0; end else if isempty(RawDateNTC) == 1 NAN = 0; ESCI = 1; datainiSM = datestr(datenum(datainiSM)-1,'yyyy-mm-dd'); break else DatiNTCStressMeter(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1))); if ErrStressMeter(indice,jj) == 0 ErrStressMeter(indice,jj) = 0.5; else ErrStressMeter(indice,jj) = 1; end wardat = 'Data of NTC of Stress Meter 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',DatiNTCStressMeter(:,jj))); idxND = find(strcmp('No Data',DatiNTCStressMeter(:,jj))); idxT3 = find(strcmp('---',DatiNTCStressMeter(:,jj))); idxT = find(strcmp('-',DatiNTCStressMeter(:,jj))); idxE2 = find(strcmp('Err2',DatiNTCStressMeter(:,jj))); idxE255 = find(strcmp('Err255',DatiNTCStressMeter(:,jj))); idxD = find(strcmp('DMUXe',DatiNTCStressMeter(:,jj))); idxE1F = find(strcmp('Err1File',DatiNTCStressMeter(:,jj))); idxN = find(strcmp('null',DatiNTCStressMeter(:,jj))); idxRX = find(strcmp('No RX',DatiNTCStressMeter(:,jj))); idxI = find(strcmp('id Error',DatiNTCStressMeter(:,jj))); idxM = find(strcmp('MUX id Error',DatiNTCStressMeter(:,jj))); idxC = find(strcmp('CH n. Error',DatiNTCStressMeter(:,jj))); idxU = find(strcmp('Unknown Error',DatiNTCStressMeter(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiNTCStressMeter(:,jj))); idxNS = find(strcmp('NotSupp',DatiNTCStressMeter(:,jj))); idxU2 = find(strcmp('Unknown',DatiNTCStressMeter(:,jj))); idxNA = find(strcmp('NotAv',DatiNTCStressMeter(:,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,idxNA); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiSM = datestr(datenum(datainiSM)-1,'yyyy-mm-dd'); break else DatiNTCStressMeter(indice,jj) = DatiNTCStressMeter(indice-1,jj); if ErrStressMeter(indice,jj) == 0 ErrStressMeter(indice,jj) = 0.5; else ErrStressMeter(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(DatiNTCStressMeter(nnn,jj))); if check == 1 DatiNTCStressMeter(nnn,jj) = DatiNTCStressMeter(nnn-1,jj); if ErrStressMeter(indice,jj) == 0 ErrStressMeter(indice,jj) = 0.5; else ErrStressMeter(indice,jj) = 1; end Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of NTC Stress Meter data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiNTCStressMeter = [DATiniSM str2double(DatiNTCStressMeter)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiNTCStressMeter(a,1) == DatiNTCStressMeter(a-1,1) DatiNTCStressMeter(a,:) = []; r = r-1; else a = a+1; end end end end end end end if NuovoZeroSM == 1 && yesSM == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiStressMeter(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiStressMeter(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiStressMeter(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiStressMeter(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiStressMeter; 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)<=DatiNTCStressMeter(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiNTCStressMeter(:,1)>DatiRawNTC(end,1)); else RawDate2 = find(DatiNTCStressMeter(:,1)>DatiRawNTC(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTCStressMeter(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 DatiNTC = DatiNTCStressMeter; else DatiNTC = DatiRawNTC; end % Elimino appoggio più vecchio di un mese RawDate3 = find(DatiNTC(:,1)0 DatiNTC = DatiNTCStressMeter; end end Dati(:,1) = Dati(:,1) - 730000; csvwrite(RawDataFile,Dati); if sum(SM_NTC(:,1))>0 DatiNTC(:,1) = DatiNTC(:,1) - 730000; csvwrite(RawDataFileNTC,DatiNTC); end DatiStressMeter_Rif = DatiStress_Rif; DatiNTCStressMeter_Rif = DatiNTCStress_Rif; end corrdat = 'lettura function executed'; fprintf(fileID,fmt,corrdat); fclose(fileID); end