% Questa funzione legge i dati di ogni tipologia di nodo (se presente) function [Batteria,Batteria_LoRa,Type,DatiRSNLink,ErrRSNLink,DatiRSNLinkHR,ErrRSNLinkHR,DatiTriggerLink,ErrTriggerLink,... DatiShockSensor,ErrShockSensor,DatiLoadLink,ErrLoadLink,DatiDebrisLink,ErrDebrisLink,DatiGFLink,ErrGFLink,... DatiGSLink,ErrGSLink,yesRSN,yesRSNHR,yesTrL,yesLL,yesDL] = lettura(IDcentralina,DTcatena,MEMS,datainiRSN,tempoiniRSN,... NodoRSNLink,NuovoZeroRSN,datainiSS,tempoiniSS,NodoSS,NuovoZeroSS,datainiRSNHR,tempoiniRSNHR,NodoRSNLinkHR,... NuovoZeroRSNHR,datainiTrL,tempoiniTrL,NodoTriggerLink,NuovoZeroTrL,datainiLL,tempoiniLL,NodoLoadLink,NuovoZeroLL,... datainiGF,tempoiniGF,datainiGS,tempoiniGS,datainiDL,tempoiniDL,NodoDebrisLink,yesRSN,yesSS,yesRSNHR,yesTrL,yesLL,... yesGF,yesGS,yesDL,rRSN,rSS,rRSNHR,rTrL,rLL,rDL,conn,catena,date,time,FileName) % Log file fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'lettura function started'; fprintf(fileID,fmt,text); %% Batteria % cerco la batteria nel primo nodo i = 1; z = 0; while z==0 if cell2mat(catena(i,3)) == 1 z = 1; else i = i+1; % nodo numero 1 end end i = cell2mat(catena(i,1)); if i == 38 dataini = datainiRSN; tempoini = tempoiniRSN; elseif i == 39 dataini = datainiRSNHR; tempoini = tempoiniRSNHR; elseif i == 15 dataini = datainiLL; tempoini = tempoiniLL; elseif i == 40 dataini = datainiTrL; tempoini = tempoiniTrL; elseif i == 48 dataini = datainiGF; tempoini = tempoiniGF; elseif i == 50 dataini = datainiGS; tempoini = tempoiniGS; elseif i == 49 dataini = datainiDL; tempoini = tempoiniDL; elseif i == 54 dataini = datainiSS; tempoini = tempoiniSS; end % Batteria Centralina NodeNum = '1'; comando = ['select Date, Time, BatLevel from RawDataView where Date = ''' ... dataini ''' and Time >= ''' tempoini ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' ']; curs = exec(conn,comando); curs = fetch(curs); BatTempo = curs.Data; comando = ['select Date, Time, BatLevel from RawDataView where Date > ''' ... dataini ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' ']; curs = exec(conn,comando); curs = fetch(curs); BatData = curs.Data; if strcmp(char(BatData(1)),'No Data') Batteria = BatTempo; elseif strcmp(char(BatTempo(1)),'No Data') Batteria = BatData; else Batteria = [BatTempo;BatData]; end % Batteria LoRa NodeNum = '2'; comando = ['select Date, Time, BatLevelModule from RawDataView where Date = ''' ... dataini ''' and Time >= ''' tempoini ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' ']; curs = exec(conn,comando); curs = fetch(curs); BatTempo = curs.Data; comando = ['select Date, Time, BatLevelModule from RawDataView where Date > ''' ... dataini ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeNum = ''' NodeNum ''' ']; curs = exec(conn,comando); curs = fetch(curs); BatData = curs.Data; if strcmp(char(BatData(1)),'No Data') Batteria_LoRa = BatTempo; elseif strcmp(char(BatTempo(1)),'No Data') Batteria_LoRa = BatData; else Batteria_LoRa = [BatTempo;BatData]; end % Cerco la tipologia di centralina comando = ['select type_id from units where name = ''' IDcentralina ''' ']; curs = exec(conn,comando); curs = fetch(curs); Type = cell2mat(curs.Data); Data(1,1) = cellstr(date); Data(1,2) = cellstr(time); %% RSN Link if yesRSN == 0 % Non ci sono RSN Link DatiRSNLink = []; ErrRSNLink = []; wardat = 'lettura function: there are not RSN Link' ; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-RSN-RawData.csv']; NAN = 0; while NAN == 0 if datenum(datainiRSN) == datenum(Data(1,1)) tempoiniRSN = char(Data(1,2)); end NodeType = 'RSN Link'; NodeNumRSN = num2str(cell2mat(NodoRSNLink(1,2))); % scarico i dati del primo nodo % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura % Step 1 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date = ''' ... datainiRSN ''' and Time >= ''' tempoiniRSN ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumRSN ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniRSN = curs.Data; Ntempo = DATiniRSN; [r,c] = size(DATiniRSN); saltoRSN = 0; if r==1 && c==1 textdatRSN = 'Warning: error reading RSN Link (control unit data)!'; fprintf(fileID,fmt,textdatRSN); saltoRSN = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiRSN ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumRSN ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2RSN = curs.Data; Ndate = DAT2RSN; if saltoRSN == 1 DATiniRSN = DAT2RSN; end Check = size(DAT2RSN); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoRSN == 0 DATiniRSN = [DATiniRSN; DAT2RSN]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniRSN); if cD ~=1 T = [cell2mat(DATiniRSN(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniRSN(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniRSN = T; else DATiniRSN = []; end % Scarico dati relativi ai singoli nodi [rd,~] = size(Ndate); [rt,~] = size(Ntempo); if saltoRSN == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiRSNLink = cell(rd+rt,4*rRSN); else DatiRSNLink = cell(rt,4*rRSN); end else DatiRSNLink = cell(rd,4*rRSN); end NRSNLink = cell2mat(NodoRSNLink(:,2)); ii = 1; col = 4; w = 0; while ii <= rRSN % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NRSNLink(ii,1); nNodo = num2str(nN); if MEMS == 2 % RSN Link 1.0 comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' ... datainiRSN ''' and Time >= ''' tempoiniRSN ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date > ''' ... datainiRSN ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNd = curs.Data; else % D-Fence comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' ... datainiRSN ''' and Time >= ''' tempoiniRSN ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSN = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ... datainiRSN ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNd = curs.Data; end % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. ini_col = col-3; if saltoRSN == 0 DatiRSNLink(1:rt,ini_col:col) = DATnodoRSN(:,:); else DatiRSNLink(1:rd,ini_col:col) = DATnodoRSNd(:,:); end [rn,~] = size(DATnodoRSNd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoRSNd(i,:) = DATnodoRSNd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node RSN Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoRSN == 0 DatiRSNLink(rt+1:rt+rd,ini_col:col) = DATnodoRSNd(:,:); end else DatiRSNLink = DatiRSNLink(1:end,:); end okdatRSN = ['Data of RSN Link node number ' num2str(ii) ' of ' ... num2str(rRSN) ' downloaded correctly']; fprintf(fileID,fmt,okdatRSN); ii = ii+1; col = col+4; end if w == 0 wardat = 'There are not warning for RSN Link!'; fprintf(fileID,fmt,wardat); end % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiRSNLink); ErrRSNLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroRSN == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiRSN)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; end for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiRSNLink(1,jj))); idxND = find(strcmp('No Data',DatiRSNLink(1,jj))); idxT = find(strcmp('---',DatiRSNLink(1,jj))); idxT2 = find(strcmp('-',DatiRSNLink(1,jj))); idxE2 = find(strcmp('Err2',DatiRSNLink(1,jj))); idxE255 = find(strcmp('Err255',DatiRSNLink(1,jj))); idxD = find(strcmp('DMUXe',DatiRSNLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiRSNLink(1,jj))); idxN = find(strcmp('null',DatiRSNLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of RSN Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroRSN == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiRSN)+1 < now datainiRSN = datestr(datenum(datainiRSN)+1,'yyyy-mm-dd'); break else yesRSN = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiRSN = datestr(datenum(datainiRSN)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiRSNLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrRSNLink(1,jj) = 1; wardat = 'Data of RSN Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiRSN = datestr(datenum(datainiRSN)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c % nodi % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiRSNLink(:,jj))); idxND = find(strcmp('No Data',DatiRSNLink(:,jj))); idxT = find(strcmp('---',DatiRSNLink(:,jj))); idxT2 = find(strcmp('-',DatiRSNLink(:,jj))); idxE2 = find(strcmp('Err2',DatiRSNLink(:,jj))); idxE255 = find(strcmp('Err255',DatiRSNLink(:,jj))); idxD = find(strcmp('DMUXe',DatiRSNLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiRSNLink(:,jj))); idxN = find(strcmp('null',DatiRSNLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 wardat = 'Warning on the correction of RSN Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); NAN = 0; ESCI = 1; datainiRSN = datestr(datenum(datainiRSN)-1,'yyyy-mm-dd'); break end DatiRSNLink(indice,jj) = DatiRSNLink(indice-1,jj); ErrRSNLink(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r % nodi check = isnan(cell2mat(DatiRSNLink(nnn,jj))); if check == 1 DatiRSNLink(nnn,jj) = DatiRSNLink(nnn-1,jj); ErrRSNLink(nnn,jj) = 1; end end end corrdat = ['' num2str(Ncorr) ' corrections of RSN Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiRSNLink = [DATiniRSN str2double(DatiRSNLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiRSNLink(a,1) == DatiRSNLink(a-1,1) DatiRSNLink(a,:) = []; r = r-1; else a = a+1; end end end end if NuovoZeroRSN == 1 if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiRSNLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiRSNLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiRSNLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiRSNLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiRSNLink; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniSS ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumSS ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniSS = curs.Data; Ntempo = DATiniSS; [r,c] = size(DATiniSS); saltoSS = 0; if r==1 && c==1 textdatTrL = 'Warning: error reading Shock Sensor (control unit data)!'; fprintf(fileID,fmt,textdatTrL); saltoSS = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiSS ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumSS ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2SS = curs.Data; Ndate = DAT2SS; if saltoSS == 1 DATiniSS = DAT2SS; end Check = size(DAT2SS); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoSS == 0 DATiniSS = [DATiniSS; curs.Data]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniSS); if cD ~=1 T = [cell2mat(DATiniSS(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniSS(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniSS = T; else DATiniSS = []; end % Scarico dati relativi ai singoli nodi ii = 1; [rd,~] = size(Ndate); [rt,~] = size(Ntempo); if saltoSS == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiShockSensor = cell(rd+rt,1*rSS); else DatiShockSensor = cell(rt,1*rSS); end else DatiShockSensor = cell(rd,1*rSS); end NShockSensor = cell2mat(NodoSS(:,2)); col = 1; w = 0; while ii <= rSS % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NShockSensor(ii,1); nNodo = num2str(nN); comando = ['select Val0 from RawDataView where Date = ''' ... datainiSS ''' and Time >= ''' tempoiniSS ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoSS = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0 from RawDataView where Date > ''' ... datainiSS ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoSSd = curs.Data; % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. if saltoSS == 0 DatiShockSensor(1:rt,col) = DATnodoSS(:,:); else DatiShockSensor(1:rd,col) = DATnodoSSd(:,:); end [rn,~] = size(DATnodoSSd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoSSd(i,:) = DATnodoSSd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Shock Sensor ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoSS == 0 DatiShockSensor(rt+1:rt+rd,col) = DATnodoSSd(:,:); end else DatiShockSensor = DatiShockSensor(1:end,:); end okdatSS = ['Data of node number ' num2str(ii) ' of ' ... num2str(rSS) ' Shock Sensor nodes downloaded correctly']; fprintf(fileID,fmt,okdatSS); ii = ii+1; col = col+1; end if w == 0 wardat = 'There are not warning for Shock Sensor!'; fprintf(fileID,fmt,wardat); end % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con uno zero (no info sull'attivazione del % Trigger) [r,c] = size(DatiShockSensor); ErrShockSensor = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroSS == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiSS)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; end % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiShockSensor(1,jj))); idxT = find(strcmp('---',DatiShockSensor(1,jj))); idxT2 = find(strcmp('-',DatiShockSensor(1,jj))); idxE2 = find(strcmp('Err2',DatiShockSensor(1,jj))); idxE255 = find(strcmp('Err255',DatiShockSensor(1,jj))); idxD = find(strcmp('DMUXe',DatiShockSensor(1,jj))); idxE1F = find(strcmp('Err1File',DatiShockSensor(1,jj))); idxN = find(strcmp('null',DatiShockSensor(1,jj))); idxRX = find(strcmp('No RX',DatiShockSensor(1,jj))); idxI = find(strcmp('id Error',DatiShockSensor(1,jj))); idxM = find(strcmp('MUX id Error',DatiShockSensor(1,jj))); idxC = find(strcmp('CH n. Error',DatiShockSensor(1,jj))); idxU = find(strcmp('Unknown Error',DatiShockSensor(1,jj))); idxDis = find(strcmp('Dis.',DatiShockSensor(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiShockSensor(1,jj))); idxNS = find(strcmp('NotSupp',DatiShockSensor(1,jj))); idxU2 = find(strcmp('Unknown',DatiShockSensor(1,jj))); idxNA = find(strcmp('NotAv',DatiShockSensor(1,jj))); idxND = find(strcmp('No Data',DatiShockSensor(1,jj))); idxCE = find(strcmp('CH n. Er',DatiShockSensor(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxT2); idx = union(idx,idxCE); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); idx = union(idx,idxRX); idx = union(idx,idxI); idx = union(idx,idxM); idx = union(idx,idxC); idx = union(idx,idxU); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); idx = union(idx,idxND); idx = union(idx,idxDis); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Shock Sensor nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroSS == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiSS)+1 < now datainiSS = datestr(datenum(datainiSS)+1,'yyyy-mm-dd'); break else yesSS = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiSS = datestr(datenum(datainiSS)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiShockSensor(1,jj) = 0; ErrShockSensor(1,jj) = 1; wardat = 'Data of Shock Sensor nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiSS = datestr(datenum(datainiSS)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c idxE = find(strcmp('Err1',DatiShockSensor(:,jj))); idxT = find(strcmp('---',DatiShockSensor(:,jj))); idxT2 = find(strcmp('-',DatiShockSensor(:,jj))); idxE2 = find(strcmp('Err2',DatiShockSensor(:,jj))); idxE255 = find(strcmp('Err255',DatiShockSensor(:,jj))); idxD = find(strcmp('DMUXe',DatiShockSensor(:,jj))); idxE1F = find(strcmp('Err1File',DatiShockSensor(:,jj))); idxN = find(strcmp('null',DatiShockSensor(:,jj))); idxRX = find(strcmp('No RX',DatiShockSensor(:,jj))); idxI = find(strcmp('id Error',DatiShockSensor(:,jj))); idxM = find(strcmp('MUX id Error',DatiShockSensor(:,jj))); idxC = find(strcmp('CH n. Error',DatiShockSensor(:,jj))); idxU = find(strcmp('Unknown Error',DatiShockSensor(:,jj))); idxDis = find(strcmp('Dis.',DatiShockSensor(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiShockSensor(:,jj))); idxNS = find(strcmp('NotSupp',DatiShockSensor(:,jj))); idxU2 = find(strcmp('Unknown',DatiShockSensor(:,jj))); idxNA = find(strcmp('NotAv',DatiShockSensor(:,jj))); idxND = find(strcmp('No Data',DatiShockSensor(:,jj))); idxCE = find(strcmp('CH n. Er',DatiShockSensor(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxT2); idx = union(idx,idxCE); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); idx = union(idx,idxRX); idx = union(idx,idxI); idx = union(idx,idxM); idx = union(idx,idxC); idx = union(idx,idxU); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); idx = union(idx,idxND); idx = union(idx,idxDis); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 wardat = 'Warning on the correction of Shock Sensor nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); NAN = 0; ESCI = 1; datainiSS = datestr(datenum(datainiSS)-1,'yyyy-mm-dd'); break else DatiShockSensor(indice,jj) = 0; ErrShockSensor(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r check = isnan(cell2mat(DatiShockSensor(nnn,jj))); if check == 1 DatiShockSensor(nnn,jj) = 0; ErrShockSensor(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end end corrdat = ['' num2str(Ncorr) ' corrections of Shock Sensor data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiShockSensor = [DATiniSS str2double(DatiShockSensor)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiShockSensor(a,1) == DatiShockSensor(a-1,1) DatiShockSensor(a,:) = []; r = r-1; else a = a+1; end end end end %% RSN Link HR if yesRSNHR == 0 % Non ci sono RSN Link HR DatiRSNLinkHR = []; ErrRSNLinkHR = []; wardat = 'lettura function: there are not RSN Link HR'; fprintf(fileID,fmt,wardat); else NAN = 0; RawDataFile = ['' IDcentralina '-' DTcatena '-RSNHR-RawData.csv']; NodeType = 'RSN Link HR'; while NAN == 0 if datenum(datainiRSNHR) == datenum(Data(1,1)) tempoiniRSNHR = char(Data(1,2)); end NodeNumRSNHR = num2str(cell2mat(NodoRSNLinkHR(1,2))); % scarico i dati del primo nodo % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura % Step 1 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date = ''' ... datainiRSNHR ''' and Time >= ''' tempoiniRSNHR ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumRSNHR ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniRSNHR = curs.Data; Ntempo = DATiniRSNHR; [r,c] = size(DATiniRSNHR); saltoRSNHR = 0; if r==1 && c==1 textdatRSNHR = 'Warning: error reading RSN Link HR (control unit data)!'; fprintf(fileID,fmt,textdatRSNHR); saltoRSNHR = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiRSNHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumRSNHR ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2RSNHR = curs.Data; Ndate = DAT2RSNHR; if saltoRSNHR == 1 DATiniRSNHR = DAT2RSNHR; end Check = size(DAT2RSNHR); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoRSNHR == 0 DATiniRSNHR = [DATiniRSNHR; curs.Data]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniRSNHR); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniRSNHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniRSNHR(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniRSNHR = T; else DATiniRSNHR = []; end % Scarico dati relativi ai singoli nodi [rd,~] = size(Ndate); [rt,~] = size(Ntempo); if saltoRSNHR == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiRSNLinkHR = cell(rd+rt,3*rRSNHR); else DatiRSNLinkHR = cell(rt,3*rRSNHR); end else DatiRSNLinkHR = cell(rd,3*rRSNHR); end NRSNLinkHR = cell2mat(NodoRSNLinkHR(:,2)); col = 3; ii = 1; w = 0; while ii <= rRSNHR % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NRSNLinkHR(ii,1); nNodo = num2str(nN); comando = ['select Val0, Val1, Val6 from RawDataView where Date = ''' ... datainiRSNHR ''' and Time >= ''' tempoiniRSNHR ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHR = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val6 from RawDataView where Date > ''' ... datainiRSNHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoRSNHRd = curs.Data; % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. ini_col = col-2; if saltoRSNHR == 0 DatiRSNLinkHR(1:rt,ini_col:col) = DATnodoRSNHR(:,:); else DatiRSNLinkHR(1:rd,ini_col:col) = DATnodoRSNHRd(:,:); end [rn,~] = size(DATnodoRSNHRd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoRSNHRd(i,:) = DATnodoRSNHRd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node RSN Link HR ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoRSNHR == 0 DatiRSNLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoRSNHRd(:,:); end else DatiRSNLinkHR = DatiRSNLinkHR(1:end,:); end okdatRSNHR = ['Data of RSN Link HR node number ' num2str(ii) ' of ' ... num2str(rRSNHR) ' downloaded correctly']; fprintf(fileID,fmt,okdatRSNHR); ii = ii+1; col = col+3; end if w == 0 wardat = 'There are not warning for RSN Link HR!'; fprintf(fileID,fmt,wardat); end % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiRSNLinkHR); ErrRSNLinkHR = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroRSNHR == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiRSNHR)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; end for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiRSNLinkHR(1,jj))); idxND = find(strcmp('No Data',DatiRSNLinkHR(1,jj))); idxT = find(strcmp('---',DatiRSNLinkHR(1,jj))); idxT2 = find(strcmp('-',DatiRSNLinkHR(1,jj))); idxE2 = find(strcmp('Err2',DatiRSNLinkHR(1,jj))); idxE255 = find(strcmp('Err255',DatiRSNLinkHR(1,jj))); idxD = find(strcmp('DMUXe',DatiRSNLinkHR(1,jj))); idxE1F = find(strcmp('Err1File',DatiRSNLinkHR(1,jj))); idxN = find(strcmp('null',DatiRSNLinkHR(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of RSN Link HR nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroRSNHR == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiRSNHR)+1 < now datainiRSNHR = datestr(datenum(datainiRSNHR)+1,'yyyy-mm-dd'); break else yesRSNHR = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiRSNHR = datestr(datenum(datainiRSNHR)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiRSNLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrRSNLinkHR(1,jj) = 1; wardat = 'Data of RSN Link HR nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiRSNHR = datestr(datenum(datainiRSNHR)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c % nodi % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiRSNLinkHR(:,jj))); idxND = find(strcmp('No Data',DatiRSNLinkHR(:,jj))); idxT = find(strcmp('---',DatiRSNLinkHR(:,jj))); idxT2 = find(strcmp('-',DatiRSNLinkHR(:,jj))); idxE2 = find(strcmp('Err2',DatiRSNLinkHR(:,jj))); idxE255 = find(strcmp('Err255',DatiRSNLinkHR(:,jj))); idxD = find(strcmp('DMUXe',DatiRSNLinkHR(:,jj))); idxE1F = find(strcmp('Err1File',DatiRSNLinkHR(:,jj))); idxN = find(strcmp('null',DatiRSNLinkHR(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiRSNHR = datestr(datenum(datainiRSNHR)-1,'yyyy-mm-dd'); break end DatiRSNLinkHR(indice,jj) = DatiRSNLinkHR(indice-1,jj); ErrRSNLinkHR(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r % date check = isnan(cell2mat(DatiRSNLinkHR(nnn,jj))); if check == 1 DatiRSNLinkHR(nnn,jj) = DatiRSNLinkHR(nnn-1,jj); ErrRSNLinkHR(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of RSN Link HR data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiRSNLinkHR = [DATiniRSNHR str2double(DatiRSNLinkHR)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiRSNLinkHR(a,1) == DatiRSNLinkHR(a-1,1) DatiRSNLinkHR(a,:) = []; r = r-1; else a = a+1; end end end end if NuovoZeroRSNHR == 1 if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiRSNLinkHR(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiRSNLinkHR(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiRSNLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiRSNLinkHR(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiRSNLinkHR; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniLL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumLL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniLL = curs.Data; Ntempo = DATiniLL; [r,c] = size(DATiniLL); saltoLL = 0; if r==1 && c==1 textdatLL = 'Warning: error reading Load Link (control unit data)!'; fprintf(fileID,fmt,textdatLL); saltoLL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumLL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2LL = curs.Data; Ndate = DAT2LL; if saltoLL == 1 DATiniLL = DAT2LL; end Check = size(DAT2LL); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoLL == 0 DATiniLL = [DATiniLL; curs.Data]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniLL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniLL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniLL = T; else DATiniLL = []; end % Scarico dati relativi ai singoli nodi ii = 1; [rd,~] = size(Ndate); [rt,~] = size(Ntempo); if saltoLL == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiLoadLink = cell(rd+rt,1*rLL); else DatiLoadLink = cell(rt,1*rLL); end else DatiLoadLink = cell(rd,1*rLL); end NLoadLink = cell2mat(NodoLoadLink(:,2)); col = 1; w = 0; while ii <= rLL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NLoadLink(ii,1); nNodo = num2str(nN); if strcmp(NodoLoadLink(1,4),'mV/V') comando = ['select Val0 from RawDataView where Date = ''' ... datainiLL ''' and Time >= ''' tempoiniLL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; elseif strcmp(NodoLoadLink(1,4),'4-20 mA') comando = ['select Val0 from RawDataView where Date = ''' ... datainiLL ''' and Time >= ''' tempoiniLL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; elseif strcmp(NodoLoadLink(1,4),'ADC') comando = ['select Val0 from RawDataView where Date = ''' ... datainiLL ''' and Time >= ''' tempoiniLL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; end curs = exec(conn,comando); curs = fetch(curs); DATnodoLL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. if strcmp(NodoLoadLink(1,4),'mV/V') comando = ['select Val0 from RawDataView where Date > ''' ... datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; elseif strcmp(NodoLoadLink(1,4),'4-20 mA') comando = ['select Val0 from RawDataView where Date > ''' ... datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; elseif strcmp(NodoLoadLink(1,4),'ADC') comando = ['select Val0 from RawDataView where Date > ''' ... datainiLL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; end curs = exec(conn,comando); curs = fetch(curs); DATnodoLLd = curs.Data; % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. if saltoLL == 0 DatiLoadLink(1:rt,col) = DATnodoLL(:,:); else DatiLoadLink(1:rd,col) = DATnodoLLd(:,:); end [rn,~] = size(DATnodoLLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoLLd(i,:) = DATnodoLLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Load Link node ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoLL == 0 DatiLoadLink(rt+1:rt+rd,col) = DATnodoLLd(:,:); end else DatiLoadLink = DatiLoadLink(1:end,:); end okdatLL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rLL) ' Load Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatLL); ii = ii+1; col = col+1; end if w == 0 wardat = 'There are not warning for Load Link!'; fprintf(fileID,fmt,wardat); end % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiLoadLink); ErrLoadLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroLL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiLL)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; end for jj=1:c % Se il nodo è Dis., devo aumentare di uno la data (il nodo non % è ancora stato installato!) if strcmp('Dis.',DatiLoadLink(1,jj)) == 1 for dis = 2:r if strcmp('Dis.',DatiLoadLink(dis,jj)) == 0 DatiLoadLink = DatiLoadLink(dis:end,:); DATiniLL = DATiniLL(dis:end,:); [r,c] = size(DatiLoadLink); break elseif dis == r NAN = 0; DIS = 1; if datenum(datainiLL)+1 < now datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd'); break else yesLL = 0; end end end end end if DIS ~= 1 && yesLL == 1 % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiLoadLink(1,jj))); idxT = find(strcmp('---',DatiLoadLink(1,jj))); idxE2 = find(strcmp('Err2',DatiLoadLink(1,jj))); idxE255 = find(strcmp('Err255',DatiLoadLink(1,jj))); idxD = find(strcmp('DMUXe',DatiLoadLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiLoadLink(1,jj))); idxN = find(strcmp('null',DatiLoadLink(1,jj))); idxRX = find(strcmp('No RX',DatiLoadLink(1,jj))); idxI = find(strcmp('id Error',DatiLoadLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiLoadLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiLoadLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiLoadLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiLoadLink(1,jj))); idxDis = find(strcmp('Dis.',DatiLoadLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiLoadLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiLoadLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiLoadLink(1,jj))); idxNA = find(strcmp('NotAv',DatiLoadLink(1,jj))); idxND = find(strcmp('No Data',DatiLoadLink(1,jj))); idxPP = find(strcmp('[]',DatiLoadLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxE2); idx = union(idx,idxCE); idx = union(idx,idxND); idx = union(idx,idxPP); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); idx = union(idx,idxRX); idx = union(idx,idxI); idx = union(idx,idxM); idx = union(idx,idxC); idx = union(idx,idxCE); idx = union(idx,idxU); idx = union(idx,idxDis); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Load Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroLL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiLL)+1 < now datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd'); break else yesLL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiLL = datestr(datenum(datainiLL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiLoadLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrLoadLink(1,jj) = 1; wardat = 'Data of Load Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiLL = datestr(datenum(datainiLL)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c idxE = find(strcmp('Err1',DatiLoadLink(:,jj))); idxT = find(strcmp('---',DatiLoadLink(:,jj))); idxT2 = find(strcmp('-',DatiLoadLink(:,jj))); idxE2 = find(strcmp('Err2',DatiLoadLink(:,jj))); idxE255 = find(strcmp('Err255',DatiLoadLink(:,jj))); idxD = find(strcmp('DMUXe',DatiLoadLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiLoadLink(:,jj))); idxN = find(strcmp('null',DatiLoadLink(:,jj))); idxRX = find(strcmp('No RX',DatiLoadLink(:,jj))); idxI = find(strcmp('id Error',DatiLoadLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiLoadLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiLoadLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiLoadLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiLoadLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiLoadLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiLoadLink(:,jj))); idxNA = find(strcmp('NotAv',DatiLoadLink(:,jj))); idxND = find(strcmp('No Data',DatiLoadLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiLoadLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxT2); idx = union(idx,idxCE); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); idx = union(idx,idxRX); idx = union(idx,idxI); idx = union(idx,idxM); idx = union(idx,idxC); idx = union(idx,idxU); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); idx = union(idx,idxND); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 NAN = 0; ESCI = 1; datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd'); break else DatiLoadLink(indice,jj) = DatiLoadLink(indice-1,jj); ErrLoadLink(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r check = isnan(cell2mat(DatiLoadLink(nnn,jj))); if check == 1 DatiLoadLink(nnn,jj) = DatiLoadLink(nnn-1,jj); ErrLoadLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end corrdat = ['' num2str(Ncorr) ' corrections of Load Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiLoadLink = [DATiniLL str2double(DatiLoadLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiLoadLink(a,1) == DatiLoadLink(a-1,1) DatiLoadLink(a,:) = []; r = r-1; else a = a+1; end end end end end if NuovoZeroLL == 1 && yesLL == 1 [rDR,cDR] = size(DatiRaw); if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiLoadLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiLoadLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiLoadLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiLoadLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiLoadLink; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' tempoiniTrL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumTrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniTrL = curs.Data; Ntempo = DATiniTrL; [r,c] = size(DATiniTrL); saltoTrL = 0; if r==1 && c==1 textdatTrL = 'Warning: error reading Trigger Link (control unit data)!'; fprintf(fileID,fmt,textdatTrL); saltoTrL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiTrL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTrL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2TrL = curs.Data; Ndate = DAT2TrL; if saltoTrL == 1 DATiniTrL = DAT2TrL; end Check = size(DAT2TrL); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoTrL == 0 DATiniTrL = [DATiniTrL; curs.Data]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniTrL); if cD ~=1 T = [cell2mat(DATiniTrL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTrL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniTrL = T; else DATiniTrL = []; end % Scarico dati relativi ai singoli nodi ii = 1; [rd,~] = size(Ndate); [rt,~] = size(Ntempo); if saltoTrL == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiTriggerLink = cell(rd+rt,1*rTrL); else DatiTriggerLink = cell(rt,1*rTrL); end else DatiTriggerLink = cell(rd,1*rTrL); end NTriggerLink = cell2mat(NodoTriggerLink(:,2)); col = 1; w = 0; while ii <= rTrL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NTriggerLink(ii,1); nNodo = num2str(nN); if Type == 7 comando = ['select Val1, Val0 from RawDataView where Date = ''' ... datainiTrL ''' and Time >= ''' tempoiniTrL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; else comando = ['select Val0 from RawDataView where Date = ''' ... datainiTrL ''' and Time >= ''' tempoiniTrL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; end curs = exec(conn,comando); curs = fetch(curs); DATnodoTrL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. if Type == 7 comando = ['select Val1, Val0 from RawDataView where Date > ''' ... datainiTrL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; else comando = ['select Val0 from RawDataView where Date > ''' ... datainiTrL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; end curs = exec(conn,comando); curs = fetch(curs); DATnodoTrLd = curs.Data; % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. if saltoTrL == 0 if Type == 7 DatiTriggerLink(1:rt,col:col+1) = DATnodoTrL(:,:); else DatiTriggerLink(1:rt,col) = DATnodoTrL(:,:); end else if Type == 7 DatiTriggerLink(1:rd,col:col+1) = DATnodoTrLd(:,:); else DatiTriggerLink(1:rd,col) = DATnodoTrLd(:,:); end end [rn,~] = size(DATnodoTrLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoTrLd(i,:) = DATnodoTrLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Trigger Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoTrL == 0 if Type == 7 DatiTriggerLink(rt+1:rt+rd,col:col+1) = DATnodoTrLd(:,:); else DatiTriggerLink(rt+1:rt+rd,col) = DATnodoTrLd(:,:); end end else DatiTriggerLink = DatiTriggerLink(1:end,:); end okdatTrL = ['Data of node number ' num2str(ii) ' of ' ... num2str(rTrL) ' Trigger Link nodes downloaded correctly']; fprintf(fileID,fmt,okdatTrL); ii = ii+1; if Type == 7 col = col+2; else col = col+1; end end if w == 0 wardat = 'There are not warning for Trigger Link!'; fprintf(fileID,fmt,wardat); end % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con uno zero (no info sull'attivazione del % Trigger) [r,c] = size(DatiTriggerLink); ErrTriggerLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroTrL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiTrL)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; end % --- Codice per il primo dato --- for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiTriggerLink(1,jj))); idxT = find(strcmp('---',DatiTriggerLink(1,jj))); idxT2 = find(strcmp('-',DatiTriggerLink(1,jj))); idxE2 = find(strcmp('Err2',DatiTriggerLink(1,jj))); idxE255 = find(strcmp('Err255',DatiTriggerLink(1,jj))); idxD = find(strcmp('DMUXe',DatiTriggerLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiTriggerLink(1,jj))); idxN = find(strcmp('null',DatiTriggerLink(1,jj))); idxRX = find(strcmp('No RX',DatiTriggerLink(1,jj))); idxI = find(strcmp('id Error',DatiTriggerLink(1,jj))); idxM = find(strcmp('MUX id Error',DatiTriggerLink(1,jj))); idxC = find(strcmp('CH n. Error',DatiTriggerLink(1,jj))); idxU = find(strcmp('Unknown Error',DatiTriggerLink(1,jj))); idxDis = find(strcmp('Dis.',DatiTriggerLink(1,jj))); idxMC = find(strcmp('MsgCorrup',DatiTriggerLink(1,jj))); idxNS = find(strcmp('NotSupp',DatiTriggerLink(1,jj))); idxU2 = find(strcmp('Unknown',DatiTriggerLink(1,jj))); idxNA = find(strcmp('NotAv',DatiTriggerLink(1,jj))); idxND = find(strcmp('No Data',DatiTriggerLink(1,jj))); idxCE = find(strcmp('CH n. Er',DatiTriggerLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxT2); idx = union(idx,idxCE); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); idx = union(idx,idxRX); idx = union(idx,idxI); idx = union(idx,idxM); idx = union(idx,idxC); idx = union(idx,idxU); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); idx = union(idx,idxND); idx = union(idx,idxDis); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Trigger Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroTrL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiTrL)+1 < now datainiTrL = datestr(datenum(datainiTrL)+1,'yyyy-mm-dd'); break else yesTrL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiTrL = datestr(datenum(datainiTrL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiTriggerLink(1,jj) = 0; ErrTriggerLink(1,jj) = 1; wardat = 'Data of Trigger Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiTrL = datestr(datenum(datainiTrL)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c idxE = find(strcmp('Err1',DatiTriggerLink(:,jj))); idxT = find(strcmp('---',DatiTriggerLink(:,jj))); idxT2 = find(strcmp('-',DatiTriggerLink(:,jj))); idxE2 = find(strcmp('Err2',DatiTriggerLink(:,jj))); idxE255 = find(strcmp('Err255',DatiTriggerLink(:,jj))); idxD = find(strcmp('DMUXe',DatiTriggerLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiTriggerLink(:,jj))); idxN = find(strcmp('null',DatiTriggerLink(:,jj))); idxRX = find(strcmp('No RX',DatiTriggerLink(:,jj))); idxI = find(strcmp('id Error',DatiTriggerLink(:,jj))); idxM = find(strcmp('MUX id Error',DatiTriggerLink(:,jj))); idxC = find(strcmp('CH n. Error',DatiTriggerLink(:,jj))); idxU = find(strcmp('Unknown Error',DatiTriggerLink(:,jj))); idxDis = find(strcmp('Dis.',DatiTriggerLink(:,jj))); idxMC = find(strcmp('MsgCorrup',DatiTriggerLink(:,jj))); idxNS = find(strcmp('NotSupp',DatiTriggerLink(:,jj))); idxU2 = find(strcmp('Unknown',DatiTriggerLink(:,jj))); idxNA = find(strcmp('NotAv',DatiTriggerLink(:,jj))); idxND = find(strcmp('No Data',DatiTriggerLink(:,jj))); idxCE = find(strcmp('CH n. Er',DatiTriggerLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxT2); idx = union(idx,idxCE); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); idx = union(idx,idxRX); idx = union(idx,idxI); idx = union(idx,idxM); idx = union(idx,idxC); idx = union(idx,idxU); idx = union(idx,idxMC); idx = union(idx,idxNS); idx = union(idx,idxU2); idx = union(idx,idxNA); idx = union(idx,idxND); idx = union(idx,idxDis); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 wardat = 'Warning on the correction of Trigger Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); NAN = 0; ESCI = 1; datainiTrL = datestr(datenum(datainiTrL)-1,'yyyy-mm-dd'); break else DatiTriggerLink(indice,jj) = 0; ErrTriggerLink(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r check = isnan(cell2mat(DatiTriggerLink(nnn,jj))); if check == 1 DatiTriggerLink(nnn,jj) = 0; ErrTriggerLink(nnn,jj) = 1; Ncorr = Ncorr+ri; end end end end corrdat = ['' num2str(Ncorr) ' corrections of Trigger Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiTriggerLink = [DATiniTrL str2double(DatiTriggerLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiTriggerLink(a,1) == DatiTriggerLink(a-1,1) DatiTriggerLink(a,:) = []; r = r-1; else a = a+1; end end end end %% Debris Link if yesDL == 0 % Non ci sono Debris Link DatiDebrisLink = []; ErrDebrisLink = []; wardat = 'lettura function: there are not Debris Link' ; fprintf(fileID,fmt,wardat); else RawDataFile = ['' IDcentralina '-' DTcatena '-DL-RawData.csv']; NAN = 0; while NAN == 0 if datenum(datainiDL) == datenum(Data(1,1)) tempoiniDL = char(Data(1,2)); end NodeType = 'Debris Link'; NodeNumDL = num2str(cell2mat(NodoDebrisLink(1,2))); % scarico i dati del primo nodo % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura % Step 1 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date = ''' ... datainiDL ''' and Time >= ''' tempoiniDL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType... ''' and NodeNum = ''' NodeNumDL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniDL = curs.Data; Ntempo = DATiniDL; [r,c] = size(DATiniDL); saltoDL = 0; if r==1 && c==1 textdatDL = 'Warning: error reading Debris Link (control unit data)!'; fprintf(fileID,fmt,textdatDL); saltoDL = 1; end % Step 2 (vedi commento più avanti) comando = ['select Date, Time from RawDataView where Date > ''' ... datainiDL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumDL ''' ']; curs = exec(conn,comando); curs = fetch(curs); DAT2DL = curs.Data; Ndate = DAT2DL; if saltoDL == 1 DATiniDL = DAT2DL; end Check = size(DAT2DL); if Check(1,2) > 1 % ho superato il primo giorno % Concateno le informazioni relative a Step 1 e 2 (se necessario...) if saltoDL == 0 DATiniDL = [DATiniDL; DAT2DL]; end end % Modifico il formato di data e ora in DATini. [rD,cD] = size(DATiniDL); if rD ~=1 && cD ~=1 T = [cell2mat(DATiniDL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniDL(:,2))]; T = datenum(T); % Converto da Cell Array a Matrice. DATiniDL = T; else DATiniDL = []; end % Scarico dati relativi ai singoli nodi [rd,~] = size(Ndate); [rt,~] = size(Ntempo); if saltoDL == 0 if Check(1,2) > 1 % ho superato il primo giorno DatiDebrisLink = cell(rd+rt,4*rDL); else DatiDebrisLink = cell(rt,4*rDL); end else DatiDebrisLink = cell(rd,4*rDL); end NDebrisLink = cell2mat(NodoDebrisLink(:,2)); ii = 1; col = 4; w = 0; while ii <= rDL % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; nN = NDebrisLink(ii,1); nNodo = num2str(nN); comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' ... datainiDL ''' and Time >= ''' tempoiniDL ''' and ToolNameID = ''' DTcatena... ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ... NodeType ''' and NodeNum =' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoDL = curs.Data; % Step 2: Considero le date successive e scarico tutti i dati disponibili. comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date > ''' ... datainiDL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina... ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo '']; curs = exec(conn,comando); curs = fetch(curs); DATnodoDLd = curs.Data; % DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo, % DATnodi è la matrice che concatena i dati relativi a ciascun nodo. ini_col = col-3; if saltoDL == 0 DatiDebrisLink(1:rt,ini_col:col) = DATnodoDL(:,:); else DatiDebrisLink(1:rd,ini_col:col) = DATnodoDLd(:,:); end [rn,~] = size(DATnodoDLd); % controllo date if rn < rd % normalmente sono uguali for i = rn+1:rd DATnodoDLd(i,:) = DATnodoDLd(rn,:); % se mancano dati, copio gli ultimi end wardat = ['Node Debris Link ' num2str(ii) ' does NOT work!']; fprintf(fileID,fmt,wardat); w = 1; end if Check(1,2) > 1 if saltoDL == 0 DatiDebrisLink(rt+1:rt+rd,ini_col:col) = DATnodoDLd(:,:); end else DatiDebrisLink = DatiDebrisLink(1:end,:); end okdatDL = ['Data of Debris Link node number ' num2str(ii) ' of ' ... num2str(rDL) ' downloaded correctly']; fprintf(fileID,fmt,okdatDL); ii = ii+1; col = col+4; end if w == 0 wardat = 'There are not warning for Debris Link!'; fprintf(fileID,fmt,wardat); end % Controllo gli eventuali errori ('Err1' o '---') e li rimuovo, % rimpiazzandoli con l'ultimo dato disponibile di quel nodo [r,c] = size(DatiDebrisLink); ErrDebrisLink = zeros(r,c); Ncorr = 0; ESCI = 0; NAN = 1; if NuovoZeroDL == 1 if isfile(RawDataFile) == 1 DatiRaw = csvread(RawDataFile); [rDR,cDR] = size(DatiRaw); DatiRaw(:,1) = DatiRaw(:,1) + 730000; RawDate = find(DatiRaw(:,1)<=datenum(datainiDL)); else rDR = 1; cDR = 1; RawDate = []; DatiRaw = []; end else rDR = 1; cDR = 1; RawDate = []; end for jj=1:c % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiDebrisLink(1,jj))); idxND = find(strcmp('No Data',DatiDebrisLink(1,jj))); idxT = find(strcmp('---',DatiDebrisLink(1,jj))); idxT2 = find(strcmp('-',DatiDebrisLink(1,jj))); idxE2 = find(strcmp('Err2',DatiDebrisLink(1,jj))); idxE255 = find(strcmp('Err255',DatiDebrisLink(1,jj))); idxD = find(strcmp('DMUXe',DatiDebrisLink(1,jj))); idxE1F = find(strcmp('Err1File',DatiDebrisLink(1,jj))); idxN = find(strcmp('null',DatiDebrisLink(1,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); if ri == 1 wardat = 'Warning on the correction of Debris Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); if rDR==1 && cDR==1 || NuovoZeroDL == 0 % il file non è mai stato scritto, cerco la data precedente NAN = 0; ESCI = 1; if datenum(datainiDL)+1 < now datainiDL = datestr(datenum(datainiDL)+1,'yyyy-mm-dd'); break else yesDL = 0; end else if isempty(RawDate) == 1 NAN = 0; ESCI = 1; datainiDL = datestr(datenum(datainiDL)-1,'yyyy-mm-dd'); break else if isnan(DatiRaw(RawDate(end),jj+1)) == 0 DatiDebrisLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1))); ErrDebrisLink(1,jj) = 1; wardat = 'Data of Debris Link nodes corrected using Raw Data of reference Csv file.'; fprintf(fileID,fmt,wardat); Ncorr = Ncorr+ri; NAN = 1; else NAN = 0; ESCI = 1; datainiDL = datestr(datenum(datainiDL)-1,'yyyy-mm-dd'); break end end end end end if ESCI == 0 for jj=1:c % nodi % Trovo l'indice della cella contenenti una determinata stringa. idxE = find(strcmp('Err1',DatiDebrisLink(:,jj))); idxND = find(strcmp('No Data',DatiDebrisLink(:,jj))); idxT = find(strcmp('---',DatiDebrisLink(:,jj))); idxT2 = find(strcmp('-',DatiDebrisLink(:,jj))); idxE2 = find(strcmp('Err2',DatiDebrisLink(:,jj))); idxE255 = find(strcmp('Err255',DatiDebrisLink(:,jj))); idxD = find(strcmp('DMUXe',DatiDebrisLink(:,jj))); idxE1F = find(strcmp('Err1File',DatiDebrisLink(:,jj))); idxN = find(strcmp('null',DatiDebrisLink(:,jj))); idx = union(idxE,idxT); idx = union(idx,idxND); idx = union(idx,idxT2); idx = union(idx,idxE2); idx = union(idx,idxE255); idx = union(idx,idxD); idx = union(idx,idxE1F); idx = union(idx,idxN); [ri,~] = size(idx); for kk=1:ri indice=idx(kk); if indice == 1 wardat = 'Warning on the correction of Debris Link nodes: there are not data at the beginning of the array!'; fprintf(fileID,fmt,wardat); NAN = 0; ESCI = 1; datainiDL = datestr(datenum(datainiDL)-1,'yyyy-mm-dd'); break end DatiDebrisLink(indice,jj) = DatiDebrisLink(indice-1,jj); ErrDebrisLink(indice,jj) = 1; Ncorr = Ncorr+ri; NAN = 1; end if ESCI == 1 break end % Elimino gli eventuali Not a Number for nnn = 2:r % nodi check = isnan(cell2mat(DatiDebrisLink(nnn,jj))); if check == 1 DatiDebrisLink(nnn,jj) = DatiDebrisLink(nnn-1,jj); ErrDebrisLink(nnn,jj) = 1; end end end corrdat = ['' num2str(Ncorr) ' corrections of Debris Link data done!']; fprintf(fileID,fmt,corrdat); % Concateno informazioni generali e/o letture dai nodi. DatiDebrisLink = [DATiniDL str2double(DatiDebrisLink)]; % Elimino eventuali date doppie a = 2; while a <= r if DatiDebrisLink(a,1) == DatiDebrisLink(a-1,1) DatiDebrisLink(a,:) = []; r = r-1; else a = a+1; end end end end if NuovoZeroDL == 1 if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0 RawDate1 = find(DatiRaw(:,1)<=DatiDebrisLink(1,1)); if isempty(RawDate1) == 1 RawDate2 = 1; elseif RawDate1(end) == rDR RawDate2 = find(DatiDebrisLink(:,1)>DatiRaw(end,1)); else RawDate2 = find(DatiDebrisLink(:,1)>DatiRaw(RawDate1(end)+1,1)); end else RawDate1 = []; RawDate2 = 1; end if isempty(RawDate1) == 0 && isempty(RawDate2) == 0 Dati = [DatiRaw(1:RawDate1(end),:);DatiDebrisLink(RawDate2(1):end,:)]; elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0 Dati = DatiDebrisLink; else Dati = DatiRaw; end % Elimino appoggio più vecchio di un mese RawDate3 = find(Dati(:,1)= ''' ... DataGF ''' and tool_name = ''' DTcatena... ''' and unit_name = ''' IDcentralina ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniGF = curs.Data; Batteria = DATiniGF(:,2); % Modifico il formato di data e ora in DATini. [rD,~] = size(DATiniGF); % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; comando = ['select xacc, yacc, zacc, cacc from ELABDATAGFLOW where EventDateTime >= ''' ... DataGF ''' and tool_name = ''' DTcatena ''' and unit_name = ''' IDcentralina ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoGF = curs.Data; [rDa,cDa] = size(DATnodoGF); if rDa == 1 && cDa == 1 okdatGF = 'G-Flow Link does NOT work'; fprintf(fileID,fmt,okdatGF); else DatiGFLink = [DATiniGF(:,1) DATnodoGF(:,:)]; okdatGF = 'Data of G-Flow Link downloaded correctly'; fprintf(fileID,fmt,okdatGF); end ErrGFLink = zeros(rD,1); for g = 1:rD if cell2mat(DATnodoGF(g,1))>3 && cell2mat(DATnodoGF(g,2))>3 && cell2mat(DATnodoGF(g,3))>3 ErrGFLink(g,1) = 1; end end NAN = 1; end end %% G-Shock Link if yesGS == 0 % Non ci sono G-Shock DatiGSLink = []; ErrGSLink = []; wardat = 'lettura function: there are not G-Shock Link' ; fprintf(fileID,fmt,wardat); else NAN = 0; while NAN == 0 if datenum(datainiGS) == datenum(Data(1,1)) tempoiniGS = char(Data(1,2)); end DataGS = [datainiGF tempoiniGS]; % Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura % Step 1 (vedi commento più avanti) comando = ['select EventDateTime, battery_level from ELABDATAGFLOW where EventDateTime >= ''' ... DataGS ''' and tool_name = ''' DTcatena... ''' and unit_name = ''' IDcentralina ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATiniGS = curs.Data; Batteria = DATiniGS(:,2); % Modifico il formato di data e ora in DATini. [rD,~] = size(DATiniGS); DatiGSLink = cell(rD,1); % Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico, % ma limitandomi a quelli registrati nel corso di quella singola giornata; comando = ['select xacc, yacc, zacc, cacc from ELABDATAGFLOW where EventDateTime >= ''' ... DataGS ''' and tool_name = ''' DTcatena ''' and unit_name = ''' IDcentralina ''' ']; curs = exec(conn,comando); curs = fetch(curs); DATnodoGS = curs.Data; [rDa,cDa] = size(DATnodoGS); if rDa == 1 && cDa == 1 okdatGS = 'G-Shock Link does NOT work'; fprintf(fileID,fmt,okdatGS); else DatiGSLink = [DATiniGS DATnodoGS(:,:)]; okdatGS = 'Data of G-Shock Link downloaded correctly'; fprintf(fileID,fmt,okdatGS); end ErrGSLink = zeros(rD,1); for g = 1:rD if DATnodoGS(g,1)>3 && DATnodoGS(g,2)>3 && DATnodoGS(g,3)>3 ErrGSLink(g,1) = 1; end end NAN = 1; end end text = 'lettura function closed'; fprintf(fileID,fmt,text); fclose(fileID); end