8583 lines
376 KiB
Matlab
Executable File
8583 lines
376 KiB
Matlab
Executable File
% Questa funzione legge i dati di ogni tipologia di nodo (se presente)
|
|
|
|
function [Batteria,Batteria_LoRa,DatiTiltLink,ErrTiltLink,datainiTL,yesTL,...
|
|
DatiTiltLinkHD,ErrTiltLinkHD,datainiHD,yesHD,DatiTiltLinkHDVR,ErrTiltLinkHDVR,datainiHDVR,yesHDVR,...
|
|
DatiTiltLinkH,ErrTiltLinkH,datainiTLH,yesTLH,DatiPiezoLink,ErrPiezoLink,yesPL,DatiBaroLink,ErrBaroLink,yesBL,...
|
|
DatiTiltLinkHR,ErrTiltLinkHR,datainiTLHR,yesTLHR,DatiTiltLinkHRH,ErrTiltLinkHRH,datainiTLHRH,yesTLHRH,...
|
|
DatiLoadLink,ErrLoadLink,yesLL,DatiThermLink,ErrThermLink,yesThL,DatiKlinoLink,ErrKlinoLink,yesKL,...
|
|
DatiKlinoLinkHR,ErrKlinoLinkHR,yesKLHR,DatiRainLink,ErrRainLink,datainiRL,yesRL,...
|
|
DatiSPPLink,datainiSPP,yesSPP,DatiSnowLink,ErrSnowLink,datainiSL,yesSL,...
|
|
DatiPT100Link,ErrPT100Link,yesPT100,DatiInPlaceLink,ErrInPlaceLink,datainiIPL,yesIPL,...
|
|
DatiInPlaceLinkHR,ErrInPlaceLinkHR,datainiIPLHR,yesIPLHR,DatiWeirLink,DatiNTCWeirLink,ErrWeirLink,datainiWL,yesWL,...
|
|
DatiPendulum,ErrPendulum,datainiPE,yesPE] = lettura(IDcentralina,DTcatena,datainiTL,tempoiniTL,NodoTiltLink,NuovoZeroTL,...
|
|
datainiHD,tempoiniHD,NodoTiltLinkHD,NuovoZeroHD,datainiHDVR,tempoiniHDVR,NodoTiltLinkHDVR,NuovoZeroHDVR,...
|
|
datainiTLH,tempoiniTLH,NodoTiltLinkH,NuovoZeroTLH,...
|
|
datainiPL,tempoiniPL,NodoPiezoLink,NuovoZeroPL,datainiBL,tempoiniBL,NodoBaroLink,NuovoZeroBL,...
|
|
datainiTLHR,tempoiniTLHR,NodoTiltLinkHR,NuovoZeroTLHR,...
|
|
datainiTLHRH,tempoiniTLHRH,NodoTiltLinkHRH,NuovoZeroTLHRH,datainiThL,tempoiniThL,NodoThermLink,NuovoZeroThL,...
|
|
datainiLL,tempoiniLL,NodoLoadLink,NuovoZeroLL,datainiKL,tempoiniKL,NodoKlinoLink,NuovoZeroKL,...
|
|
datainiKLHR,tempoiniKLHR,NodoKlinoLinkHR,NuovoZeroKLHR,datainiRL,tempoiniRL,NodoRainLink,NuovoZeroRL,...
|
|
datainiSPP,tempoiniSPP,NuovoZeroSPP,NodoSPPLink,datainiPT100,tempoiniPT100,NodoPT100Link,NuovoZeroPT100,...
|
|
datainiIPL,tempoiniIPL,NodoInPlaceLink,NuovoZeroIPL,datainiIPLHR,tempoiniIPLHR,NodoInPlaceLinkHR,NuovoZeroIPLHR,...
|
|
datainiWL,tempoiniWL,NodoWeirLink,NuovoZeroWL,datainiPE,tempoiniPE,NodoPendulum,NuovoZeroPE,...
|
|
datainiSL,tempoiniSL,NodoSnowLink,NuovoZeroSL,...
|
|
yesTL,yesTLH,yesTLHR,yesTLHRH,yesPL,yesBL,yesThL,yesKL,yesKLHR,yesRL,yesSPP,yesSL,...
|
|
yesPT100,yesLL,yesIPL,yesIPLHR,yesWL,yesPE,yesHD,yesHDVR,rTL,rTLH,rTLHR,rTLHRH,rPL,...
|
|
rBL,rThL,rKL,rKLHR,rRL,rSPP,rSL,rPT100,rLL,rIPL,rIPLHR,rWL,rPE,rHD,rHDVR,conn,Barometro,catena,date,time,FileName)
|
|
|
|
% Log file
|
|
fileID = fopen(FileName,'a');
|
|
fmt = '%s \r';
|
|
text = 'lettura function started';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
%% Batteria
|
|
% cerco la batteria nel primo nodo
|
|
j = 1;
|
|
z = 0;
|
|
[rC,~] = size(catena);
|
|
while z==0
|
|
if cell2mat(catena(j,3)) == 1
|
|
z = 1;
|
|
else
|
|
j = j+1; % nodo numero 1
|
|
end
|
|
end
|
|
condition = 0;
|
|
while condition == 0
|
|
if j <= rC
|
|
i = cell2mat(catena(j,1));
|
|
if i == 1
|
|
dataini = datainiTL;
|
|
tempoini = tempoiniTL;
|
|
break
|
|
elseif i == 2
|
|
dataini = datainiPL;
|
|
tempoini = tempoiniPL;
|
|
break
|
|
elseif i == 3
|
|
dataini = datainiBL;
|
|
tempoini = tempoiniBL;
|
|
break
|
|
elseif i == 4
|
|
dataini = datainiThL;
|
|
tempoini = tempoiniThL;
|
|
break
|
|
elseif i == 5
|
|
dataini = datainiTLHR;
|
|
tempoini = tempoiniTLHR;
|
|
break
|
|
elseif i == 8
|
|
dataini = datainiAL;
|
|
tempoini = tempoiniAL;
|
|
break
|
|
elseif i == 11
|
|
dataini = datainiTLH;
|
|
tempoini = tempoiniTLH;
|
|
break
|
|
elseif i == 12
|
|
dataini = datainiTLHRH;
|
|
tempoini = tempoiniTLHRH;
|
|
break
|
|
elseif i == 15
|
|
dataini = datainiLL;
|
|
tempoini = tempoiniLL;
|
|
break
|
|
elseif i == 26
|
|
dataini = datainiKL;
|
|
tempoini = tempoiniKL;
|
|
break
|
|
elseif i == 27
|
|
dataini = datainiRL;
|
|
tempoini = tempoiniRL;
|
|
break
|
|
elseif i == 28
|
|
dataini = datainiPT100;
|
|
tempoini = tempoiniPT100;
|
|
break
|
|
elseif i == 44
|
|
dataini = datainiKLHR;
|
|
tempoini = tempoiniKLHR;
|
|
break
|
|
elseif i == 42
|
|
dataini = datainiIPL;
|
|
tempoini = tempoiniIPL;
|
|
break
|
|
elseif i == 43
|
|
dataini = datainiIPLHR;
|
|
tempoini = tempoiniIPLHR;
|
|
break
|
|
elseif i == 52
|
|
dataini = datainiPE;
|
|
tempoini = tempoiniPE;
|
|
break
|
|
elseif i == 53
|
|
dataini = datainiWL;
|
|
tempoini = tempoiniWL;
|
|
break
|
|
elseif i == 54
|
|
dataini = datainiWI;
|
|
tempoini = tempoiniWI;
|
|
break
|
|
elseif i == 67
|
|
dataini = datainiHD;
|
|
tempoini = tempoiniHD;
|
|
break
|
|
elseif i == 61
|
|
dataini = datainiHDVR;
|
|
tempoini = tempoiniHDVR;
|
|
break
|
|
end
|
|
j = j+1;
|
|
else
|
|
break
|
|
end
|
|
end
|
|
|
|
% Batteria Centralina
|
|
comando = ['select Date, Time, BatLevel from RawDataView where Date = ''' ...
|
|
dataini ''' and Time >= ''' tempoini ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeNum = 1 '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
BatTempo = curs.Data;
|
|
comando = ['select Date, Time, BatLevel from RawDataView where Date > ''' ...
|
|
dataini ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeNum = 1 '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
BatData = curs.Data;
|
|
if strcmp(char(BatData(1)),'No Data')
|
|
Batteria = BatTempo;
|
|
elseif strcmp(char(BatTempo(1)),'No Data')
|
|
Batteria = BatData;
|
|
else
|
|
Batteria = [BatTempo;BatData];
|
|
end
|
|
|
|
% Batteria LoRa
|
|
NodeNum = '1';
|
|
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
|
|
|
|
Data(1,1) = cellstr(date);
|
|
Data(1,2) = cellstr(time);
|
|
|
|
%% Tilt Link V
|
|
if yesTL == 0 % Non ci sono Tilt Link
|
|
DatiTiltLink = [];
|
|
ErrTiltLink = [];
|
|
wardat = 'lettura function: there are not Tilt Link V';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-TLV-RawData.csv'];
|
|
NAN = 0;
|
|
while NAN == 0
|
|
if datenum(datainiTL) == datenum(Data(1,1))
|
|
tempoiniTL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Tilt Link';
|
|
NodeNumTL = num2str(cell2mat(NodoTiltLink(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiTL ''' and Time >= ''' tempoiniTL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumTL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniTL = curs.Data;
|
|
Ntempo = DATiniTL;
|
|
[r,c] = size(DATiniTL);
|
|
saltoTL = 0;
|
|
if r==1 && c==1
|
|
textdatTL = 'Warning: error reading Tilt Link V (control unit data)!';
|
|
fprintf(fileID,fmt,textdatTL);
|
|
saltoTL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiTL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2TL = curs.Data;
|
|
Ndate = DAT2TL;
|
|
if saltoTL == 1
|
|
DATiniTL = DAT2TL;
|
|
end
|
|
Check = size(DAT2TL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoTL == 0
|
|
DATiniTL = [DATiniTL; DAT2TL];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniTL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniTL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniTL = T;
|
|
else
|
|
DATiniTL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoTL == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiTiltLink = cell(rd+rt,7*rTL);
|
|
else
|
|
DatiTiltLink = cell(rt,7*rTL);
|
|
end
|
|
else
|
|
DatiTiltLink = cell(rd,7*rTL);
|
|
end
|
|
NTiltLink = cell2mat(NodoTiltLink(:,2));
|
|
ii = 1;
|
|
col = 7;
|
|
w = 0;
|
|
while ii <= rTL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NTiltLink(ii,1);
|
|
if strcmp(DTcatena,'DT0115') && strcmp(IDcentralina,'ID0074')
|
|
if nN == 75
|
|
nN = 1;
|
|
end
|
|
end
|
|
if strcmp(DTcatena,'DT0103') && strcmp(IDcentralina,'ID0063')
|
|
if nN == 39
|
|
nN = 1;
|
|
end
|
|
end
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiTL ''' and Time >= ''' tempoiniTL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
|
|
datainiTL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTLd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
ini_col = col-6;
|
|
if saltoTL == 0
|
|
DatiTiltLink(1:rt,ini_col:col) = DATnodoTL(:,:);
|
|
else
|
|
DatiTiltLink(1:rd,ini_col:col) = DATnodoTLd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoTLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoTLd(i,:) = DATnodoTLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link V ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
elseif rd < rn
|
|
for i = 1:rn-rd
|
|
DATnodoTLd(1,:) = []; % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link V ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoTL == 0
|
|
DatiTiltLink(rt+1:rt+rd,ini_col:col) = DATnodoTLd(:,:);
|
|
end
|
|
else
|
|
DatiTiltLink = DatiTiltLink(1:end,:);
|
|
end
|
|
okdatTL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rTL) ' Tilt Link V nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatTL);
|
|
ii = ii+1;
|
|
col = col+7;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Tilt Link V!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiTiltLink);
|
|
ErrTiltLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroTL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiTL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Tilt Link V nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroTL == 0 % il file non è mai stato scritto, cerco la data successiva
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiTL)+1 < now
|
|
datainiTL = datestr(datenum(datainiTL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesTL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiTiltLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLink(1,jj) = 1;
|
|
wardat = 'Data of Tilt Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
% Cerco i multipli di 7 per identificare le temperature
|
|
Int = jj/7;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLink(1,jj)) > 1000
|
|
if rDR==1 && cDR==1 || NuovoZeroTL == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiTL)+1 < now
|
|
datainiTL = datestr(datenum(datainiTL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesTL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiTiltLink(1,jj-6) = cellstr(num2str(DatiRaw(RawDate(end),jj-5)));
|
|
DatiTiltLink(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
|
|
DatiTiltLink(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
|
|
DatiTiltLink(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiTiltLink(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiTiltLink(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiTiltLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLink(1,jj) = 1;
|
|
wardat = ['Data of Tilt Link nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiTL = datestr(datenum(datainiTL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
end
|
|
DatiTiltLink(indice,jj) = DatiTiltLink(indice-1,jj);
|
|
ErrTiltLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
for ii = 2:r
|
|
% Cerco i multipli di 7 per identificare le temperature
|
|
Int = jj/7;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLink(ii,jj)) > 1000
|
|
DatiTiltLink(ii,jj-6:jj) = DatiTiltLink(ii-1,jj-6:jj);
|
|
ErrTiltLink(ii,jj) = 1;
|
|
wardat = ['Data of Tilt Link nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r % nodi
|
|
check = isnan(cell2mat(DatiTiltLink(nnn,jj)));
|
|
if check == 1
|
|
DatiTiltLink(nnn,jj) = DatiTiltLink(nnn-1,jj);
|
|
ErrTiltLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link V data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiTiltLink = [DATiniTL str2double(DatiTiltLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiTiltLink(a,1) == DatiTiltLink(a-1,1)
|
|
DatiTiltLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroTL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiTiltLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiTiltLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiTiltLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiTiltLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiTiltLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Tilt Link HD
|
|
if yesHD == 0 % Non ci sono Tilt Link HD
|
|
DatiTiltLinkHD = [];
|
|
ErrTiltLinkHD = [];
|
|
wardat = 'lettura function: there are not Tilt Link HD';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-HD-RawData.csv'];
|
|
NAN = 0;
|
|
while NAN == 0
|
|
if datenum(datainiHD) == datenum(Data(1,1))
|
|
tempoiniHD = char(Data(1,2));
|
|
end
|
|
NodeType = 'Tilt Link HD';
|
|
NodeNumHD = num2str(cell2mat(NodoTiltLinkHD(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 = ''' ...
|
|
datainiHD ''' and Time >= ''' tempoiniHD ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumHD ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniHD = curs.Data;
|
|
Ntempo = DATiniHD;
|
|
[r,c] = size(DATiniHD);
|
|
saltoHD = 0;
|
|
if r==1 && c==1
|
|
textdatHD = 'Warning: error reading Tilt Link HD (control unit data)!';
|
|
fprintf(fileID,fmt,textdatHD);
|
|
saltoHD = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiHD ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumHD ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2HD = curs.Data;
|
|
Ndate = DAT2HD;
|
|
if saltoHD == 1
|
|
DATiniHD = DAT2HD;
|
|
end
|
|
Check = size(DAT2HD);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoHD == 0
|
|
DATiniHD = [DATiniHD; DAT2HD];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniHD);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniHD(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniHD(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniHD = T;
|
|
else
|
|
DATiniHD = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if cell2mat(NodoTiltLinkHD(1,5)) == 1
|
|
col = 7;
|
|
else
|
|
col = 4;
|
|
end
|
|
if saltoHD == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiTiltLinkHD = cell(rd+rt,col*rHD);
|
|
else
|
|
DatiTiltLinkHD = cell(rt,col*rHD);
|
|
end
|
|
else
|
|
DatiTiltLinkHD = cell(rd,col*rHD);
|
|
end
|
|
NTiltLinkHD = cell2mat(NodoTiltLinkHD(:,2));
|
|
ii = 1;
|
|
|
|
w = 0;
|
|
while ii <= rHD
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NTiltLinkHD(ii,1);
|
|
nNodo = num2str(nN);
|
|
if cell2mat(NodoTiltLinkHD(ii,5)) == 1
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiHD ''' and Time >= ''' tempoiniHD ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHD = 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 > ''' ...
|
|
datainiHD ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHDd = curs.Data;
|
|
ini_col = col-6;
|
|
else
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' ...
|
|
datainiHD ''' and Time >= ''' tempoiniHD ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHD = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ...
|
|
datainiHD ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHDd = curs.Data;
|
|
ini_col = col-3;
|
|
end
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoHD == 0
|
|
DatiTiltLinkHD(1:rt,ini_col:col) = DATnodoHD(:,:);
|
|
else
|
|
DatiTiltLinkHD(1:rd,ini_col:col) = DATnodoHDd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoHDd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoHDd(i,:) = DATnodoHDd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link HD ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
elseif rd < rn
|
|
for i = 1:rn-rd
|
|
DATnodoHDd(1,:) = []; % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link HD ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoHD == 0
|
|
DatiTiltLinkHD(rt+1:rt+rd,ini_col:col) = DATnodoHDd(:,:);
|
|
end
|
|
else
|
|
DatiTiltLinkHD = DatiTiltLinkHD(1:end,:);
|
|
end
|
|
okdatHD = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rHD) ' Tilt Link HD nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatHD);
|
|
if cell2mat(NodoTiltLinkHD(ii,5)) == 1
|
|
col = col+7;
|
|
else
|
|
col = col+4;
|
|
end
|
|
ii = ii+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Tilt Link HD!';
|
|
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(DatiTiltLinkHD);
|
|
ErrTiltLinkHD = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroHD == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiHD));
|
|
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',DatiTiltLinkHD(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHD(1,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHD(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHD(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHD(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHD(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHD(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHD(1,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHD(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Tilt Link HD nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroHD == 0 % il file non è mai stato scritto, cerco la data successiva
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiHD)+1 < now
|
|
datainiHD = datestr(datenum(datainiHD)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesHD = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiHD = datestr(datenum(datainiHD)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiTiltLinkHD(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkHD(1,jj) = 1;
|
|
wardat = 'Data of Tilt Link hd nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiHD = datestr(datenum(datainiHD)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkHD(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHD(:,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHD(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHD(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHD(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHD(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHD(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHD(:,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHD(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiHD = datestr(datenum(datainiHD)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
end
|
|
DatiTiltLinkHD(indice,jj) = DatiTiltLinkHD(indice-1,jj);
|
|
ErrTiltLinkHD(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r % nodi
|
|
check = isnan(cell2mat(DatiTiltLinkHD(nnn,jj)));
|
|
if check == 1
|
|
DatiTiltLinkHD(nnn,jj) = DatiTiltLinkHD(nnn-1,jj);
|
|
ErrTiltLinkHD(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link HD data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiTiltLinkHD = [DATiniHD str2double(DatiTiltLinkHD)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiTiltLinkHD(a,1) == DatiTiltLinkHD(a-1,1)
|
|
DatiTiltLinkHD(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroHD == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkHD(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiTiltLinkHD(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiTiltLinkHD(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkHD(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiTiltLinkHD;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiTiltLinkHD;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Tilt Link HD VR
|
|
if yesHDVR == 0 % Non ci sono Tilt Link HD VR
|
|
DatiTiltLinkHDVR = [];
|
|
ErrTiltLinkHDVR = [];
|
|
wardat = 'lettura function: there are not Tilt Link HD VR';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-HDVR-RawData.csv'];
|
|
NAN = 0;
|
|
while NAN == 0
|
|
if datenum(datainiHDVR) == datenum(Data(1,1))
|
|
tempoiniHDVR = char(Data(1,2));
|
|
end
|
|
NodeType = 'Tilt Link HD VR';
|
|
NodeNumHDVR = num2str(cell2mat(NodoTiltLinkHDVR(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 = ''' ...
|
|
datainiHDVR ''' and Time >= ''' tempoiniHDVR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumHDVR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniHDVR = curs.Data;
|
|
Ntempo = DATiniHDVR;
|
|
[r,c] = size(DATiniHDVR);
|
|
saltoHDVR = 0;
|
|
if r==1 && c==1
|
|
textdatHDVR = 'Warning: error reading Tilt Link HD VR (control unit data)!';
|
|
fprintf(fileID,fmt,textdatHDVR);
|
|
saltoHDVR = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiHDVR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumHDVR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2HDVR = curs.Data;
|
|
Ndate = DAT2HDVR;
|
|
if saltoHDVR == 1
|
|
DATiniHDVR = DAT2HDVR;
|
|
end
|
|
Check = size(DAT2HDVR);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoHDVR == 0
|
|
DATiniHDVR = [DATiniHDVR; DAT2HDVR];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniHDVR);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniHDVR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniHDVR(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniHDVR = T;
|
|
else
|
|
DATiniHDVR = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoHDVR == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiTiltLinkHDVR = cell(rd+rt,7*rHDVR);
|
|
else
|
|
DatiTiltLinkHDVR = cell(rt,7*rHDVR);
|
|
end
|
|
else
|
|
DatiTiltLinkHDVR = cell(rd,7*rHDVR);
|
|
end
|
|
NTiltLinkHDVR = cell2mat(NodoTiltLinkHDVR(:,2));
|
|
ii = 1;
|
|
if cell2mat(NodoTiltLinkHDVR(1,5)) == 1
|
|
col = 7;
|
|
else
|
|
col = 4;
|
|
end
|
|
w = 0;
|
|
while ii <= rHDVR
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NTiltLinkHDVR(ii,1);
|
|
nNodo = num2str(nN);
|
|
if cell2mat(NodoTiltLinkHDVR(ii,5)) == 1
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiHDVR ''' and Time >= ''' tempoiniHDVR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHDVR = 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 > ''' ...
|
|
datainiHDVR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHDVRd = curs.Data;
|
|
ini_col = col-6;
|
|
else
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' ...
|
|
datainiHDVR ''' and Time >= ''' tempoiniHDVR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHDVR = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ...
|
|
datainiHDVR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoHDVRd = curs.Data;
|
|
ini_col = col-3;
|
|
end
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoHDVR == 0
|
|
DatiTiltLinkHDVR(1:rt,ini_col:col) = DATnodoHDVR(:,:);
|
|
else
|
|
DatiTiltLinkHDVR(1:rd,ini_col:col) = DATnodoHDVRd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoHDVRd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoHDVRd(i,:) = DATnodoHDVRd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link HD VR ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
elseif rd < rn
|
|
for i = 1:rn-rd
|
|
DATnodoHDVRd(1,:) = []; % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link HD VR ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoHDVR == 0
|
|
DatiTiltLinkHDVR(rt+1:rt+rd,ini_col:col) = DATnodoHDVRd(:,:);
|
|
end
|
|
else
|
|
DatiTiltLinkHDVR = DatiTiltLinkHDVR(1:end,:);
|
|
end
|
|
okdatHDVR = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rHDVR) ' Tilt Link HD VR nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatHDVR);
|
|
if cell2mat(NodoTiltLinkHDVR(ii,5)) == 1
|
|
col = col+7;
|
|
else
|
|
col = col+4;
|
|
end
|
|
ii = ii+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Tilt Link HD VR!';
|
|
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(DatiTiltLinkHDVR);
|
|
ErrTiltLinkHDVR = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroHDVR == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiHDVR));
|
|
if isempty(RawDate)==1 && strcmp(IDcentralina,'ID0200')==1
|
|
RawDate = 1;
|
|
end
|
|
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',DatiTiltLinkHDVR(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHDVR(1,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHDVR(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHDVR(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHDVR(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHDVR(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHDVR(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHDVR(1,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHDVR(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Tilt Link HD VR nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroHDVR == 0 % il file non è mai stato scritto, cerco la data successiva
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiHDVR)+1 < now
|
|
datainiHDVR = datestr(datenum(datainiHDVR)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesHDVR = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiHDVR = datestr(datenum(datainiHDVR)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiTiltLinkHDVR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkHDVR(1,jj) = 1;
|
|
wardat = 'Data of Tilt Link hd VR nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiHDVR = datestr(datenum(datainiHDVR)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkHDVR(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHDVR(:,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHDVR(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHDVR(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHDVR(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHDVR(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHDVR(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHDVR(:,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHDVR(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiHDVR = datestr(datenum(datainiHDVR)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
end
|
|
DatiTiltLinkHDVR(indice,jj) = DatiTiltLinkHDVR(indice-1,jj);
|
|
ErrTiltLinkHDVR(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r % nodi
|
|
check = isnan(cell2mat(DatiTiltLinkHDVR(nnn,jj)));
|
|
if check == 1
|
|
DatiTiltLinkHDVR(nnn,jj) = DatiTiltLinkHDVR(nnn-1,jj);
|
|
ErrTiltLinkHDVR(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link HD VR data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiTiltLinkHDVR = [DATiniHDVR str2double(DatiTiltLinkHDVR)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiTiltLinkHDVR(a,1) == DatiTiltLinkHDVR(a-1,1)
|
|
DatiTiltLinkHDVR(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroHDVR == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkHDVR(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiTiltLinkHDVR(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiTiltLinkHDVR(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkHDVR(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiTiltLinkHDVR;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiTiltLinkHDVR;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Tilt Link HR V
|
|
if yesTLHR == 0 % Non ci sono Tilt Link HR V
|
|
DatiTiltLinkHR = [];
|
|
ErrTiltLinkHR = [];
|
|
wardat = 'lettura function: there are not Tilt Link HR V';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-TLHRV-RawData.csv'];
|
|
while NAN == 0
|
|
if datenum(datainiTLHR) == datenum(Data(1,1))
|
|
tempoiniTLHR = char(Data(1,2));
|
|
end
|
|
NodeType = 'Tilt Link HR';
|
|
NodeNumTLHR = num2str(cell2mat(NodoTiltLinkHR(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiTLHR ''' and Time >= ''' tempoiniTLHR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumTLHR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniTLHR = curs.Data;
|
|
Ntempo = DATiniTLHR;
|
|
[r,c] = size(DATiniTLHR);
|
|
saltoTLHR = 0;
|
|
if r==1 && c==1
|
|
textdatTLHR = 'Warning: error reading Tilt Link HR V (control unit data)!';
|
|
fprintf(fileID,fmt,textdatTLHR);
|
|
saltoTLHR = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiTLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTLHR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2TLHR = curs.Data;
|
|
Ndate = DAT2TLHR;
|
|
if saltoTLHR == 1
|
|
DATiniTLHR = DAT2TLHR;
|
|
end
|
|
Check = size(DAT2TLHR);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoTLHR == 0
|
|
DATiniTLHR = [DATiniTLHR; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniTLHR);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniTLHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTLHR(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniTLHR = T;
|
|
else
|
|
DATiniTLHR = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoTLHR == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiTiltLinkHR = cell(rd+rt,6*rTLHR);
|
|
else
|
|
DatiTiltLinkHR = cell(rt,6*rTLHR);
|
|
end
|
|
else
|
|
DatiTiltLinkHR = cell(rd,6*rTLHR);
|
|
end
|
|
NTiltLinkHR = cell2mat(NodoTiltLinkHR(:,2));
|
|
col = 6;
|
|
w = 0;
|
|
while ii <= rTLHR
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NTiltLinkHR(ii,1);
|
|
if strcmp(DTcatena,'DT0103') && strcmp(IDcentralina,'ID0063')
|
|
if nN == 40
|
|
nN = 2;
|
|
end
|
|
end
|
|
nNodo = num2str(nN);
|
|
|
|
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiTLHR ''' and Time >= ''' tempoiniTLHR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTLHR = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
|
|
datainiTLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTLHRd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
ini_col = col-5;
|
|
if saltoTLHR == 0
|
|
DatiTiltLinkHR(1:rt,ini_col:col) = DATnodoTLHR(:,:);
|
|
else
|
|
DatiTiltLinkHR(1:rd,ini_col:col) = DATnodoTLHRd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoTLHRd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoTLHRd(i,:) = DATnodoTLHRd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link HR V ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoTLHR == 0
|
|
DatiTiltLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoTLHRd(:,:);
|
|
end
|
|
else
|
|
DatiTiltLinkHR = DatiTiltLinkHR(1:end,:);
|
|
end
|
|
okdatTLH = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rTLHR) ' Tilt Link HR V nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatTLH);
|
|
ii = ii+1;
|
|
col = col+6;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Tilt Link HR V!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiTiltLinkHR);
|
|
ErrTiltLinkHR = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroTLHR == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiTLHR));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkHR(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHR(1,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHR(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHR(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHR(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHR(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHR(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHR(1,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHR(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Tilt Link HR V nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroTLHR == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiTLHR)+1 < now
|
|
datainiTLHR = datestr(datenum(datainiTLHR)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesTLHR = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiTiltLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkHR(1,jj) = 1;
|
|
wardat = 'Data of Tilt Link HR nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLinkHR(1,jj)) < 500
|
|
if rDR==1 && cDR==1 || NuovoZeroTLHR == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiTiltLinkHR(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
|
|
DatiTiltLinkHR(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
|
|
DatiTiltLinkHR(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiTiltLinkHR(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiTiltLinkHR(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiTiltLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkHR(1,jj) = 1;
|
|
wardat = ['Data of Tilt Link HR nodes corrected using Raw Data of reference Csv file. '...
|
|
'Electrolytic cell was read as a MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkHR(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHR(:,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHR(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHR(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHR(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHR(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHR(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHR(:,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHR(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiTLHR = datestr(datenum(datainiTLHR)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiTiltLinkHR(indice,jj) = DatiTiltLinkHR(indice-1,jj);
|
|
ErrTiltLinkHR(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
for ii = 2:r
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLinkHR(ii,jj)) < 500
|
|
DatiTiltLinkHR(ii,jj-2:jj) = DatiTiltLinkHR(ii-1,jj-2:jj);
|
|
ErrTiltLinkHR(ii,jj) = 1;
|
|
wardat = ['Data of Tilt Link HR nodes corrected using Raw Data of reference Csv file. '...
|
|
'Electrolytic cell was read as a MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiTiltLinkHR(nnn,jj)));
|
|
if check == 1
|
|
DatiTiltLinkHR(nnn,jj) = DatiTiltLinkHR(nnn-1,jj);
|
|
ErrTiltLinkHR(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link HR V data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiTiltLinkHR = [DATiniTLHR str2double(DatiTiltLinkHR)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiTiltLinkHR(a,1) == DatiTiltLinkHR(a-1,1)
|
|
DatiTiltLinkHR(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroTLHR == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkHR(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiTiltLinkHR(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiTiltLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkHR(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiTiltLinkHR;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiTiltLinkHR;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Tilt Link H
|
|
if yesTLH == 0 % Non ci sono Tilt Link H
|
|
DatiTiltLinkH = [];
|
|
ErrTiltLinkH = [];
|
|
wardat = 'lettura function: there are not Tilt Link H';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-TLH-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiTLH) == datenum(Data(1,1))
|
|
tempoiniTLH = char(Data(1,2));
|
|
end
|
|
NodeType = 'Tilt Link H';
|
|
NodeNumTLH = num2str(cell2mat(NodoTiltLinkH(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiTLH ''' and Time >= ''' tempoiniTLH ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumTLH ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniTLH = curs.Data;
|
|
Ntempo = DATiniTLH;
|
|
[r,c] = size(DATiniTLH);
|
|
saltoTLH = 0;
|
|
if r==1 && c==1
|
|
textdatTLH = 'Warning: error reading Tilt Link H (control unit data)!';
|
|
fprintf(fileID,fmt,textdatTLH);
|
|
saltoTLH = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiTLH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTLH ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2TLH = curs.Data;
|
|
Ndate = DAT2TLH;
|
|
if saltoTLH == 1
|
|
DATiniTLH = DAT2TLH;
|
|
end
|
|
Check = size(DAT2TLH);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoTLH == 0
|
|
DATiniTLH = [DATiniTLH; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniTLH);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniTLH(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTLH(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniTLH = T;
|
|
else
|
|
DATiniTLH = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoTLH == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiTiltLinkH = cell(rd+rt,7*rTLH);
|
|
else
|
|
DatiTiltLinkH = cell(rt,7*rTLH);
|
|
end
|
|
else
|
|
DatiTiltLinkH = cell(rd,7*rTLH);
|
|
end
|
|
NTiltLinkH = cell2mat(NodoTiltLinkH(:,2));
|
|
col = 7;
|
|
w = 0;
|
|
while ii <= rTLH
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NTiltLinkH(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiTLH ''' and Time >= ''' tempoiniTLH ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTLH = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
|
|
datainiTLH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTLHd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
ini_col = col-6;
|
|
if saltoTLH == 0
|
|
DatiTiltLinkH(1:rt,ini_col:col) = DATnodoTLH(:,:);
|
|
else
|
|
DatiTiltLinkH(1:rd,ini_col:col) = DATnodoTLHd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoTLHd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoTLHd(i,:) = DATnodoTLHd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link H ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoTLH == 0
|
|
DatiTiltLinkH(rt+1:rt+rd,ini_col:col) = DATnodoTLHd(:,:);
|
|
end
|
|
else
|
|
DatiTiltLinkH = DatiTiltLinkH(1:end,:);
|
|
end
|
|
okdatTLH = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rTLH) ' Tilt Link H nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatTLH);
|
|
ii = ii+1;
|
|
col = col+7;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Tilt Link H!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiTiltLinkH);
|
|
ErrTiltLinkH = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroTLH == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiTLH));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkH(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkH(1,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkH(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkH(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkH(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkH(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkH(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkH(1,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkH(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Tilt Link H nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroTLH == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiTLH)+1 < now
|
|
datainiTLH = datestr(datenum(datainiTLH)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesTLH = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiTiltLinkH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkH(1,jj) = 1;
|
|
wardat = 'Data of Tilt Link H nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
% Cerco i multipli di 7 per identificare le temperature
|
|
Int = jj/7;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLinkH(1,jj)) > 1000
|
|
if rDR==1 && cDR==1 || NuovoZeroTLH == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiTLH)+1 < now
|
|
datainiTLH = datestr(datenum(datainiTLH)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesTLH = 0;
|
|
end
|
|
else
|
|
DatiTiltLinkH(1,jj-6) = cellstr(num2str(DatiRaw(RawDate(end),jj-5)));
|
|
DatiTiltLinkH(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
|
|
DatiTiltLinkH(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
|
|
DatiTiltLinkH(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiTiltLinkH(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiTiltLinkH(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiTiltLinkH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkH(1,jj) = 1;
|
|
wardat = ['Data of Tilt Link H nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkH(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkH(:,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkH(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkH(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkH(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkH(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkH(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkH(:,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkH(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiTLH = datestr(datenum(datainiTLH)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiTiltLinkH(indice,jj) = DatiTiltLinkH(indice-1,jj);
|
|
ErrTiltLinkH(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
for ii = 2:r
|
|
% Cerco i multipli di 7 per identificare le temperature
|
|
Int = jj/7;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLinkH(ii,jj)) > 1000
|
|
DatiTiltLinkH(ii,jj-6:jj) = DatiTiltLinkH(ii-1,jj-6:jj);
|
|
ErrTiltLinkH(ii,jj) = 1;
|
|
wardat = ['Data of Tilt Link H nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS read as a MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiTiltLinkH(nnn,jj)));
|
|
if check == 1
|
|
DatiTiltLinkH(nnn,jj) = DatiTiltLinkH(nnn-1,jj);
|
|
ErrTiltLinkH(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link H data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiTiltLinkH = [DATiniTLH str2double(DatiTiltLinkH)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiTiltLinkH(a,1) == DatiTiltLinkH(a-1,1)
|
|
DatiTiltLinkH(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroTLH == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkH(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiTiltLinkH(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiTiltLinkH(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkH(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiTiltLinkH;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiTiltLinkH;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Tilt Link HR H
|
|
if yesTLHRH == 0 % Non ci sono Tilt Link HR H
|
|
DatiTiltLinkHRH = [];
|
|
ErrTiltLinkHRH = [];
|
|
wardat = 'lettura function: there are not Tilt Link HR H';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-TLHRH-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiTLHRH) == datenum(Data(1,1))
|
|
tempoiniTLHRH = char(Data(1,2));
|
|
end
|
|
NodeType = 'Tilt Link HR H';
|
|
NodeNumTLHRH = num2str(cell2mat(NodoTiltLinkHRH(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiTLHRH ''' and Time >= ''' tempoiniTLHRH ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumTLHRH ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniTLHRH = curs.Data;
|
|
Ntempo = DATiniTLHRH;
|
|
[r,c] = size(DATiniTLHRH);
|
|
saltoTLHRH = 0;
|
|
if r==1 && c==1
|
|
textdatTLHRH = 'Warning: error reading Tilt Link HR H (control unit data)!';
|
|
fprintf(fileID,fmt,textdatTLHRH);
|
|
saltoTLHRH = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiTLHRH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumTLHRH ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2TLHRH = curs.Data;
|
|
Ndate = DAT2TLHRH;
|
|
if saltoTLHRH == 1
|
|
DATiniTLHRH = DAT2TLHRH;
|
|
end
|
|
Check = size(DAT2TLHRH);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoTLHRH == 0
|
|
DATiniTLHRH = [DATiniTLHRH; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniTLHRH);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniTLHRH(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniTLHRH(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniTLHRH = T;
|
|
else
|
|
DATiniTLHRH = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoTLHRH == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiTiltLinkHRH = cell(rd+rt,6*rTLHR);
|
|
else
|
|
DatiTiltLinkHRH = cell(rt,6*rTLHR);
|
|
end
|
|
else
|
|
DatiTiltLinkHRH = cell(rd,6*rTLHR);
|
|
end
|
|
NTiltLinkHRH = cell2mat(NodoTiltLinkHRH(:,2));
|
|
col = 6;
|
|
w = 0;
|
|
while ii <= rTLHRH
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NTiltLinkHRH(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiTLHRH ''' and Time >= ''' tempoiniTLHRH ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTLHRH = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
|
|
datainiTLHRH ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoTLHRHd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
ini_col = col-5;
|
|
if saltoTLHRH == 0
|
|
DatiTiltLinkHRH(1:rt,ini_col:col) = DATnodoTLHRH(:,:);
|
|
else
|
|
DatiTiltLinkHRH(1:rd,ini_col:col) = DATnodoTLHRHd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoTLHRHd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoTLHRHd(i,:) = DATnodoTLHRHd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Tilt Link HR H ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoTLHRH == 0
|
|
DatiTiltLinkHRH(rt+1:rt+rd,ini_col:col) = DATnodoTLHRHd(:,:);
|
|
end
|
|
else
|
|
DatiTiltLinkHRH = DatiTiltLinkHRH(1:end,:);
|
|
end
|
|
okdatTLH = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rTLHRH) ' Tilt Link HR H nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatTLH);
|
|
ii = ii+1;
|
|
col = col+6;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Tilt Link HR H!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiTiltLinkHRH);
|
|
ErrTiltLinkHRH = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroTLHRH == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiTLHRH));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkHRH(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHRH(1,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHRH(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHRH(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHRH(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHRH(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHRH(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHRH(1,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHRH(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Tilt Link HR H nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroTLHRH == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiTLHRH)+1 < now
|
|
datainiTLHRH = datestr(datenum(datainiTLHRH)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesTLHRH = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiTiltLinkHRH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkHRH(1,jj) = 1;
|
|
wardat = 'Data of Tilt Link HR H nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLinkHRH(1,jj)) < 500
|
|
if rDR==1 && cDR==1 || NuovoZeroTLHRH == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiTLHRH)+1 < now
|
|
datainiTLHRH = datestr(datenum(datainiTLHRH)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesTLHRH = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiTiltLinkHRH(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
|
|
DatiTiltLinkHRH(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
|
|
DatiTiltLinkHRH(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiTiltLinkHRH(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiTiltLinkHRH(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiTiltLinkHRH(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrTiltLinkHRH(1,jj) = 1;
|
|
wardat = ['Data of Tilt Link HR H nodes corrected using Raw Data of reference Csv file. '...
|
|
'Electrolytic cell was read as the corresponding MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiTiltLinkHRH(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiTiltLinkHRH(:,jj)));
|
|
idxT = find(strcmp('---',DatiTiltLinkHRH(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiTiltLinkHRH(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiTiltLinkHRH(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiTiltLinkHRH(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiTiltLinkHRH(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiTiltLinkHRH(:,jj)));
|
|
idxN = find(strcmp('null',DatiTiltLinkHRH(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiTLHRH = datestr(datenum(datainiTLHRH)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiTiltLinkHRH(indice,jj) = DatiTiltLinkHRH(indice-1,jj);
|
|
ErrTiltLinkHRH(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
for ii = 2:r
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiTiltLinkHRH(ii,jj)) < 500
|
|
DatiTiltLinkHRH(ii,jj-2:jj) = DatiTiltLinkHRH(ii-1,jj-2:jj);
|
|
ErrTiltLinkHRH(ii,jj) = 1;
|
|
wardat = ['Data of Tilt Link HR nodes corrected using Raw Data of reference Csv file. '...
|
|
'Electrolytic cell was read as a MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiTiltLinkHRH(nnn,jj)));
|
|
if check == 1
|
|
DatiTiltLinkHRH(nnn,jj) = DatiTiltLinkHRH(nnn-1,jj);
|
|
ErrTiltLinkHRH(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Tilt Link HR H data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiTiltLinkHRH = [DATiniTLHRH str2double(DatiTiltLinkHRH)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiTiltLinkHRH(a,1) == DatiTiltLinkHRH(a-1,1)
|
|
DatiTiltLinkHRH(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroTLHRH == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiTiltLinkHRH(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiTiltLinkHRH(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiTiltLinkHRH(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiTiltLinkHRH(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiTiltLinkHRH;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiTiltLinkHRH;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Piezo Link
|
|
B = 1;
|
|
if yesPL == 0 % Non ci sono Piezo Link
|
|
DatiPiezoLink = [];
|
|
ErrPiezoLink = [];
|
|
wardat = 'lettura function: there are not Piezo Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
check_PLvsBL = 0;
|
|
while check_PLvsBL == 0
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-PL-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiPL) == datenum(Data(1,1))
|
|
tempoiniPL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Piezo Link';
|
|
NodeNumPL = num2str(cell2mat(NodoPiezoLink(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiPL ''' and Time >= ''' tempoiniPL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumPL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniPL = curs.Data;
|
|
Ntempo = DATiniPL;
|
|
[r,c] = size(DATiniPL);
|
|
saltoPL = 0;
|
|
if r==1 && c==1
|
|
textdatPL = 'Warning: error reading Piezo Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatPL);
|
|
saltoPL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumPL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2PL = curs.Data;
|
|
Ndate = DAT2PL;
|
|
if saltoPL == 1
|
|
DATiniPL = DAT2PL;
|
|
end
|
|
Check = size(DAT2PL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoPL == 0
|
|
DATiniPL = [DATiniPL; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniPL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniPL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniPL = T;
|
|
else
|
|
DATiniPL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoPL == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiPiezoLink = cell(rd+rt,2*rPL);
|
|
else
|
|
DatiPiezoLink = cell(rt,2*rPL);
|
|
end
|
|
else
|
|
DatiPiezoLink = cell(rd,2*rPL);
|
|
end
|
|
NPiezoLink = cell2mat(NodoPiezoLink(:,2));
|
|
col = 2;
|
|
w = 0;
|
|
while ii <= rPL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NPiezoLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0, Val1 from RawDataView where Date = ''' ...
|
|
datainiPL ''' and Time >= ''' tempoiniPL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1 from RawDataView where Date > ''' ...
|
|
datainiPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPLd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
ini_col = col-1;
|
|
if saltoPL == 0
|
|
DatiPiezoLink(1:rt,ini_col:col) = DATnodoPL(:,:);
|
|
else
|
|
DatiPiezoLink(1:rd,ini_col:col) = DATnodoPLd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoPLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoPLd(i,:) = DATnodoPLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Piezo Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoPL == 0
|
|
DatiPiezoLink(rt+1:rt+rd,ini_col:col) = DATnodoPLd(:,:);
|
|
end
|
|
else
|
|
DatiPiezoLink = DatiPiezoLink(1:end,:);
|
|
end
|
|
okdatPL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rPL) ' Piezo Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatPL);
|
|
ii = ii+1;
|
|
col = col+2;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Piezo Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiPiezoLink);
|
|
ErrPiezoLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
DIS = 0;
|
|
if NuovoZeroPL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiPL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
if strcmp(IDcentralina,'ID0075')==1 && strcmp(DTcatena,'DT0117')==1
|
|
RawDate = 1;
|
|
end
|
|
for jj=1:c
|
|
% Se il nodo è Dis., devo aumentare di uno la data (il nodo non
|
|
% è ancora stato installato!)
|
|
if strcmp('Dis.',DatiPiezoLink(1,jj)) == 1
|
|
for dis = 2:r
|
|
if strcmp('Dis.',DatiPiezoLink(dis,jj)) == 0
|
|
DatiPiezoLink = DatiPiezoLink(dis:end,:);
|
|
DATiniPL = DATiniPL(dis:end,:);
|
|
DatiNTCPiezoLink = DatiNTCPiezoLink(dis:end,:);
|
|
[r,c] = size(DatiPiezoLink);
|
|
break
|
|
elseif isfile(RawDataFile) == 1
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiPiezoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrPiezoLink(1,jj) = 1;
|
|
wardat = 'Data of Piezo Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
DIS = 0;
|
|
break
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiPL)+1 < now
|
|
datainiPL = datestr(datenum(datainiPL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPL = 0;
|
|
end
|
|
end
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiPL)+1 < now
|
|
datainiPL = datestr(datenum(datainiPL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPL = 0;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if DIS ~= 1 && yesPL == 1
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiPiezoLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiPiezoLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiPiezoLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiPiezoLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiPiezoLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiPiezoLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiPiezoLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiPiezoLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiPiezoLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Piezo Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroPL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiPL)+1 < now
|
|
datainiPL = datestr(datenum(datainiPL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiPL = datestr(datenum(datainiPL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiPiezoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrPiezoLink(1,jj) = 1;
|
|
wardat = 'Data of Piezo Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiPL = datestr(datenum(datainiPL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiPiezoLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiPiezoLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiPiezoLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiPiezoLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiPiezoLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiPiezoLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiPiezoLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiPiezoLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiPiezoLink(:,jj)));
|
|
idxRX = find(strcmp('No RX',DatiPiezoLink(:,jj)));
|
|
idxI = find(strcmp('id Error',DatiPiezoLink(:,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiPiezoLink(:,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiPiezoLink(:,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiPiezoLink(:,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiPiezoLink(:,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiPiezoLink(:,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiPiezoLink(:,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiPiezoLink(:,jj)));
|
|
idxDis = find(strcmp('Dis.',DatiPiezoLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxDis);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiPL = datestr(datenum(datainiPL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiPiezoLink(indice,jj) = DatiPiezoLink(indice-1,jj);
|
|
ErrPiezoLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiPiezoLink(nnn,jj)));
|
|
if check == 1
|
|
DatiPiezoLink(nnn,jj) = DatiPiezoLink(nnn-1,jj);
|
|
ErrPiezoLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Piezo Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiPiezoLink = [DATiniPL str2double(DatiPiezoLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiPiezoLink(a,1) == DatiPiezoLink(a-1,1)
|
|
DatiPiezoLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NAN == 1 && NuovoZeroPL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiPiezoLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiPiezoLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiPiezoLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiPiezoLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiPiezoLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiPiezoLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
% Baro Link
|
|
% Se ho un Piezometro, devo verificare che l'installazione disponga di Barometro!
|
|
noBL = 0; % Si oppone al successivo noBL = 1 se non mi servono i dati del Barometro
|
|
if yesBL == 0
|
|
% L'installazione non dispone di Barometro, se ho un Piezometro recupero
|
|
% i dati del Barometro di un'altra catena nelle vicinanze
|
|
text = 'The installation has not a Barometer';
|
|
fprintf(fileID,fmt,text);
|
|
if strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
|
|
elseif yesPL == 1
|
|
B = 0; % dato che nei passaggi successivi attiva l'interpolazione fra date
|
|
|
|
IDunitBaro = char(Barometro(1,2));
|
|
DTcatenaBaro = char(Barometro(1,1));
|
|
text = ['The elaboration will use the Barometer from the installation ' IDunitBaro ' - ' DTcatenaBaro ''];
|
|
fprintf(fileID,fmt,text);
|
|
comando = ['select id from units where name = ''' IDunitBaro ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
unitID = num2str(cell2mat(curs.Data));
|
|
comando = ['select id from tools where name = ''' DTcatenaBaro ''' and unit_id = '''...
|
|
unitID ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
idToolB = num2str(cell2mat(curs.Data));
|
|
|
|
% carico le informazioni relative al numero e alla profondità per
|
|
% BARO LINK recuperato
|
|
comando = ['select num, depth from nodes where tool_id = ''' idToolB ''' and nodetype_id = 3 order by num'];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
Leggo = curs.Data;
|
|
% cambio il segno della profondità (nel DB è positivo)
|
|
depthB = cell2mat(Leggo(:,2));
|
|
depthB = (-1)*depthB;
|
|
depthB = num2cell(depthB);
|
|
[r,~] = size(depthB);
|
|
nome = cell(r,1);
|
|
for i=1:r
|
|
nome(i,1) = cellstr('Baro Link');
|
|
end
|
|
NodoBaroLink = [nome Leggo(:,1) depthB];
|
|
NodoBaroLink = flipud(NodoBaroLink);
|
|
[rBL,~] = size(NodoBaroLink);
|
|
end
|
|
else
|
|
text = 'The installation has a Barometer';
|
|
fprintf(fileID,fmt,text);
|
|
B = 1; % dato che si oppone a B = 0
|
|
DTcatenaBaro = DTcatena;
|
|
IDunitBaro = IDcentralina;
|
|
end
|
|
|
|
if noBL == 1 || strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
|
|
DatiBaroLink = [];
|
|
ErrBaroLink = [];
|
|
wardat = 'lettura function: there are not Baro Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
while NAN == 0
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
RawDataFile = ['' IDunitBaro '-' DTcatenaBaro '-BL-RawData.csv']; % Generico per MUMS
|
|
NodeType = 'Baro Link';
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiBL ''' and Time >= ''' tempoiniBL ''' and UnitName = ''' IDunitBaro...
|
|
''' and ToolNameID = ''' DTcatenaBaro ''' and NodeType = ''' NodeType ''''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniBL = curs.Data;
|
|
Ntempo = DATiniBL;
|
|
[r,c] = size(DATiniBL);
|
|
saltoBL = 0;
|
|
if r==1 && c==1
|
|
textdatBL = 'Warning: error reading Baro Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatBL);
|
|
saltoBL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiBL ''' and UnitName = ''' IDunitBaro ''' and ToolNameID = '''...
|
|
DTcatenaBaro ''' and NodeType = ''' NodeType ''''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2BL = curs.Data;
|
|
Ndate = DAT2BL;
|
|
if saltoBL == 1
|
|
DATiniBL = DAT2BL;
|
|
end
|
|
Check = size(DAT2BL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
if saltoBL == 0
|
|
DATiniBL = [DATiniBL; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniBL);
|
|
Rilancia = 0;
|
|
if cD > 1
|
|
T = [cell2mat(DATiniBL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniBL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniBL = T;
|
|
else
|
|
Rilancia = 1;
|
|
end
|
|
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoBL == 0
|
|
if Check(1,2) > 1 % Ho superato il primo giorno
|
|
DatiBaroLink = cell(rd+rt,2*rBL);
|
|
else
|
|
DatiBaroLink = cell(rt,2*rBL);
|
|
end
|
|
else
|
|
DatiBaroLink = cell(rd,2*rBL);
|
|
end
|
|
NBaroLink = cell2mat(NodoBaroLink(:,2));
|
|
col = 2;
|
|
w = 0;
|
|
while ii <= rBL
|
|
nN = NBaroLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
comando = ['select Val3, Val4 from RawDataView where Date = ''' ...
|
|
datainiBL ''' and Time >= ''' tempoiniBL ''' and UnitName = ''' IDunitBaro ...
|
|
''' and ToolNameID = ''' DTcatenaBaro ''' and NodeType = ''' NodeType ...
|
|
''' and NodeNum =' nNodo ' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoBL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val3, Val4 from RawDataView where Date > ''' ...
|
|
datainiBL ''' and UnitName = ''' IDunitBaro ...
|
|
''' and ToolNameID = ''' DTcatenaBaro ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =''' nNodo ''''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoBLd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
ini_col = col-1;
|
|
if saltoBL == 0
|
|
DatiBaroLink(1:rt,ini_col:col) = DATnodoBL(:,:);
|
|
else
|
|
DatiBaroLink(1:rd,ini_col:col) = DATnodoBLd(:,:);
|
|
end
|
|
[rn,~] = size(DATnodoBLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoBLd(i,:) = DATnodoBLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Baro Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoBL == 0
|
|
DatiBaroLink(rt+1:rt+rd,ini_col:col) = DATnodoBLd(:,:);
|
|
end
|
|
else
|
|
DatiBaroLink = DatiBaroLink(1:end,:);
|
|
end
|
|
okdatBL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rBL) ' Baro Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatBL);
|
|
ii = ii+1;
|
|
col = col+2;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Baro Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiBaroLink);
|
|
ErrBaroLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiBL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
if strcmp(IDcentralina,'ID0075')==1 && strcmp(DTcatena,'DT0117')==1
|
|
RawDate = 1;
|
|
elseif strcmp(IDcentralina,'ID0214')==1 && strcmp(DTcatena,'DT0116')==1
|
|
RawDate = 1;
|
|
Rilancia = 0;
|
|
DATiniBL = DATiniPL-0.001;
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
if Rilancia == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiBaroLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiBaroLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiBaroLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiBaroLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiBaroLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiBaroLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiBaroLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiBaroLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiBaroLink(1,jj)));
|
|
idxF = find(str2double(cell2mat(DatiBaroLink(1,1)))<10500);
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxF);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Baro Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiBL)+1 < now
|
|
datainiBL = datestr(datenum(datainiBL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesBL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiBaroLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrBaroLink(1,jj) = 1;
|
|
wardat = 'Data of Baro Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
idxF = [];
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiBaroLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiBaroLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiBaroLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiBaroLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiBaroLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiBaroLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiBaroLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiBaroLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiBaroLink(:,jj)));
|
|
for ii = 1:r
|
|
if str2double(cell2mat(DatiBaroLink(ii,1))) < 9500
|
|
idxF = [idxF; ii];
|
|
end
|
|
end
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxF);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiBaroLink(indice,jj) = DatiBaroLink(indice-1,jj);
|
|
ErrBaroLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiBaroLink(nnn,jj)));
|
|
if check == 1
|
|
DatiBaroLink(nnn,jj) = DatiBaroLink(nnn-1,jj);
|
|
ErrBaroLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Baro Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
|
|
% se barometro e piezometro non appartengono alla stessa catena, interpolo
|
|
% i dati
|
|
if Rilancia == 0
|
|
if B==0
|
|
DATIBaro = str2double(DatiBaroLink);
|
|
if datenum(DATiniBL(end,1)) < datenum(DATiniPL(end,1)) % Uso solo l'ultimo dato del barometro
|
|
[rP,~] = size(DATiniPL);
|
|
DATIBaro = zeros(rP,2);
|
|
for b = 1:rP
|
|
DATIBaro(b,1:2) = str2double(DatiBaroLink(end,1:2));
|
|
end
|
|
DatiBaroLink = [DATiniPL DATIBaro];
|
|
else
|
|
DATIBaroInt = interp1(DATiniBL(:,1),DATIBaro(:,1),DATiniPL(:,1));
|
|
DATIBaroTemp = interp1(DATiniBL(:,1),DATIBaro(:,2),DATiniPL(:,1));
|
|
DatiBaroLink = [DATiniPL DATIBaroInt DATIBaroTemp];
|
|
log = isnan(DatiBaroLink(:,:));
|
|
[rL,cL] = size(log);
|
|
for check = 1:rL
|
|
for control = 1:cL
|
|
if log(check,control) == 1
|
|
if check == 1 % è proprio la prima data ad essere Nan, ciò significa che il barometro è stato installato dopo il piezometro
|
|
i = 2;
|
|
while log(i,control) == 1
|
|
i = i+1;
|
|
end
|
|
DatiBaroLink(check,control) = DatiBaroLink(i,control);
|
|
else
|
|
DatiBaroLink(check,control) = DatiBaroLink(check-1,control);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
DATIBaro = str2double(DatiBaroLink);
|
|
DatiBaroLink = [DATiniBL DATIBaro];
|
|
end
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
[r,~] = size(DatiBaroLink);
|
|
while a <= r
|
|
if DatiBaroLink(a,1) == DatiBaroLink(a-1,1)
|
|
DatiBaroLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
text = ['Barometer data conversion for chain ' IDunitBaro ' - ' DTcatenaBaro ' done'];
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
end
|
|
if NuovoZeroBL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiBaroLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiBaroLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiBaroLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiBaroLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Check Date Baro Link vs Piezo Link
|
|
if strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
|
|
check_PLvsBL = 1;
|
|
else
|
|
if datenum(datainiPL) > datenum(datainiBL)
|
|
datainiPL = datainiBL;
|
|
elseif datenum(datainiPL) < datenum(datainiBL)
|
|
datainiBL = datainiPL;
|
|
else
|
|
check_PLvsBL = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
%% SOLO Baro Link, NO Piezo Link
|
|
if yesBL == 1 && yesPL == 0
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-BL-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiBL) == datenum(Data(1,1))
|
|
tempoiniBL = char(Data(1,2));
|
|
end
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
NodeType = 'Baro Link';
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiBL ''' and Time >= ''' tempoiniBL ''' and UnitName = ''' IDcentralina...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType ''''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniBL = curs.Data;
|
|
Ntempo = DATiniBL;
|
|
[r,c] = size(DATiniBL);
|
|
saltoBL = 0;
|
|
if r==1 && c==1
|
|
textdatBL = 'Warning: error reading Baro Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatBL);
|
|
saltoBL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiBL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = '''...
|
|
DTcatena ''' and NodeType = ''' NodeType ''''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2BL = curs.Data;
|
|
Ndate = DAT2BL;
|
|
if saltoBL == 1
|
|
DATiniBL = DAT2BL;
|
|
end
|
|
Check = size(DAT2BL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
if saltoBL == 0
|
|
DATiniBL = [DATiniBL; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniBL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniBL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniBL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniBL = T;
|
|
else
|
|
DATiniBL = [];
|
|
end
|
|
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoBL == 0
|
|
if Check(1,2) > 1 % Ho superato il primo giorno
|
|
DatiBaroLink = cell(rd+rt,2*rBL);
|
|
else
|
|
DatiBaroLink = cell(rt,2*rBL);
|
|
end
|
|
else
|
|
DatiBaroLink = cell(rd,2*rBL);
|
|
end
|
|
NBaroLink = cell2mat(NodoBaroLink(:,2));
|
|
col = 2;
|
|
w = 0;
|
|
while ii <= rBL
|
|
nN = NBaroLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
comando = ['select Val3, Val4 from RawDataView where Date = ''' ...
|
|
datainiBL ''' and Time >= ''' tempoiniBL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType ...
|
|
''' and NodeNum =' nNodo ' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoBL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val3, Val4 from RawDataView where Date > ''' ...
|
|
datainiBL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =''' nNodo ''''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoBLd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
ini_col = col-1;
|
|
if saltoBL == 0
|
|
DatiBaroLink(1:rt,ini_col:col) = DATnodoBL(:,:);
|
|
else
|
|
DatiBaroLink(1:rd,ini_col:col) = DATnodoBLd(:,:);
|
|
end
|
|
[rn,~] = size(DATnodoBLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoBLd(i,:) = DATnodoBLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Baro Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoBL == 0
|
|
DatiBaroLink(rt+1:rt+rd,ini_col:col) = DATnodoBLd(:,:);
|
|
end
|
|
else
|
|
DatiBaroLink = DatiBaroLink(1:end,:);
|
|
end
|
|
okdatBL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rBL) ' Baro Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatBL);
|
|
ii = ii+1;
|
|
col = col+2;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Baro Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiBaroLink);
|
|
ErrBaroLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroBL== 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiBaroLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiBaroLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiBaroLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiBaroLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiBaroLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiBaroLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiBaroLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiBaroLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiBaroLink(1,jj)));
|
|
idxF = find(str2double(cell2mat(DatiBaroLink(1,1)))<12000);
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxF);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Baro Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroBL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiBL)+1 < now
|
|
datainiBL = datestr(datenum(datainiBL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesBL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiBaroLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrBaroLink(1,jj) = 1;
|
|
wardat = 'Data of Baro Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiBaroLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiBaroLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiBaroLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiBaroLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiBaroLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiBaroLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiBaroLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiBaroLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiBaroLink(:,jj)));
|
|
for ii = 1:r
|
|
if str2double(cell2mat(DatiBaroLink(ii,1))) < 12000
|
|
idxF = [idxF; ii];
|
|
end
|
|
end
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxF);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiBL = datestr(datenum(datainiBL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiBaroLink(indice,jj) = DatiBaroLink(indice-1,jj);
|
|
ErrBaroLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiBaroLink(nnn,jj)));
|
|
if check == 1
|
|
DatiBaroLink(nnn,jj) = DatiBaroLink(nnn-1,jj);
|
|
ErrBaroLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Baro Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
|
|
% se barometro e piezometro non appartengono alla stessa catena, interpolo
|
|
% i dati
|
|
if B==0
|
|
DATIBaro = str2double(DatiBaroLink);
|
|
DATIBaroInt = interp1(DATiniBL(:,1),DATIBaro(:,1),DATiniPL(:,1));
|
|
DATIBaroTemp = interp1(DATiniBL(:,1),DATIBaro(:,2),DATiniPL(:,1));
|
|
DatiBaroLink = [DATiniPL DATIBaroInt DATIBaroTemp];
|
|
log = isnan(DatiBaroLink(:,:));
|
|
[rL,cL] = size(log);
|
|
for check = 1:rL
|
|
for control = 1:cL
|
|
if log(check,control) == 1
|
|
if check == 1 % è proprio la prima data ad essere Nan, ciò significa che il barometro è stato installato dopo il piezometro
|
|
i = 2;
|
|
while log(i,control) == 1
|
|
i = i+1;
|
|
end
|
|
DatiBaroLink(check,control) = DatiBaroLink(i,control);
|
|
else
|
|
DatiBaroLink(check,control) = DatiBaroLink(check-1,control);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
DATIBaro = str2double(DatiBaroLink);
|
|
DatiBaroLink = [DATiniBL DATIBaro];
|
|
end
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
[r,~] = size(DatiBaroLink);
|
|
while a <= r
|
|
if DatiBaroLink(a,1) == DatiBaroLink(a-1,1)
|
|
DatiBaroLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
text = ['Barometer data conversion for chain ' IDcentralina ' - ' DTcatena ' done'];
|
|
fprintf(fileID,fmt,text);
|
|
end
|
|
if NuovoZeroBL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiBaroLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiBaroLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiBaroLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiBaroLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiBaroLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
elseif yesBL == 0 && yesPL == 0
|
|
DatiBaroLink = [];
|
|
ErrBaroLink = [];
|
|
wardat = 'lettura function: there are not Baro Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
%% Load Link
|
|
if yesLL == 0 % Non ci sono Load Link
|
|
DatiLoadLink = [];
|
|
ErrLoadLink = [];
|
|
wardat = 'lettura function: there are not Load Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-Load-RawData.csv']; % Specifico per Load Link
|
|
NAN = 0;
|
|
DIS = 0;
|
|
while NAN == 0
|
|
if datenum(datainiLL) == datenum(Data(1,1))
|
|
tempoiniLL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Load Link';
|
|
NodeNumLL = num2str(cell2mat(NodoLoadLink(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiLL ''' and Time >= ''' tempoiniLL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum = ''' NodeNumLL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniLL = curs.Data;
|
|
Ntempo = DATiniLL;
|
|
[r,c] = size(DATiniLL);
|
|
saltoLL = 0;
|
|
if r==1 && c==1
|
|
textdatLL = 'Warning: error reading Load Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatLL);
|
|
saltoLL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiLL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ...
|
|
DTcatena ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumLL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2LL = curs.Data;
|
|
Ndate = DAT2LL;
|
|
if saltoLL == 1
|
|
DATiniLL = DAT2LL;
|
|
end
|
|
Check = size(DAT2LL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoLL == 0
|
|
DATiniLL = [DATiniLL; DAT2LL];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniLL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniLL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniLL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniLL = T;
|
|
else
|
|
DATiniLL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
[rd,~] = size(Ndate); % numero di dati successivi al primo giorno di calcolo
|
|
[rt,~] = size(Ntempo); % numero di dati del primo giorno di calcolo
|
|
% creo la matrice per i dati Load Link
|
|
if saltoLL == 0
|
|
if Check(1,2) > 1
|
|
DatiLoadLink = cell(rd+rt,rLL);
|
|
else
|
|
DatiLoadLink = cell(rt,rLL);
|
|
end
|
|
else
|
|
DatiLoadLink = cell(rd,rLL);
|
|
end
|
|
NLoadLink = cell2mat(NodoLoadLink(:,2));
|
|
col = 1;
|
|
ii = 1;
|
|
w = 0;
|
|
while ii <= rLL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NLoadLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0 from RawDataView where Date = ''' ...
|
|
datainiLL ''' and Time >= ''' tempoiniLL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoLL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0 from RawDataView where Date > ''' ...
|
|
datainiLL ''' and UnitName = ''' IDcentralina ''' and ToolNameID = ''' ...
|
|
DTcatena ''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoLLd = curs.Data;
|
|
% Concateno i dati relativi a Step 1 e 2 per il nodo ii-esimo.
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoLL == 0
|
|
DatiLoadLink(1:rt,col) = DATnodoLL(:,:);
|
|
else
|
|
DatiLoadLink(1:rd,col) = DATnodoLL(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoLLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoLLd(i,:) = DATnodoLLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Load Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoLL == 0
|
|
DatiLoadLink(rt+1:rt+rd,col) = DATnodoLLd(:,:);
|
|
end
|
|
else
|
|
DatiLoadLink = DatiLoadLink(1:end,:);
|
|
end
|
|
okdatLL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rLL) ' Load Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatLL);
|
|
ii = ii+1;
|
|
col = col+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Load Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiLoadLink);
|
|
ErrLoadLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroLL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiLL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
for jj=1:c
|
|
if strcmp('Dis.',DatiLoadLink(1,jj)) == 1
|
|
for dis = 2:r
|
|
if strcmp('Dis.',DatiLoadLink(dis,jj)) == 0
|
|
DatiLoadLink = DatiLoadLink(dis:end,:);
|
|
DATiniLL = DATiniLL(dis:end,:);
|
|
[r,c] = size(DatiLoadLink);
|
|
break
|
|
elseif isfile(RawDataFile) == 1
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiLoadLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrLoadLink(1,jj) = 1;
|
|
wardat = 'Data of Load Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
DIS = 0;
|
|
break
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiLL)+1 < now
|
|
datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesLL = 0;
|
|
end
|
|
end
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiLL)+1 < now
|
|
datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesLL = 0;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if DIS ~= 1 && yesLL == 1
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiLoadLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiLoadLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiLoadLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiLoadLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiLoadLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiLoadLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiLoadLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiLoadLink(1,jj)));
|
|
idxRX = find(strcmp('No RX',DatiLoadLink(1,jj)));
|
|
idxI = find(strcmp('id Error',DatiLoadLink(1,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiLoadLink(1,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiLoadLink(1,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiLoadLink(1,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiLoadLink(1,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiLoadLink(1,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiLoadLink(1,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiLoadLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiLoadLink(1,jj)));
|
|
idxCE = find(strcmp('CH n. Er',DatiLoadLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxCE);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxND);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Load Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroLL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiLL)+1 < now
|
|
datainiLL = datestr(datenum(datainiLL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesLL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiLL = datestr(datenum(datainiLL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiLoadLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrLoadLink(1,jj) = 1;
|
|
wardat = 'Data of Load Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiLL = datestr(datenum(datainiLL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiLoadLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiLoadLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiLoadLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiLoadLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiLoadLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiLoadLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiLoadLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiLoadLink(:,jj)));
|
|
idxRX = find(strcmp('No RX',DatiLoadLink(:,jj)));
|
|
idxI = find(strcmp('id Error',DatiLoadLink(:,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiLoadLink(:,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiLoadLink(:,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiLoadLink(:,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiLoadLink(:,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiLoadLink(:,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiLoadLink(:,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiLoadLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiLoadLink(:,jj)));
|
|
idxCE = find(strcmp('CH n. Er',DatiLoadLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxCE);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxND);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiLL = datestr(datenum(datainiLL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiLoadLink(indice,jj) = DatiLoadLink(indice-1,jj);
|
|
ErrLoadLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiLoadLink(nnn,jj)));
|
|
if check == 1
|
|
DatiLoadLink(nnn,jj) = DatiLoadLink(nnn-1,jj);
|
|
ErrLoadLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Load Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiLoadLink = [DATiniLL str2double(DatiLoadLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiLoadLink(a,1) == DatiLoadLink(a-1,1)
|
|
DatiLoadLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroLL == 1 && yesLL == 1
|
|
[rDR,cDR] = size(DatiRaw);
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiLoadLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiLoadLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiLoadLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiLoadLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiLoadLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiLoadLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Klino Link
|
|
if yesKL == 0 % non ci sono Klino Link
|
|
DatiKlinoLink = [];
|
|
ErrKlinoLink = [];
|
|
wardat = 'lettura function: there are not Klino Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-KL-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiKL) == datenum(Data(1,1))
|
|
tempoiniKL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Klino Link';
|
|
NodeNumKL = num2str(cell2mat(NodoKlinoLink(1,2)));
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiKL ''' and Time >= ''' tempoiniKL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum = ''' NodeNumKL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniKL = curs.Data;
|
|
Ntempo = DATiniKL;
|
|
[r,c] = size(DATiniKL);
|
|
saltoKL = 0;
|
|
if r==1 && c==1
|
|
textdatKL = 'Warning: error reading Klino Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatKL);
|
|
saltoKL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumKL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2KL = curs.Data;
|
|
Ndate = DAT2KL;
|
|
if saltoKL == 1
|
|
DATiniKL = DAT2KL;
|
|
end
|
|
Check = size(DAT2KL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoKL == 0
|
|
DATiniKL = [DATiniKL; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniKL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniKL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniKL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniKL = T;
|
|
else
|
|
DATiniKL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoKL == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
|
|
|| isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
|
|
DatiKlinoLink = cell(rd+rt,4*rKL);
|
|
col = 4;
|
|
elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
|
|
DatiKlinoLink = cell(rd+rt,2*rKL);
|
|
col = 3;
|
|
end
|
|
else
|
|
if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
|
|
|| isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
|
|
DatiKlinoLink = cell(rt,4*rKL);
|
|
col = 4;
|
|
elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
|
|
DatiKlinoLink = cell(rt,2*rKL);
|
|
col = 3;
|
|
end
|
|
end
|
|
else
|
|
if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') ...
|
|
|| isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
|
|
DatiKlinoLink = cell(rd,4*rKL);
|
|
col = 4;
|
|
elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
|
|
DatiKlinoLink = cell(rd,2*rKL);
|
|
col = 3;
|
|
end
|
|
end
|
|
NKlinoLink = cell2mat(NodoKlinoLink(:,2));
|
|
|
|
s = 0;
|
|
w = 0;
|
|
while ii <= rKL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NKlinoLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
if strcmp(NodoKlinoLink(ii,4),'ADC') || strcmp(NodoKlinoLink{ii,4} ,'null') || isempty(NodoKlinoLink{ii,4}) == 1
|
|
comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date = ''' datainiKL ''' and Time >= ''' ...
|
|
tempoiniKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2, Val6 from RawDataView where Date > ''' ...
|
|
datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLd = curs.Data;
|
|
elseif strcmp(NodoKlinoLink{ii,4} ,'g') == 1
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' datainiKL ''' and Time >= ''' ...
|
|
tempoiniKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ...
|
|
datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLd = curs.Data;
|
|
elseif strcmp(NodoKlinoLink{ii,4} ,'Gradi')
|
|
if NodoKlinoLink{ii,5} == 4
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date = ''' datainiKL ''' and Time >= ''' ...
|
|
tempoiniKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2, Val3 from RawDataView where Date > ''' ...
|
|
datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLd = curs.Data;
|
|
else
|
|
comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' datainiKL ''' and Time >= ''' ...
|
|
tempoiniKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ...
|
|
datainiKL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLd = curs.Data;
|
|
end
|
|
end
|
|
s = s+1;
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if strcmp(NodoKlinoLink(ii,4),'ADC') || strcmp(NodoKlinoLink{ii,4} ,'null') ...
|
|
|| isempty(NodoKlinoLink{ii,4}) == 1 || strcmp(NodoKlinoLink{ii,4} ,'g')
|
|
ini_col = col-3;
|
|
elseif strcmp(NodoKlinoLink{ii,4} ,'Gradi')
|
|
if NodoKlinoLink{ii,5} == 4
|
|
ini_col = col-3;
|
|
else
|
|
ini_col = col-2;
|
|
end
|
|
end
|
|
if saltoKL == 0
|
|
DatiKlinoLink(1:rt,ini_col:col) = DATnodoKL(:,:);
|
|
else
|
|
DatiKlinoLink(1:rd,ini_col:col) = DATnodoKLd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoKLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoKLd(i,:) = DATnodoKLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Klino Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoKL == 0
|
|
DatiKlinoLink(rt+1:rt+rd,ini_col:col) = DATnodoKLd(:,:);
|
|
end
|
|
else
|
|
DatiKlinoLink = DatiKlinoLink(1:end,:);
|
|
end
|
|
okdatKL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rKL) ' Klino Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatKL);
|
|
if strcmp(NodoKlinoLink(ii,4),'ADC') || strcmp(NodoKlinoLink{ii,4} ,'null') ...
|
|
|| isempty(NodoKlinoLink{ii,4}) == 1 || strcmp(NodoKlinoLink{ii,4} ,'g')
|
|
col = col+4;
|
|
elseif strcmp(NodoKlinoLink{ii,4} ,'Gradi')
|
|
if NodoKlinoLink{ii,5} == 4
|
|
col = col+4;
|
|
else
|
|
col = col+3;
|
|
end
|
|
end
|
|
ii = ii+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Klino Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiKlinoLink);
|
|
ErrKlinoLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroKL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiKL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiKlinoLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiKlinoLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiKlinoLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiKlinoLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiKlinoLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiKlinoLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiKlinoLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiKlinoLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiKlinoLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Klino Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroKL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiKL)+1 < now
|
|
datainiKL = datestr(datenum(datainiKL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesKL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiKlinoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrKlinoLink(1,jj) = 1;
|
|
wardat = 'Data of Klino Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
% Cerco i multipli di 4 per identificare le temperature
|
|
if strcmp(NodoKlinoLink(1,4),'ADC') == 1 || strcmp(NodoKlinoLink{1,4} ,'null') == 1 ...
|
|
|| isempty(NodoKlinoLink{1,4}) == 1 || strcmp(NodoKlinoLink{1,4} ,'g') == 1
|
|
Int = jj/4;
|
|
elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
|
|
Int = rKL+1; % NON filtro mai
|
|
end
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiKlinoLink(1,jj)) > 1000
|
|
if rDR==1 && cDR==1 || NuovoZeroKL == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiKL)+1 < now
|
|
datainiKL = datestr(datenum(datainiKL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesKL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiKlinoLink(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiKlinoLink(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiKlinoLink(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiKlinoLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrKlinoLink(1,jj) = 1;
|
|
wardat = ['Data of Klino Link nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiKlinoLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiKlinoLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiKlinoLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiKlinoLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiKlinoLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiKlinoLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiKlinoLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiKlinoLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiKlinoLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiKL = datestr(datenum(datainiKL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiKlinoLink(indice,jj) = DatiKlinoLink(indice-1,jj);
|
|
ErrKlinoLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
for ii = 2:r
|
|
% Cerco i multipli di 4 per identificare le temperature
|
|
if strcmp(NodoKlinoLink(1,4),'ADC') || strcmp(NodoKlinoLink{1,4} ,'null') || isempty(NodoKlinoLink{1,4}) == 1
|
|
Int = jj/4;
|
|
elseif strcmp(NodoKlinoLink{1,4} ,'Gradi')
|
|
Int = rKL+1; % NON filtro mai
|
|
end
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiKlinoLink(ii,jj)) > 1000
|
|
DatiKlinoLink(ii,jj-3:jj) = DatiKlinoLink(ii-1,jj-3:jj);
|
|
ErrKlinoLink(ii,jj) = 1;
|
|
wardat = ['Data of Klino Link nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiKlinoLink(nnn,jj)));
|
|
if check == 1
|
|
DatiKlinoLink(nnn,jj) = DatiKlinoLink(nnn-1,jj);
|
|
ErrKlinoLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Klino Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
DatiKlinoLink = [DATiniKL str2double(DatiKlinoLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiKlinoLink(a,1) == DatiKlinoLink(a-1,1)
|
|
DatiKlinoLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroKL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiKlinoLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiKlinoLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiKlinoLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiKlinoLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiKlinoLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiKlinoLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Klino Link HR
|
|
if yesKLHR == 0 % non ci sono Klino Link HR
|
|
DatiKlinoLinkHR = [];
|
|
ErrKlinoLinkHR = [];
|
|
wardat = 'lettura function: there are not Klino Link HR!';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-KLHR-RawData.csv'];
|
|
while NAN == 0
|
|
if datenum(datainiKLHR) == datenum(Data(1,1))
|
|
tempoiniKLHR = char(Data(1,2));
|
|
end
|
|
NodeType = 'Klino Link HR';
|
|
NodeNumKLHR = num2str(cell2mat(NodoKlinoLinkHR(1,2)));
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiKLHR ''' and Time >= ''' tempoiniKLHR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum = ''' NodeNumKLHR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniKLHR = curs.Data;
|
|
Ntempo = DATiniKLHR;
|
|
[r,c] = size(DATiniKLHR);
|
|
saltoKLHR = 0;
|
|
if r==1 && c==1
|
|
textdatKLHR = 'Warning: error reading Klino Link HR (control unit data)!';
|
|
fprintf(fileID,fmt,textdatKLHR);
|
|
saltoKLHR = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiKLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumKLHR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2KLHR = curs.Data;
|
|
Ndate = DAT2KLHR;
|
|
if saltoKLHR == 1
|
|
DATiniKLHR = DAT2KLHR;
|
|
end
|
|
Check = size(DAT2KLHR);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoKLHR == 0
|
|
DATiniKLHR = [DATiniKLHR; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniKLHR);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniKLHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniKLHR(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniKLHR = T;
|
|
else
|
|
DATiniKLHR = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoKLHR == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
DatiKlinoLinkHR = cell(rd+rt,3*rKLHR);
|
|
else
|
|
DatiKlinoLinkHR = cell(rd+rt,6*rKLHR);
|
|
end
|
|
else
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
DatiKlinoLinkHR = cell(rt,3*rKLHR);
|
|
else
|
|
DatiKlinoLinkHR = cell(rt,6*rKLHR);
|
|
end
|
|
end
|
|
else
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
DatiKlinoLinkHR = cell(rd,3*rKLHR);
|
|
else
|
|
DatiKlinoLinkHR = cell(rd,6*rKLHR);
|
|
end
|
|
end
|
|
NKlinoLinkHR = cell2mat(NodoKlinoLinkHR(:,2));
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
col = 3;
|
|
else
|
|
col = 6;
|
|
end
|
|
s = 0;
|
|
w = 0;
|
|
while ii <= rKLHR
|
|
nN = NKlinoLinkHR(rKLHR-s,1);
|
|
nNodo = num2str(nN);
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' datainiKLHR ''' and Time >= ''' ...
|
|
tempoiniKLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLHR = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ...
|
|
datainiKLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLHRd = curs.Data;
|
|
ini_col = col-2;
|
|
else
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = '''...
|
|
datainiKLHR ''' and Time >= ''' tempoiniKLHR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLHR = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
|
|
datainiKLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoKLHRd = curs.Data;
|
|
ini_col = col-5;
|
|
end
|
|
s = s+1;
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
|
|
if saltoKLHR == 0
|
|
DatiKlinoLinkHR(1:rt,ini_col:col) = DATnodoKLHR(:,:);
|
|
else
|
|
DatiKlinoLinkHR(1:rd,ini_col:col) = DATnodoKLHRd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoKLHRd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoKLHRd(i,:) = DATnodoKLHRd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Klino Link HR ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoKLHR == 0
|
|
DatiKlinoLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoKLHRd(:,:);
|
|
end
|
|
else
|
|
DatiKlinoLinkHR = DatiKlinoLinkHR(1:end,:);
|
|
end
|
|
okdatKLHR = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rKLHR) ' Klino Link HR nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatKLHR);
|
|
ii = ii+1;
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
col = col+3;
|
|
else
|
|
col = col+6;
|
|
end
|
|
end
|
|
wardat = 'There are not warning for Klino Link HR!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if w == 0
|
|
wardat = 'There are not warning for Klino Link HR!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiKlinoLinkHR);
|
|
ErrKlinoLinkHR = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroKLHR == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiKLHR));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiKlinoLinkHR(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiKlinoLinkHR(1,jj)));
|
|
idxT = find(strcmp('---',DatiKlinoLinkHR(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiKlinoLinkHR(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiKlinoLinkHR(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiKlinoLinkHR(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiKlinoLinkHR(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiKlinoLinkHR(1,jj)));
|
|
idxN = find(strcmp('null',DatiKlinoLinkHR(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Klino Link HR nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroKLHR == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiKLHR)+1 < now
|
|
datainiKLHR = datestr(datenum(datainiKLHR)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesKLHR = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiKLHR = datestr(datenum(datainiKLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiKlinoLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrKlinoLinkHR(1,jj) = 1;
|
|
wardat = 'Data of Klino Link HR nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiKLHR = datestr(datenum(datainiKLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
else
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiKlinoLinkHR(1,jj)) < 500
|
|
if rDR==1 && cDR==1 || NuovoZeroKLHR == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiKLHR)+1 < now
|
|
datainiKLHR = datestr(datenum(datainiKLHR)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesKLHR = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiKLHR)+1 < now
|
|
datainiKLHR = datestr(datenum(datainiKLHR)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesKLHR = 0;
|
|
end
|
|
else
|
|
DatiKlinoLinkHR(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
|
|
DatiKlinoLinkHR(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
|
|
DatiKlinoLinkHR(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiKlinoLinkHR(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiKlinoLinkHR(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiKlinoLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrKlinoLinkHR(1,jj) = 1;
|
|
wardat = ['Data of Klino Link HR nodes corrected using Raw Data of reference Csv file. '...
|
|
'Electrolytic cell was read as the corresponding MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiKlinoLinkHR(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiKlinoLinkHR(:,jj)));
|
|
idxT = find(strcmp('---',DatiKlinoLinkHR(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiKlinoLinkHR(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiKlinoLinkHR(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiKlinoLinkHR(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiKlinoLinkHR(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiKlinoLinkHR(:,jj)));
|
|
idxN = find(strcmp('null',DatiKlinoLinkHR(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiKLHR = datestr(datenum(datainiKLHR)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiKlinoLinkHR(indice,jj) = DatiKlinoLinkHR(indice-1,jj);
|
|
ErrKlinoLinkHR(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if strcmp(NodoKlinoLink(1,4),'IPTM') == 1
|
|
else
|
|
for ii = 2:r
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiKlinoLinkHR(ii,jj)) < 500
|
|
DatiKlinoLinkHR(ii,jj-5:jj) = DatiKlinoLinkHR(ii-1,jj-5:jj);
|
|
ErrKlinoLinkHR(ii,jj) = 1;
|
|
wardat = ['Data of Klino Link HR nodes corrected using Raw Data of reference Csv file. '...
|
|
'Electrolytic cell was read as a MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiKlinoLinkHR(nnn,jj)));
|
|
if check == 1
|
|
DatiKlinoLinkHR(nnn,jj) = DatiKlinoLinkHR(nnn-1,jj);
|
|
ErrKlinoLinkHR(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Klino Link HR data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
DatiKlinoLinkHR = [DATiniKLHR str2double(DatiKlinoLinkHR)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiKlinoLinkHR(a,1) == DatiKlinoLinkHR(a-1,1)
|
|
DatiKlinoLinkHR(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroKLHR == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiKlinoLinkHR(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiKlinoLinkHR(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiKlinoLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiKlinoLinkHR(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiKlinoLinkHR;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiKlinoLinkHR;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Rain Link
|
|
if yesRL == 0 % Non ci sono Rain Link
|
|
DatiRainLink = [];
|
|
ErrRainLink = [];
|
|
wardat = 'lettura function: there are not Rain Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-RL-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiRL) == datenum(Data(1,1))
|
|
tempoiniRL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Rain Link';
|
|
NodeNumRL = num2str(cell2mat(NodoRainLink(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiRL ''' and Time >= ''' tempoiniRL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumRL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniRL = curs.Data;
|
|
Ntempo = DATiniRL;
|
|
[r,c] = size(DATiniRL);
|
|
saltoRL = 0;
|
|
if r==1 && c==1
|
|
textdatRL = 'Warning: error reading Rain Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatRL);
|
|
saltoRL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiRL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumRL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2RL = curs.Data;
|
|
Ndate = DAT2RL;
|
|
if saltoRL == 1
|
|
DATiniRL = DAT2RL;
|
|
end
|
|
Check = size(DAT2RL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoRL == 0
|
|
DATiniRL = [DATiniRL; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniRL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniRL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniRL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniRL = T;
|
|
else
|
|
DATiniRL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoRL == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiRainLink = cell(rd+rt,1*rRL);
|
|
else
|
|
DatiRainLink = cell(rt,1*rRL);
|
|
end
|
|
else
|
|
DatiRainLink = cell(rd,1*rRL);
|
|
end
|
|
NRainLink = cell2mat(NodoRainLink(:,2));
|
|
col = 1;
|
|
w = 0;
|
|
while ii <= rRL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NRainLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0 from RawDataView where Date = ''' ...
|
|
datainiRL ''' and Time >= ''' tempoiniRL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoRL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0 from RawDataView where Date > ''' ...
|
|
datainiRL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoRLd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoRL == 0
|
|
DatiRainLink(1:rt,col) = DATnodoRL(:,:);
|
|
else
|
|
DatiRainLink(1:rd,col) = DATnodoRLd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoRLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoRLd(i,:) = DATnodoRLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Rain Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoRL == 0
|
|
DatiRainLink(rt+1:rt+rd,col) = DATnodoRLd(:,:);
|
|
end
|
|
else
|
|
DatiRainLink = DatiRainLink(1:end,:);
|
|
end
|
|
okdatRL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rRL) ' Rain Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatRL);
|
|
ii = ii+1;
|
|
col = col+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Rain Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiRainLink);
|
|
ErrRainLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroRL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiRL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiRainLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiRainLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiRainLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiRainLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiRainLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiRainLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiRainLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiRainLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiRainLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Rain Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroRL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiRL)+1 < now
|
|
datainiRL = datestr(datenum(datainiRL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesRL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiRL = datestr(datenum(datainiRL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiRainLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrRainLink(1,jj) = 1;
|
|
wardat = 'Data of Rain Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiRL = datestr(datenum(datainiRL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiRainLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiRainLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiRainLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiRainLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiRainLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiRainLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiRainLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiRainLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiRainLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiRL = datestr(datenum(datainiRL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiRainLink(indice,jj) = DatiRainLink(indice-1,jj);
|
|
ErrRainLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiRainLink(nnn,jj)));
|
|
if check == 1
|
|
DatiRainLink(nnn,jj) = DatiRainLink(nnn-1,jj);
|
|
ErrRainLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Rain Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiRainLink = [DATiniRL str2double(DatiRainLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiRainLink(a,1) == DatiRainLink(a-1,1)
|
|
DatiRainLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroRL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiRainLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiRainLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiRainLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiRainLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiRainLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiRainLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% SPP Link
|
|
if yesSPP == 0 % Non ci sono SPP Link
|
|
DatiSPPLink = [];
|
|
wardat = 'lettura function: there are not SPP Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-SPP-RawData.csv'];
|
|
while NAN == 0
|
|
if datenum(datainiSPP) == datenum(Data(1,1))
|
|
tempoiniSPP = char(Data(1,2));
|
|
end
|
|
NodeType = 'SPP Link';
|
|
NodeNumSPP = num2str(cell2mat(NodoSPPLink(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 = ''' ...
|
|
datainiSPP ''' and Time >= ''' tempoiniSPP ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumSPP ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniSPP = curs.Data;
|
|
Ntempo = DATiniSPP;
|
|
[r,c] = size(DATiniSPP);
|
|
saltoSPP = 0;
|
|
if r==1 && c==1
|
|
textdatSPP = 'Warning: error reading SPP Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatSPP);
|
|
saltoSPP = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiSPP ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumSPP ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2SPP = curs.Data;
|
|
Ndate = DAT2SPP;
|
|
if saltoSPP == 1
|
|
DATiniSPP = DAT2SPP;
|
|
end
|
|
Check = size(DAT2SPP);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoSPP == 0
|
|
DATiniSPP = [DATiniSPP; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniSPP);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniSPP(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniSPP(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniSPP = T;
|
|
else
|
|
DATiniSPP = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoSPP == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiSPPLink = cell(rd+rt,1*rSPP);
|
|
else
|
|
DatiSPPLink = cell(rt,1*rSPP);
|
|
end
|
|
else
|
|
DatiSPPLink = cell(rd,1*rSPP);
|
|
end
|
|
NSPPLink = cell2mat(NodoSPPLink(:,2));
|
|
col = 1;
|
|
w = 0;
|
|
while ii <= rSPP
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NSPPLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0 from RawDataView where Date = ''' ...
|
|
datainiSPP ''' and Time >= ''' tempoiniSPP ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoSPP = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0 from RawDataView where Date > ''' ...
|
|
datainiSPP ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoSPPd = 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 saltoSPP == 0
|
|
DatiSPPLink(1:rt,col) = DATnodoSPP(:,:);
|
|
else
|
|
DatiSPPLink(1:rd,col) = DATnodoSPPd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoSPPd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoSPPd(i,:) = DATnodoSPPd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node SPP Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoSPP == 0
|
|
DatiSPPLink(rt+1:rt+rd,col) = DATnodoSPPd(:,:);
|
|
end
|
|
else
|
|
DatiSPPLink = DatiSPPLink(1:end,:);
|
|
end
|
|
okdatSPP = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rSPP) ' SPP Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatSPP);
|
|
ii = ii+1;
|
|
col = col+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for SPP 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(DatiSPPLink);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroSPP == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiSPP));
|
|
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',DatiSPPLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiSPPLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiSPPLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiSPPLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiSPPLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiSPPLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiSPPLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiSPPLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiSPPLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of SPP Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroSPP == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiSPP)+1 < now
|
|
datainiSPP = datestr(datenum(datainiSPP)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesSPP = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiSPP = datestr(datenum(datainiSPP)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiSPPLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
wardat = 'Data of SPP Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiSPP = datestr(datenum(datainiSPP)-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',DatiSPPLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiSPPLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiSPPLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiSPPLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiSPPLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiSPPLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiSPPLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiSPPLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiSPPLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiSPP = datestr(datenum(datainiSPP)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiSPPLink(indice,jj) = DatiSPPLink(indice-1,jj);
|
|
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(DatiSPPLink(nnn,jj)));
|
|
if check == 1
|
|
DatiSPPLink(nnn,jj) = DatiSPPLink(nnn-1,jj);
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of SPP Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiSPPLink = [DATiniSPP str2double(DatiSPPLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiSPPLink(a,1) == DatiSPPLink(a-1,1)
|
|
DatiSPPLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroSPP == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiSPPLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiSPPLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiSPPLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiSPPLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiSPPLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiSPPLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Therm Link
|
|
if yesThL == 0 % Non ci sono Therm Link
|
|
DatiThermLink = [];
|
|
ErrThermLink = [];
|
|
wardat = 'lettura function: there are not Therm Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-ThL-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiThL) == datenum(Data(1,1))
|
|
tempoiniThL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Therm Link HR';
|
|
NodeNumThL = num2str(cell2mat(NodoThermLink(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiThL ''' and Time >= ''' tempoiniThL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumThL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniThL = curs.Data;
|
|
Ntempo = DATiniThL;
|
|
[r,c] = size(DATiniThL);
|
|
saltoThL = 0;
|
|
if r==1 && c==1
|
|
textdatThL = 'Warning: error reading Therm Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatThL);
|
|
saltoThL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiThL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumThL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2ThL = curs.Data;
|
|
Ndate = DAT2ThL;
|
|
if saltoThL == 1
|
|
DATiniThL = DAT2ThL;
|
|
end
|
|
Check = size(DAT2ThL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoThL == 0
|
|
DATiniThL = [DATiniThL; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniThL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniThL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniThL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniThL = T;
|
|
else
|
|
DATiniThL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoThL == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiThermLink = cell(rd+rt,1*rThL);
|
|
else
|
|
DatiThermLink = cell(rt,1*rThL);
|
|
end
|
|
else
|
|
DatiThermLink = cell(rd,1*rThL);
|
|
end
|
|
NThermLink = cell2mat(NodoThermLink(:,2));
|
|
col = 1;
|
|
w = 0;
|
|
while ii <= rThL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NThermLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0 from RawDataView where Date = ''' ...
|
|
datainiThL ''' and Time >= ''' tempoiniThL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoThL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0 from RawDataView where Date > ''' ...
|
|
datainiThL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoThLd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoThL == 0
|
|
DatiThermLink(1:rt,col) = DATnodoThL(:,:);
|
|
else
|
|
DatiThermLink(1:rd,col) = DATnodoThLd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoThLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoThLd(i,:) = DATnodoThLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Therm Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoThL == 0
|
|
DatiThermLink(rt+1:rt+rd,col) = DATnodoThLd(:,:);
|
|
end
|
|
else
|
|
DatiThermLink = DatiThermLink(1:end,:);
|
|
end
|
|
okdatThL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rThL) ' Therm Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatThL);
|
|
ii = ii+1;
|
|
col = col+1;
|
|
end
|
|
wardat = 'There are not warning for Therm Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if w == 0
|
|
wardat = 'There are not warning for Therm Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiThermLink);
|
|
ErrThermLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroThL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiThL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiThermLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiThermLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiThermLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiThermLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiThermLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiThermLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiThermLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiThermLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiThermLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Therm Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroThL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiThL)+1 < now
|
|
datainiThL = datestr(datenum(datainiThL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesThL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiThL = datestr(datenum(datainiThL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiThermLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrThermLink(1,jj) = 1;
|
|
wardat = 'Data of Therm Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiThL = datestr(datenum(datainiThL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiThermLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiThermLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiThermLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiThermLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiThermLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiThermLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiThermLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiThermLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiThermLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiThL = datestr(datenum(datainiThL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiThermLink(indice,jj) = DatiThermLink(indice-1,jj);
|
|
ErrThermLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiThermLink(nnn,jj)));
|
|
if check == 1
|
|
DatiThermLink(nnn,jj) = DatiThermLink(nnn-1,jj);
|
|
ErrThermLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Therm Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiThermLink = [DATiniThL str2double(DatiThermLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiThermLink(a,1) == DatiThermLink(a-1,1)
|
|
DatiThermLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroThL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiThermLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiThermLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiThermLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiThermLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiThermLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiThermLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% PT100 Link
|
|
if yesPT100 == 0 % Non ci sono PT100 Link
|
|
DatiPT100Link = [];
|
|
ErrPT100Link = [];
|
|
wardat = 'lettura function: there are not PT100 Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-PT100-RawData.csv'];
|
|
DIS = 0;
|
|
while NAN == 0
|
|
if datenum(datainiPT100) == datenum(Data(1,1))
|
|
tempoiniPT100 = char(Data(1,2));
|
|
end
|
|
NodeType = 'PT100 Link';
|
|
NodeNumPT100 = num2str(cell2mat(NodoPT100Link(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiPT100 ''' and Time >= ''' tempoiniPT100 ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumPT100 ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniPT100 = curs.Data;
|
|
Ntempo = DATiniPT100;
|
|
[r,c] = size(DATiniPT100);
|
|
saltoPT100 = 0;
|
|
if r==1 && c==1
|
|
textdatPT100 = 'Warning: error reading PT100 Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatPT100);
|
|
saltoPT100 = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiPT100 ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumPT100 ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2PT100 = curs.Data;
|
|
Ndate = DAT2PT100;
|
|
if saltoPT100 == 1
|
|
DATiniPT100 = DAT2PT100;
|
|
end
|
|
Check = size(DAT2PT100);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoPT100 == 0
|
|
DATiniPT100 = [DATiniPT100; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniPT100);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniPT100(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPT100(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniPT100 = T;
|
|
else
|
|
DATiniPT100 = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoPT100 == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiPT100Link = cell(rd+rt,1*rPT100);
|
|
else
|
|
DatiPT100Link = cell(rt,1*rPT100);
|
|
end
|
|
else
|
|
DatiPT100Link = cell(rd,1*rPT100);
|
|
end
|
|
NPT100Link = cell2mat(NodoPT100Link(:,2));
|
|
col = 1;
|
|
w = 0;
|
|
while ii <= rPT100
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NPT100Link(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val0 from RawDataView where Date = ''' ...
|
|
datainiPT100 ''' and Time >= ''' tempoiniPT100 ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPT100 = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0 from RawDataView where Date > ''' ...
|
|
datainiPT100 ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPT100d = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoPT100 == 0
|
|
DatiPT100Link(1:rt,col) = DATnodoPT100(:,:);
|
|
else
|
|
DatiPT100Link(1:rd,col) = DATnodoPT100d(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoPT100d); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoPT100d(i,:) = DATnodoPT100d(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node PT100 Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoPT100 == 0
|
|
DatiPT100Link(rt+1:rt+rd,col) = DATnodoPT100d(:,:);
|
|
end
|
|
else
|
|
DatiPT100Link = DatiPT100Link(1:end,:);
|
|
end
|
|
okdatPT100 = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rPT100) ' PT100 Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatPT100);
|
|
ii = ii+1;
|
|
col = col+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for PT100 Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiPT100Link);
|
|
ErrPT100Link = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroPT100 == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiPT100));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
for jj=1:c
|
|
if strcmp('Dis.',DatiPT100Link(1,jj)) == 1
|
|
for dis = 2:r
|
|
if strcmp('Dis.',DatiPT100Link(dis,jj)) == 0
|
|
DatiPT100Link = DatiPT100Link(dis:end,:);
|
|
DATiniPT100 = DATiniPT100(dis:end,:);
|
|
[r,c] = size(DatiPT100Link);
|
|
break
|
|
elseif isfile(RawDataFile) == 1
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiPT100Link(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrPT100Link(1,jj) = 1;
|
|
wardat = 'Data of Load Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
DIS = 0;
|
|
break
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiPT100)+1 < now
|
|
datainiPT100 = datestr(datenum(datainiPT100)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPT100 = 0;
|
|
end
|
|
end
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiPT100)+1 < now
|
|
datainiPT100 = datestr(datenum(datainiPT100)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPT100 = 0;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if DIS ~= 1 && yesPT100 == 1
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% --- Codice per il primo dato ---
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiPT100Link(1,jj)));
|
|
idxT = find(strcmp('---',DatiPT100Link(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiPT100Link(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiPT100Link(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiPT100Link(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiPT100Link(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiPT100Link(1,jj)));
|
|
idxN = find(strcmp('null',DatiPT100Link(1,jj)));
|
|
idxRX = find(strcmp('No RX',DatiPT100Link(1,jj)));
|
|
idxI = find(strcmp('id Error',DatiPT100Link(1,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiPT100Link(1,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiPT100Link(1,jj)));
|
|
idxC2 = find(strcmp('CH n. Er',DatiPT100Link(1,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiPT100Link(1,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiPT100Link(1,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiPT100Link(1,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiPT100Link(1,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiPT100Link(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiPT100Link(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxC2);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxND);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of PT100 Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroPT100 == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiPT100)+1 < now
|
|
datainiPT100 = datestr(datenum(datainiPT100)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPT100 = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiPT100 = datestr(datenum(datainiPT100)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiPT100Link(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrPT100Link(1,jj) = 1;
|
|
wardat = 'Data of PT100 Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiPT100 = datestr(datenum(datainiPT100)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj = 1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiPT100Link(:,jj)));
|
|
idxT = find(strcmp('---',DatiPT100Link(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiPT100Link(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiPT100Link(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiPT100Link(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiPT100Link(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiPT100Link(:,jj)));
|
|
idxN = find(strcmp('null',DatiPT100Link(:,jj)));
|
|
idxRX = find(strcmp('No RX',DatiPT100Link(:,jj)));
|
|
idxI = find(strcmp('id Error',DatiPT100Link(:,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiPT100Link(:,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiPT100Link(:,jj)));
|
|
idxC2 = find(strcmp('CH n. Er',DatiPT100Link(:,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiPT100Link(:,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiPT100Link(:,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiPT100Link(:,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiPT100Link(:,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiPT100Link(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiPT100Link(:,jj)));
|
|
idxDis = find(strcmp('Dis.',DatiPT100Link(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxC2);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxDis);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiPT100 = datestr(datenum(datainiPT100)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiPT100Link(indice,jj) = DatiPT100Link(indice-1,jj);
|
|
ErrPT100Link(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiPT100Link(nnn,jj)));
|
|
if check == 1
|
|
DatiPT100Link(nnn,jj) = DatiPT100Link(nnn-1,jj);
|
|
ErrPT100Link(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of PT100 Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiPT100Link = [DATiniPT100 str2double(DatiPT100Link)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiPT100Link(a,1) == DatiPT100Link(a-1,1)
|
|
DatiPT100Link(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroPT100 == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiPT100Link(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiPT100Link(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiPT100Link(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiPT100Link(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiPT100Link;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiPT100Link;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% In Place Link
|
|
if yesIPL == 0 % Non ci sono In Place Link
|
|
DatiInPlaceLink = [];
|
|
ErrInPlaceLink = [];
|
|
wardat = 'lettura function: there are not In Place Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-IPL-RawData.csv'];
|
|
NAN = 0;
|
|
while NAN == 0
|
|
if datenum(datainiIPL) == datenum(Data(1,1))
|
|
tempoiniIPL = char(Data(1,2));
|
|
end
|
|
NodeType = 'In Place Link';
|
|
NodeNumIPL = num2str(cell2mat(NodoInPlaceLink(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiIPL ''' and Time >= ''' tempoiniIPL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumIPL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniIPL = curs.Data;
|
|
Ntempo = DATiniIPL;
|
|
[r,c] = size(DATiniIPL);
|
|
saltoIPL = 0;
|
|
if r==1 && c==1
|
|
textdatIPL = 'Warning: error reading In Place Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatIPL);
|
|
saltoIPL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiIPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumIPL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2IPL = curs.Data;
|
|
Ndate = DAT2IPL;
|
|
if saltoIPL == 1
|
|
DATiniIPL = DAT2IPL;
|
|
end
|
|
Check = size(DAT2IPL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoIPL == 0
|
|
DATiniIPL = [DATiniIPL; DAT2IPL];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniIPL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniIPL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniIPL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniIPL = T;
|
|
else
|
|
DATiniIPL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoIPL == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
DatiInPlaceLink = cell(rd+rt,3*rIPL);
|
|
else
|
|
DatiInPlaceLink = cell(rd+rt,7*rIPL);
|
|
end
|
|
else
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
DatiInPlaceLink = cell(rt,3*rIPL);
|
|
else
|
|
DatiInPlaceLink = cell(rt,7*rIPL);
|
|
end
|
|
end
|
|
else
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
DatiInPlaceLink = cell(rd,3*rIPL);
|
|
else
|
|
DatiInPlaceLink = cell(rd,7*rIPL);
|
|
end
|
|
end
|
|
NInPlaceLink = cell2mat(NodoInPlaceLink(:,2));
|
|
ii = 1;
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
col = 3;
|
|
else
|
|
col = 7;
|
|
end
|
|
w = 0;
|
|
while ii <= rIPL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NInPlaceLink(ii,1);
|
|
if strcmp(DTcatena,'DT0116') && strcmp(IDcentralina,'ID0214')
|
|
if nN == 9
|
|
nN = 17;
|
|
end
|
|
elseif strcmp(DTcatena,'DT0117') && strcmp(IDcentralina,'ID0075')
|
|
if nN == 10
|
|
nN = 3;
|
|
end
|
|
end
|
|
nNodo = num2str(nN);
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
comando = ['select Val0, Val2, Val4 from RawDataView where Date = ''' ...
|
|
datainiIPL ''' and Time >= ''' tempoiniIPL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
else
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiIPL ''' and Time >= ''' tempoiniIPL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
end
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoIPL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
comando = ['select Val0, Val2, Val4 from RawDataView where Date > ''' ...
|
|
datainiIPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoIPLd = curs.Data;
|
|
else
|
|
comando = ['select Val0, Val1, Val2, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
|
|
datainiIPL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoIPLd = curs.Data;
|
|
end
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
ini_col = col-2;
|
|
else
|
|
ini_col = col-6;
|
|
end
|
|
if saltoIPL == 0
|
|
DatiInPlaceLink(1:rt,ini_col:col) = DATnodoIPL(:,:);
|
|
else
|
|
DatiInPlaceLink(1:rd,ini_col:col) = DATnodoIPLd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoIPLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoIPLd(i,:) = DATnodoIPLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node In Place Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoIPL == 0
|
|
DatiInPlaceLink(rt+1:rt+rd,ini_col:col) = DATnodoIPLd(:,:);
|
|
end
|
|
else
|
|
DatiInPlaceLink = DatiInPlaceLink(1:end,:);
|
|
end
|
|
okdatIPL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rIPL) ' In Place Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatIPL);
|
|
ii = ii+1;
|
|
if strcmp(NodoInPlaceLink(1,4),'0-10 V')
|
|
col = col+3;
|
|
else
|
|
col = col+7;
|
|
end
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for In Place Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiInPlaceLink);
|
|
ErrInPlaceLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroIPL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiIPL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
if isempty(RawDate) == 1
|
|
if strcmp(IDcentralina,'ID0075')==1 && strcmp(DTcatena,'DT0117')==1 || ...
|
|
strcmp(IDcentralina,'ID0236')==1 && strcmp(DTcatena,'DT0177')==1
|
|
RawDate = 1;
|
|
end
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiInPlaceLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiInPlaceLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiInPlaceLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiInPlaceLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiInPlaceLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiInPlaceLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiInPlaceLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiInPlaceLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiInPlaceLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of In Place Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroIPL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiIPL)+1 < now
|
|
datainiIPL = datestr(datenum(datainiIPL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesIPL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiInPlaceLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrInPlaceLink(1,jj) = 1;
|
|
wardat = 'Data of In Place Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
% Cerco i multipli di 7 per identificare le temperature
|
|
Int = jj/7;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiInPlaceLink(1,jj)) > 1000
|
|
if rDR==1 && cDR==1 || NuovoZeroIPL == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiIPL)+1 < now
|
|
datainiIPL = datestr(datenum(datainiIPL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesIPL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiInPlaceLink(1,jj-6) = cellstr(num2str(DatiRaw(RawDate(end),jj-5)));
|
|
DatiInPlaceLink(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
|
|
DatiInPlaceLink(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
|
|
DatiInPlaceLink(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiInPlaceLink(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiInPlaceLink(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiInPlaceLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrInPlaceLink(1,jj) = 1;
|
|
wardat = ['Data of In Place Link nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiInPlaceLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiInPlaceLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiInPlaceLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiInPlaceLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiInPlaceLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiInPlaceLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiInPlaceLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiInPlaceLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiInPlaceLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiIPL = datestr(datenum(datainiIPL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiInPlaceLink(indice,jj) = DatiInPlaceLink(indice-1,jj);
|
|
ErrInPlaceLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
for ii = 2:r
|
|
% Cerco i multipli di 7 per identificare le temperature
|
|
Int = jj/7;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiInPlaceLink(ii,jj)) > 1000
|
|
DatiInPlaceLink(ii,jj-6:jj) = DatiInPlaceLink(ii-1,jj-6:jj);
|
|
ErrInPlaceLink(ii,jj) = 1;
|
|
wardat = ['Data of In Place Link nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r % nodi
|
|
check = isnan(cell2mat(DatiInPlaceLink(nnn,jj)));
|
|
if check == 1
|
|
DatiInPlaceLink(nnn,jj) = DatiInPlaceLink(nnn-1,jj);
|
|
ErrInPlaceLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of In Place Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiInPlaceLink = [DATiniIPL str2double(DatiInPlaceLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiInPlaceLink(a,1) == DatiInPlaceLink(a-1,1)
|
|
DatiInPlaceLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroIPL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiInPlaceLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiInPlaceLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiInPlaceLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiInPlaceLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiInPlaceLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiInPlaceLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% In Place Link HR
|
|
if yesIPLHR == 0 % Non ci sono In Place Link HR
|
|
DatiInPlaceLinkHR = [];
|
|
ErrInPlaceLinkHR = [];
|
|
wardat = 'lettura function: there are not In Place Link HR';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-IPLHR-RawData.csv'];
|
|
while NAN == 0
|
|
if datenum(datainiIPLHR) == datenum(Data(1,1))
|
|
tempoiniIPLHR = char(Data(1,2));
|
|
end
|
|
NodeType = 'In Place Link HR';
|
|
NodeNumIPLHR = num2str(cell2mat(NodoInPlaceLinkHR(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiIPLHR ''' and Time >= ''' tempoiniIPLHR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumIPLHR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniIPLHR = curs.Data;
|
|
Ntempo = DATiniIPLHR;
|
|
[r,c] = size(DATiniIPLHR);
|
|
saltoIPLHR = 0;
|
|
if r==1 && c==1
|
|
textdatIPLHR = 'Warning: error reading In Place Link HR (control unit data)!';
|
|
fprintf(fileID,fmt,textdatIPLHR);
|
|
saltoIPLHR = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiIPLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumIPLHR ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2IPLHR = curs.Data;
|
|
Ndate = DAT2IPLHR;
|
|
if saltoIPLHR == 1
|
|
DATiniIPLHR = DAT2IPLHR;
|
|
end
|
|
Check = size(DAT2IPLHR);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoIPLHR == 0
|
|
DATiniIPLHR = [DATiniIPLHR; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniIPLHR);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniIPLHR(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniIPLHR(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniIPLHR = T;
|
|
else
|
|
DATiniIPLHR = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoIPLHR == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
|
|
col = 6;
|
|
DatiInPlaceLinkHR = cell(rd+rt,col*rIPLHR);
|
|
elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
|
|
col = 3;
|
|
DatiInPlaceLinkHR = cell(rd+rt,col*rIPLHR);
|
|
end
|
|
else
|
|
if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
|
|
col = 6;
|
|
DatiInPlaceLinkHR = cell(rt,col*rIPLHR);
|
|
elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
|
|
col = 3;
|
|
DatiInPlaceLinkHR = cell(rt,col*rIPLHR);
|
|
end
|
|
end
|
|
else
|
|
if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
|
|
col = 6;
|
|
DatiInPlaceLinkHR = cell(rd,col*rIPLHR);
|
|
elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
|
|
col = 3;
|
|
DatiInPlaceLinkHR = cell(rd,col*rIPLHR);
|
|
end
|
|
end
|
|
NInPlaceLinkHR = cell2mat(NodoInPlaceLinkHR(:,2));
|
|
w = 0;
|
|
while ii <= rIPLHR
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NInPlaceLinkHR(ii,1);
|
|
if strcmp(DTcatena,'DT0116') && strcmp(IDcentralina,'ID0214')
|
|
if nN == 6
|
|
nN = 1;
|
|
elseif nN == 10
|
|
nN = 18;
|
|
end
|
|
elseif strcmp(DTcatena,'DT0117') && strcmp(IDcentralina,'ID0075')
|
|
if nN == 10
|
|
nN = 3;
|
|
end
|
|
end
|
|
nNodo = num2str(nN);
|
|
if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || ...
|
|
isempty(NodoInPlaceLinkHR{1,4}) == 1
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date = ''' ...
|
|
datainiIPLHR ''' and Time >= ''' tempoiniIPLHR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoIPLHR = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val3, Val4, Val5, Val6 from RawDataView where Date > ''' ...
|
|
datainiIPLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoIPLHRd = curs.Data;
|
|
ini_col = col-5;
|
|
elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
|
|
comando = ['select Val0, Val1, Val2 from RawDataView where Date = ''' ...
|
|
datainiIPLHR ''' and Time >= ''' tempoiniIPLHR ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoIPLHR = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1, Val2 from RawDataView where Date > ''' ...
|
|
datainiIPLHR ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoIPLHRd = curs.Data;
|
|
ini_col = col-2;
|
|
end
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
|
|
if saltoIPLHR == 0
|
|
DatiInPlaceLinkHR(1:rt,ini_col:col) = DATnodoIPLHR(:,:);
|
|
else
|
|
DatiInPlaceLinkHR(1:rd,ini_col:col) = DATnodoIPLHRd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoIPLHRd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoIPLHRd(i,:) = DATnodoIPLHRd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node In Place Link HR ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoIPLHR == 0
|
|
DatiInPlaceLinkHR(rt+1:rt+rd,ini_col:col) = DATnodoIPLHRd(:,:);
|
|
end
|
|
else
|
|
DatiInPlaceLinkHR = DatiInPlaceLinkHR(1:end,:);
|
|
end
|
|
okdatIPLHR= ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rIPLHR) ' In Place Link HR nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatIPLHR);
|
|
ii = ii+1;
|
|
if strcmp(NodoInPlaceLinkHR(1,4),'ADC') || strcmp(NodoInPlaceLinkHR{1,4},'null') || ...
|
|
isempty(NodoInPlaceLinkHR{1,4}) == 1
|
|
col = col+6;
|
|
elseif strcmp(NodoInPlaceLinkHR{1,4} ,'digit')
|
|
col = col+3;
|
|
end
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for In Place Link HR!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiInPlaceLinkHR);
|
|
ErrInPlaceLinkHR = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroIPLHR == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiIPLHR));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
if isempty(RawDate) == 1
|
|
if strcmp(IDcentralina,'ID0075')==1 && strcmp(DTcatena,'DT0117')==1 || ...
|
|
strcmp(IDcentralina,'ID0236')==1 && strcmp(DTcatena,'DT0177')==1
|
|
RawDate = 1;
|
|
end
|
|
end
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiInPlaceLinkHR(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiInPlaceLinkHR(1,jj)));
|
|
idxT = find(strcmp('---',DatiInPlaceLinkHR(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiInPlaceLinkHR(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiInPlaceLinkHR(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiInPlaceLinkHR(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiInPlaceLinkHR(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiInPlaceLinkHR(1,jj)));
|
|
idxN = find(strcmp('null',DatiInPlaceLinkHR(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of In Place Link HR nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroIPLHR == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiIPLHR)+1 < now
|
|
datainiIPLHR = datestr(datenum(datainiIPLHR)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesIPLHR = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiInPlaceLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrInPlaceLinkHR(1,jj) = 1;
|
|
wardat = 'Data of In Place Link HR nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
if strcmp(NodoInPlaceLinkHR(1,3),'ADC') || strcmp(NodoInPlaceLinkHR{1,4} ,'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiInPlaceLinkHR(1,jj)) < 500
|
|
if rDR==1 && cDR==1 || NuovoZeroIPLHR == 0
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiIPLHR)+1 < now
|
|
datainiIPLHR = datestr(datenum(datainiIPLHR)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesIPLHR = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiInPlaceLinkHR(1,jj-5) = cellstr(num2str(DatiRaw(RawDate(end),jj-4)));
|
|
DatiInPlaceLinkHR(1,jj-4) = cellstr(num2str(DatiRaw(RawDate(end),jj-3)));
|
|
DatiInPlaceLinkHR(1,jj-3) = cellstr(num2str(DatiRaw(RawDate(end),jj-2)));
|
|
DatiInPlaceLinkHR(1,jj-2) = cellstr(num2str(DatiRaw(RawDate(end),jj-1)));
|
|
DatiInPlaceLinkHR(1,jj-1) = cellstr(num2str(DatiRaw(RawDate(end),jj)));
|
|
DatiInPlaceLinkHR(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrInPlaceLinkHR(1,jj) = 1;
|
|
wardat = ['Data of In Place Link HR nodes corrected using Raw Data of reference Csv file. '...
|
|
'Electrolytic cell was read as the corresponding MEMS'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiInPlaceLinkHR(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiInPlaceLinkHR(:,jj)));
|
|
idxT = find(strcmp('---',DatiInPlaceLinkHR(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiInPlaceLinkHR(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiInPlaceLinkHR(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiInPlaceLinkHR(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiInPlaceLinkHR(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiInPlaceLinkHR(:,jj)));
|
|
idxN = find(strcmp('null',DatiInPlaceLinkHR(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiIPLHR = datestr(datenum(datainiIPLHR)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiInPlaceLinkHR(indice,jj) = DatiInPlaceLinkHR(indice-1,jj);
|
|
ErrInPlaceLinkHR(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if strcmp(NodoInPlaceLinkHR(1,3),'ADC') || strcmp(NodoInPlaceLinkHR{1,4} ,'null') || isempty(NodoInPlaceLinkHR{1,4}) == 1
|
|
for ii = 2:r
|
|
% Cerco i multipli di 6 per identificare le temperature
|
|
Int = jj/6;
|
|
if floor(Int) == Int
|
|
% Controllo ampolle
|
|
if str2double(DatiInPlaceLinkHR(ii,jj)) < 500
|
|
DatiInPlaceLinkHR(ii,jj-5:jj) = DatiInPlaceLinkHR(ii-1,jj-5:jj);
|
|
ErrInPlaceLinkHR(ii,jj) = 1;
|
|
wardat = ['Data of In Place Link HR nodes corrected using Raw Data of reference Csv file. '...
|
|
'MEMS was read as an electrolytic cell'];
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
ESCI = 0;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiInPlaceLinkHR(nnn,jj)));
|
|
if check == 1
|
|
DatiInPlaceLinkHR(nnn,jj) = DatiInPlaceLinkHR(nnn-1,jj);
|
|
ErrInPlaceLinkHR(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of In Place Link HR data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiInPlaceLinkHR = [DATiniIPLHR str2double(DatiInPlaceLinkHR)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiInPlaceLinkHR(a,1) == DatiInPlaceLinkHR(a-1,1)
|
|
DatiInPlaceLinkHR(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroIPLHR == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiInPlaceLinkHR(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiInPlaceLinkHR(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiInPlaceLinkHR(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiInPlaceLinkHR(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiInPlaceLinkHR;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiInPlaceLinkHR;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Weir Link
|
|
if yesWL == 0 % Non ci sono Stress Meter
|
|
DatiWeirLink = [];
|
|
DatiNTCWeirLink = [];
|
|
ErrWeirLink = [];
|
|
wardat = 'lettura function: there are not Weir Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
ChWL = cell2mat(NodoWeirLink(:,5));
|
|
Therm = cell2mat(NodoWeirLink(:,6));
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-Weir-RawData.csv']; % Specifico per Weir Link
|
|
RawDataFileNTC = ['' IDcentralina '-' DTcatena '-NTCWeir-RawData.csv'];
|
|
NAN = 0;
|
|
DIS = 0;
|
|
while NAN == 0
|
|
if datenum(datainiWL) == datenum(Data(1,1))
|
|
tempoiniWL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Weir Link';
|
|
NodeNumWL = num2str(cell2mat(NodoWeirLink(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiWL ''' and Time >= ''' tempoiniWL ''' and UnitName = ''' IDcentralina...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum = ''' NodeNumWL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniWL = curs.Data;
|
|
Ntempo = DATiniWL;
|
|
[r,c] = size(DATiniWL);
|
|
saltoWL = 0;
|
|
if r==1 && c==1
|
|
textdatWL = 'Warning: error reading Weir Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatWL);
|
|
saltoWL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiWL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumWL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2WL = curs.Data;
|
|
Ndate = DAT2WL;
|
|
if saltoWL == 1
|
|
DATiniWL = DAT2WL;
|
|
end
|
|
Check = size(DAT2WL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
if saltoWL == 0
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
DATiniWL = [DATiniWL; DAT2WL];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniWL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniWL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniWL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniWL = T;
|
|
else
|
|
DATiniWL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
[rd,~] = size(Ndate); % numero di dati successivi al primo giorno di calcolo
|
|
[rt,~] = size(Ntempo); % numero di dati del primo giorno di calcolo
|
|
% creo la matrice per i dati Extensometer Link
|
|
if saltoWL == 0
|
|
if Check(1,2) > 1
|
|
DatiWeirLink = cell(rd+rt,rWL);
|
|
DatiNTCWeirLink = cell(rd+rt,rWL);
|
|
else
|
|
DatiWeirLink = cell(rt,rWL);
|
|
DatiNTCWeirLink = cell(rt,rWL);
|
|
end
|
|
else
|
|
DatiWeirLink = cell(rd,rWL);
|
|
DatiNTCWeirLink = cell(rd,rWL);
|
|
end
|
|
NWeir = cell2mat(NodoWeirLink(:,2));
|
|
col = 1;
|
|
ii = 1;
|
|
w = 0;
|
|
while ii <= rWL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NWeir(ii,1);
|
|
nNodo = num2str(nN);
|
|
% Dato
|
|
comando = ['select Val0 from RawDataView where Date = ''' ...
|
|
datainiWL ''' and Time >= ''' tempoiniWL ''' and ToolNameID = ''' ...
|
|
DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoWL = curs.Data;
|
|
% Dato
|
|
comando = ['select Val0 from RawDataView where Date > ''' ...
|
|
datainiWL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
|
|
NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoWLd = curs.Data;
|
|
if Therm(ii) == 0 % Non leggo il termometro
|
|
% T
|
|
DATnodoWL_NTC = 0;
|
|
DATnodoWLd_NTC = 0;
|
|
elseif Therm(ii) == 1
|
|
if ChWL(ii,1) == 2
|
|
comando = ['select Val1 from RawDataView where Date = ''' ...
|
|
datainiWL ''' and Time >= ''' tempoiniWL ''' and ToolNameID = ''' ...
|
|
DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
elseif ChWL(ii,1) == 3
|
|
comando = ['select Val2 from RawDataView where Date = ''' ...
|
|
datainiWL ''' and Time >= ''' tempoiniWL ''' and ToolNameID = ''' ...
|
|
DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
elseif ChWL(ii,1) == 4
|
|
comando = ['select Val3 from RawDataView where Date = ''' ...
|
|
datainiWL ''' and Time >= ''' tempoiniWL ''' and ToolNameID = ''' ...
|
|
DTcatena ''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
end
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoWL_NTC = curs.Data;
|
|
if ChWL(ii,1) == 2
|
|
comando = ['select Val1 from RawDataView where Date > ''' ...
|
|
datainiWL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
|
|
NodeType ''' and NodeNum = ' nNodo ''];
|
|
elseif ChWL(ii,1) == 3
|
|
comando = ['select Val2 from RawDataView where Date > ''' ...
|
|
datainiWL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
|
|
NodeType ''' and NodeNum = ' nNodo ''];
|
|
elseif ChWL(ii,1) == 4
|
|
comando = ['select Val3 from RawDataView where Date > ''' ...
|
|
datainiWL ''' and UnitName = ''' IDcentralina ...
|
|
''' and ToolNameID = ''' DTcatena ''' and NodeType = '''...
|
|
NodeType ''' and NodeNum = ' nNodo ''];
|
|
end
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoWLd_NTC = curs.Data;
|
|
else
|
|
% T
|
|
DATnodoWL_NTC = 0;
|
|
DATnodoWLd_NTC = 0;
|
|
end
|
|
|
|
[rn,~] = size(DATnodoWLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoWLd(i,:) = DATnodoWLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Weir Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
[rnT,~] = size(DATnodoWLd_NTC); % controllo date
|
|
if rnT < rd % normalmente sono uguali
|
|
for i = rnT+1:rd
|
|
DATnodoWLd_NTC(i,:) = DATnodoWLd_NTC(rnT,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['NTC of Node Weir Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoWL == 0
|
|
if ChWL(ii,1) >= 2
|
|
if Therm(ii,1)==1
|
|
DatiWeirLink(1:rt,col) = DATnodoWL(:,:); %#ok<*AGROW>
|
|
DatiNTCWeirLink(1:rt,col) = DATnodoWL_NTC(:,:); %#ok<*AGROW>
|
|
if Check(1,2) > 1
|
|
[rrr,~] = size(DATnodoWLd);
|
|
if rrr ~= rd
|
|
DatiWeirLink(rt+rd-rrr+1:rt+rd,col) = DATnodoWLd;
|
|
DatiNTCWeirLink(rt+rd-rrr+1:rt+rd,col) = DATnodoWLd_NTC; %#ok<*AGROW>
|
|
else
|
|
DatiWeirLink(rt+1:rt+rd,col) = DATnodoWLd(:,:);
|
|
DatiNTCWeirLink(rt+1:rt+rd,col) = DATnodoWLd_NTC(:,:); %#ok<*AGROW>
|
|
end
|
|
end
|
|
else
|
|
DatiWeirLink(1:rt,col) = DATnodoWL(:,:); %#ok<*AGROW>
|
|
if Check(1,2) > 1
|
|
DatiWeirLink(rt+1:rt+rd,col) = DATnodoWLd(:,:);
|
|
end
|
|
end
|
|
elseif ChWL(ii,1) == 1
|
|
DatiWeirLink(1:rt,col) = DATnodoWL(:,:); %#ok<*AGROW>
|
|
if Check(1,2) > 1
|
|
DatiWeirLink(rt+1:rt+rd,col) = DATnodoWLd(:,:);
|
|
end
|
|
end
|
|
else
|
|
if ChWL(ii,1) >= 2
|
|
if Therm(ii,1)==1
|
|
DatiWeirLink(1:rd,col) = DATnodoWL(:,:); %#ok<*AGROW>
|
|
DatiNTCWeirLink(1:rd,col) = DATnodoWL_NTC(:,:); %#ok<*AGROW>
|
|
else
|
|
DatiWeirLink(1:rd,col) = DATnodoWL(:,:); %#ok<*AGROW>
|
|
end
|
|
elseif ChWL(ii,1) == 1
|
|
DatiWeirLink(1:rd,col) = DATnodoWL(:,:); %#ok<*AGROW>
|
|
end
|
|
end
|
|
|
|
okdatWL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rWL) ' Weir Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatWL);
|
|
ii = ii+1;
|
|
col = col+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Weir Link!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
|
|
% Dati
|
|
[r,c] = size(DatiWeirLink);
|
|
ErrWeirLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroWL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiWL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
|
|
for jj=1:c
|
|
% Se il nodo è Dis., devo aumentare di uno la data (il nodo non
|
|
% è ancora stato installato!)
|
|
if strcmp('Dis.',DatiWeirLink(1,jj)) == 1
|
|
for dis = 2:r
|
|
if strcmp('Dis.',DatiWeirLink(dis,jj)) == 0
|
|
DatiWeirLink = DatiWeirLink(dis:end,:);
|
|
DATiniWL = DATiniWL(dis:end,:);
|
|
[r,c] = size(DatiWeirLink);
|
|
break
|
|
elseif isfile(RawDataFile) == 1
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiWeirLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrWeirLink(1,jj) = 1;
|
|
wardat = 'Data of Weir Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
DIS = 0;
|
|
break
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiWL)+1 < now
|
|
datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesWL = 0;
|
|
end
|
|
end
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiWL)+1 < now
|
|
datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesWL = 0;
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
if DIS ~= 1 && yesWL == 1
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiWeirLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiWeirLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiWeirLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiWeirLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiWeirLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiWeirLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiWeirLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiWeirLink(1,jj)));
|
|
idxRX = find(strcmp('No RX',DatiWeirLink(1,jj)));
|
|
idxI = find(strcmp('id Error',DatiWeirLink(1,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiWeirLink(1,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiWeirLink(1,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiWeirLink(1,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiWeirLink(1,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiWeirLink(1,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiWeirLink(1,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiWeirLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiWeirLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxND);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Stress Meter nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroWL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiWL)+1 < now
|
|
datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesWL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiWeirLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrWeirLink(1,jj) = 1;
|
|
wardat = 'Data of Weir Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiWeirLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiWeirLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiWeirLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiWeirLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiWeirLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiWeirLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiWeirLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiWeirLink(:,jj)));
|
|
idxRX = find(strcmp('No RX',DatiWeirLink(:,jj)));
|
|
idxI = find(strcmp('id Error',DatiWeirLink(:,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiWeirLink(:,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiWeirLink(:,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiWeirLink(:,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiWeirLink(:,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiWeirLink(:,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiWeirLink(:,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiWeirLink(:,jj)));
|
|
idxDis = find(strcmp('Dis.',DatiWeirLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiWeirLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxDis);
|
|
idx = union(idx,idxND);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiWeirLink(indice,jj) = DatiWeirLink(indice-1,jj);
|
|
ErrWeirLink(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiWeirLink(nnn,jj)));
|
|
if check == 1
|
|
DatiWeirLink(nnn,jj) = DatiWeirLink(nnn-1,jj);
|
|
ErrWeirLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Weir Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiWeirLink = [DATiniWL str2double(DatiWeirLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiWeirLink(a,1) == DatiWeirLink(a-1,1)
|
|
DatiWeirLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if ESCI == 0
|
|
if sum(Therm(:,1))>0
|
|
if DIS ~= 1 && yesWL == 1
|
|
% NTC
|
|
[r,c] = size(DatiNTCWeirLink);
|
|
Ncorr = 0;
|
|
if NuovoZeroWL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRawNTC = csvread(RawDataFileNTC);
|
|
[rDR,cDR] = size(DatiRawNTC);
|
|
DatiRawNTC(:,1) = DatiRawNTC(:,1) + 730000;
|
|
RawDateNTC = find(DatiRawNTC(:,1)<=datenum(datainiWL));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
DatiRawNTC = [];
|
|
RawDateNTC = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDateNTC = [];
|
|
DatiRawNTC = [];
|
|
end
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiNTCWeirLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiNTCWeirLink(1,jj)));
|
|
idxT3 = find(strcmp('---',DatiNTCWeirLink(1,jj)));
|
|
idxT = find(strcmp('-',DatiNTCWeirLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiNTCWeirLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiNTCWeirLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiNTCWeirLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiNTCWeirLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiNTCWeirLink(1,jj)));
|
|
idxRX = find(strcmp('No RX',DatiNTCWeirLink(1,jj)));
|
|
idxI = find(strcmp('id Error',DatiNTCWeirLink(1,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiNTCWeirLink(1,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiNTCWeirLink(1,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiNTCWeirLink(1,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiNTCWeirLink(1,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiNTCWeirLink(1,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiNTCWeirLink(1,jj)));
|
|
idxDis = find(strcmp('Dis.',DatiNTCWeirLink(1,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiNTCWeirLink(1,jj)));
|
|
idx = union(idxE,idxT3);
|
|
idx = union(idx,idxT);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxDis);
|
|
idx = union(idx,idxNA);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of NTC of Weir Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroWL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiWL)+1 < now
|
|
datainiWL = datestr(datenum(datainiWL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesWL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDateNTC) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiNTCWeirLink(1,jj) = cellstr(num2str(DatiRawNTC(RawDateNTC(end),jj+1)));
|
|
if ErrWeirLink(indice,jj) == 0
|
|
ErrWeirLink(indice,jj) = 0.5;
|
|
else
|
|
ErrWeirLink(indice,jj) = 1;
|
|
end
|
|
wardat = 'Data of NTC of Weir Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiNTCWeirLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiNTCWeirLink(:,jj)));
|
|
idxT3 = find(strcmp('---',DatiNTCWeirLink(:,jj)));
|
|
idxT = find(strcmp('-',DatiNTCWeirLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiNTCWeirLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiNTCWeirLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiNTCWeirLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiNTCWeirLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiNTCWeirLink(:,jj)));
|
|
idxRX = find(strcmp('No RX',DatiNTCWeirLink(:,jj)));
|
|
idxI = find(strcmp('id Error',DatiNTCWeirLink(:,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiNTCWeirLink(:,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiNTCWeirLink(:,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiNTCWeirLink(:,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiNTCWeirLink(:,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiNTCWeirLink(:,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiNTCWeirLink(:,jj)));
|
|
idxDis = find(strcmp('Dis.',DatiNTCWeirLink(:,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiNTCWeirLink(:,jj)));
|
|
idx = union(idxE,idxT3);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxT);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxDis);
|
|
idx = union(idx,idxNA);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiWL = datestr(datenum(datainiWL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
DatiNTCWeirLink(indice,jj) = DatiNTCWeirLink(indice-1,jj);
|
|
if ErrWeirLink(indice,jj) == 0
|
|
ErrWeirLink(indice,jj) = 0.5;
|
|
else
|
|
ErrWeirLink(indice,jj) = 1;
|
|
end
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiNTCWeirLink(nnn,jj)));
|
|
if check == 1
|
|
DatiNTCWeirLink(nnn,jj) = DatiNTCWeirLink(nnn-1,jj);
|
|
if ErrWeirLink(indice,jj) == 0
|
|
ErrWeirLink(indice,jj) = 0.5;
|
|
else
|
|
ErrWeirLink(indice,jj) = 1;
|
|
end
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of NTC Weir Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiNTCWeirLink = [DATiniWL str2double(DatiNTCWeirLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiNTCWeirLink(a,1) == DatiNTCWeirLink(a-1,1)
|
|
DatiNTCWeirLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroWL == 1 && yesWL == 1
|
|
[rDR,cDR] = size(DatiRaw);
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiWeirLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiWeirLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiWeirLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiWeirLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiWeirLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
if sum(Therm(:,1))>0
|
|
[rDR,cDR] = size(DatiRawNTC);
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRawNTC) == 0
|
|
RawDate1 = find(DatiRawNTC(:,1)<=DatiNTCWeirLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiNTCWeirLink(:,1)>DatiRawNTC(end,1));
|
|
else
|
|
RawDate2 = find(DatiNTCWeirLink(:,1)>DatiRawNTC(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
DatiNTC = [DatiRawNTC(1:RawDate1(end),:);DatiNTCWeirLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
DatiNTC = DatiNTCWeirLink;
|
|
else
|
|
DatiNTC = DatiRawNTC;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(DatiNTC(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(DatiNTC);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
DatiNTC = DatiNTC(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFileNTC) == 1
|
|
delete(RawDataFileNTC);
|
|
end
|
|
end
|
|
else
|
|
Dati = DatiWeirLink;
|
|
if sum(Therm(:,1))>0
|
|
DatiNTC = DatiNTCWeirLink;
|
|
end
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
if sum(Therm(:,1))>0
|
|
DatiNTC(:,1) = DatiNTC(:,1) - 730000;
|
|
csvwrite(RawDataFileNTC,DatiNTC);
|
|
end
|
|
end
|
|
|
|
%% Pendulum
|
|
if yesPE == 0 % Non ci sono Pendulum
|
|
DatiPendulum = [];
|
|
ErrPendulum = [];
|
|
wardat = 'lettura function: there are not Pendulum';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-PE-RawData.csv'];
|
|
ChPE = cell2mat(NodoPendulum(:,5));
|
|
while NAN == 0
|
|
if datenum(datainiPE) == datenum(Data(1,1))
|
|
tempoiniPE = char(Data(1,2));
|
|
end
|
|
NodeType = 'Pendulum';
|
|
NodeNumPE = num2str(cell2mat(NodoPendulum(1,2))); % scarico i dati del primo nodo
|
|
% Scarico dei dati relativi alla centralina con informazioni di Data e ora, livello batteria e temperatura
|
|
% Step 1 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date = ''' ...
|
|
datainiPE ''' and Time >= ''' tempoiniPE ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumPE ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniPE = curs.Data;
|
|
Ntempo = DATiniPE;
|
|
[r,c] = size(DATiniPE);
|
|
saltoPE = 0;
|
|
if r==1 && c==1
|
|
textdatPE = 'Warning: error reading Pendulum (control unit data)!';
|
|
fprintf(fileID,fmt,textdatPE);
|
|
saltoPE = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiPE ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumPE ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2PE = curs.Data;
|
|
Ndate = DAT2PE;
|
|
if saltoPE == 1
|
|
DATiniPE = DAT2PE;
|
|
end
|
|
Check = size(DAT2PE);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoPE == 0
|
|
DATiniPE = [DATiniPE; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniPE);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniPE(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniPE(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniPE = T;
|
|
else
|
|
DATiniPE = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoPE == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiPendulum = cell(rd+rt,rPE);
|
|
else
|
|
DatiPendulum = cell(rt,rPE);
|
|
end
|
|
else
|
|
DatiPendulum = cell(rd,rPE);
|
|
end
|
|
NPendulum = cell2mat(NodoPendulum(:,2));
|
|
w = 0;
|
|
col = 1;
|
|
while ii <= rPE
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NPendulum(ii,1);
|
|
nNodo = num2str(nN);
|
|
if ChPE == 2
|
|
comando = ['select Val0, Val1 from RawDataView where Date = ''' ...
|
|
datainiPE ''' and Time >= ''' tempoiniPE ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPE = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val1 from RawDataView where Date > ''' ...
|
|
datainiPE ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPEd = curs.Data;
|
|
elseif ChPE == 4
|
|
comando = ['select Val0, Val2 from RawDataView where Date = ''' ...
|
|
datainiPE ''' and Time >= ''' tempoiniPE ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPE = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val0, Val2 from RawDataView where Date > ''' ...
|
|
datainiPE ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoPEd = curs.Data;
|
|
end
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
|
|
if saltoPE == 0
|
|
DatiPendulum(1:rt,col:col+1) = DATnodoPE;
|
|
else
|
|
DatiPendulum(1:rd,col:col+1) = DATnodoPEd;
|
|
end
|
|
|
|
[rn,~] = size(DATnodoPEd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoPEd(i,:) = DATnodoPEd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Pendulum ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoPE == 0
|
|
DatiPendulum(rt+1:rt+rd,col:col+1) = DATnodoPEd;
|
|
end
|
|
else
|
|
DatiPendulum = DatiPendulum(1:end,:);
|
|
end
|
|
okdatPE = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rPE) ' Pendulum nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatPE);
|
|
ii = ii+1;
|
|
col = col+2;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Pendulum!';
|
|
fprintf(fileID,fmt,wardat);
|
|
end
|
|
|
|
% Controllo gli eventuali errori ('Err1' o '---') e li rimuovo,
|
|
% rimpiazzandoli con l'ultimo dato disponibile di quel nodo
|
|
[r,c] = size(DatiPendulum);
|
|
ErrPendulum = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
DIS = 0;
|
|
if NuovoZeroPE == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiPE));
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
DatiRaw = [];
|
|
end
|
|
else
|
|
rDR = 1;
|
|
cDR = 1;
|
|
RawDate = [];
|
|
end
|
|
for jj=1:c
|
|
% Se il nodo è Dis., devo aumentare di uno la data (il nodo non
|
|
% è ancora stato installato!)
|
|
if strcmp('Dis.',DatiPendulum(1,jj)) == 1
|
|
for dis = 2:r
|
|
if strcmp('Dis.',DatiPendulum(dis,jj)) == 0
|
|
DatiPendulum = DatiPendulum(dis:end,:);
|
|
DATiniPE = DATiniPE(dis:end,:);
|
|
[r,c] = size(DatiPendulum);
|
|
break
|
|
elseif isfile(RawDataFile) == 1
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiPendulum(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrPendulum(1,jj) = 1;
|
|
wardat = 'Data of Pendulum nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
DIS = 0;
|
|
break
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiPE)+1 < now
|
|
datainiPE = datestr(datenum(datainiPE)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPE = 0;
|
|
end
|
|
end
|
|
elseif dis == r
|
|
NAN = 0;
|
|
DIS = 1;
|
|
if datenum(datainiPE)+1 < now
|
|
datainiPE = datestr(datenum(datainiPE)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPE = 0;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if DIS ~= 1 && yesPE == 1
|
|
% --- Codice per il primo dato ---
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiPendulum(1,jj)));
|
|
idxT = find(strcmp('---',DatiPendulum(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiPendulum(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiPendulum(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiPendulum(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiPendulum(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiPendulum(1,jj)));
|
|
idxN = find(strcmp('null',DatiPendulum(1,jj)));
|
|
idxRX = find(strcmp('No RX',DatiPendulum(1,jj)));
|
|
idxI = find(strcmp('id Error',DatiPendulum(1,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiPendulum(1,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiPendulum(1,jj)));
|
|
idxCE = find(strcmp('CH n. Er',DatiPendulum(1,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiPendulum(1,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiPendulum(1,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiPendulum(1,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiPendulum(1,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiPendulum(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiPendulum(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxCE);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxND);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Pendulum nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroPE == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiPE)+1 < now
|
|
datainiPE = datestr(datenum(datainiPE)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesPE = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiPE = datestr(datenum(datainiPE)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiPendulum(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrPendulum(1,jj) = 1;
|
|
wardat = 'Data of Pendulum nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiPE = datestr(datenum(datainiPE)-1,'yyyy-mm-dd');
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if ESCI == 0
|
|
for jj=1:c
|
|
% Trovo l'indice della cella contenenti una determinata stringa.
|
|
idxE = find(strcmp('Err1',DatiPendulum(:,jj)));
|
|
idxT = find(strcmp('---',DatiPendulum(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiPendulum(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiPendulum(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiPendulum(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiPendulum(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiPendulum(:,jj)));
|
|
idxN = find(strcmp('null',DatiPendulum(:,jj)));
|
|
idxRX = find(strcmp('No RX',DatiPendulum(:,jj)));
|
|
idxI = find(strcmp('id Error',DatiPendulum(:,jj)));
|
|
idxM = find(strcmp('MUX id Error',DatiPendulum(:,jj)));
|
|
idxC = find(strcmp('CH n. Error',DatiPendulum(:,jj)));
|
|
idxCE = find(strcmp('CH n. Er',DatiPendulum(:,jj)));
|
|
idxU = find(strcmp('Unknown Error',DatiPendulum(:,jj)));
|
|
idxMC = find(strcmp('MsgCorrup',DatiPendulum(:,jj)));
|
|
idxNS = find(strcmp('NotSupp',DatiPendulum(:,jj)));
|
|
idxU2 = find(strcmp('Unknown',DatiPendulum(:,jj)));
|
|
idxNA = find(strcmp('NotAv',DatiPendulum(:,jj)));
|
|
idxDis = find(strcmp('Dis.',DatiPendulum(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiPendulum(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxCE);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
idx = union(idx,idxRX);
|
|
idx = union(idx,idxI);
|
|
idx = union(idx,idxM);
|
|
idx = union(idx,idxC);
|
|
idx = union(idx,idxU);
|
|
idx = union(idx,idxMC);
|
|
idx = union(idx,idxNS);
|
|
idx = union(idx,idxU2);
|
|
idx = union(idx,idxNA);
|
|
idx = union(idx,idxDis);
|
|
idx = union(idx,idxND);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiPE = datestr(datenum(datainiPE)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiPendulum(indice,jj) = DatiPendulum(indice-1,jj);
|
|
ErrPendulum(indice,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
end
|
|
end
|
|
if ESCI == 1
|
|
NAN = 0;
|
|
break
|
|
end
|
|
% Elimino gli eventuali Not a Number
|
|
for nnn = 2:r
|
|
check = isnan(cell2mat(DatiPendulum(nnn,jj)));
|
|
if check == 1
|
|
DatiPendulum(nnn,jj) = DatiPendulum(nnn-1,jj);
|
|
ErrPendulum(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Pendulum data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiPendulum = [DATiniPE str2double(DatiPendulum)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiPendulum(a,1) == DatiPendulum(a-1,1)
|
|
DatiPendulum(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroPE == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiPendulum(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiPendulum(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiPendulum(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiPendulum(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiPendulum;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiPendulum;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
%% Snow Link
|
|
if yesSL == 0 % Non ci sono Snow Link
|
|
DatiSnowLink = [];
|
|
ErrSnowLink = [];
|
|
wardat = 'lettura function: there are not Snow Link';
|
|
fprintf(fileID,fmt,wardat);
|
|
else
|
|
NAN = 0;
|
|
RawDataFile = ['' IDcentralina '-' DTcatena '-SL-RawData.csv']; % Generico per MUMS
|
|
while NAN == 0
|
|
if datenum(datainiSL) == datenum(Data(1,1))
|
|
tempoiniSL = char(Data(1,2));
|
|
end
|
|
NodeType = 'Snow Link';
|
|
NodeNumSL = num2str(cell2mat(NodoSnowLink(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 = ''' ...
|
|
datainiSL ''' and Time >= ''' tempoiniSL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' NodeType...
|
|
''' and NodeNum = ''' NodeNumSL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATiniSL = curs.Data;
|
|
Ntempo = DATiniSL;
|
|
[r,c] = size(DATiniSL);
|
|
saltoSL = 0;
|
|
if r==1 && c==1
|
|
textdatSL = 'Warning: error reading Snow Link (control unit data)!';
|
|
fprintf(fileID,fmt,textdatSL);
|
|
saltoSL = 1;
|
|
end
|
|
% Step 2 (vedi commento più avanti)
|
|
comando = ['select Date, Time from RawDataView where Date > ''' ...
|
|
datainiSL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ''' NodeNumSL ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DAT2SL = curs.Data;
|
|
Ndate = DAT2SL;
|
|
if saltoSL == 1
|
|
DATiniSL = DAT2SL;
|
|
end
|
|
Check = size(DAT2SL);
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
% Concateno le informazioni relative a Step 1 e 2 (se necessario...)
|
|
if saltoSL == 0
|
|
DATiniSL = [DATiniSL; curs.Data];
|
|
end
|
|
end
|
|
% Modifico il formato di data e ora in DATini.
|
|
[rD,cD] = size(DATiniSL);
|
|
if cD ~=1
|
|
T = [cell2mat(DATiniSL(:,1)) repmat(' ', [rD,1]) cell2mat(DATiniSL(:,2))];
|
|
T = datenum(T);
|
|
% Converto da Cell Array a Matrice.
|
|
DATiniSL = T;
|
|
else
|
|
DATiniSL = [];
|
|
end
|
|
|
|
% Scarico dati relativi ai singoli nodi
|
|
ii = 1;
|
|
[rd,~] = size(Ndate);
|
|
[rt,~] = size(Ntempo);
|
|
if saltoSL == 0
|
|
if Check(1,2) > 1 % ho superato il primo giorno
|
|
DatiSnowLink = cell(rd+rt,1*rSL);
|
|
else
|
|
DatiSnowLink = cell(rt,1*rSL);
|
|
end
|
|
else
|
|
DatiSnowLink = cell(rd,1*rSL);
|
|
end
|
|
NSnowLink = cell2mat(NodoSnowLink(:,2));
|
|
col = 1;
|
|
w = 0;
|
|
while ii <= rSL
|
|
% Step 1: Acquisisco i dati registrati successivamente all'ultimo scarico,
|
|
% ma limitandomi a quelli registrati nel corso di quella singola giornata;
|
|
nN = NSnowLink(ii,1);
|
|
nNodo = num2str(nN);
|
|
comando = ['select Val1 from RawDataView where Date = ''' ...
|
|
datainiSL ''' and Time >= ''' tempoiniSL ''' and ToolNameID = ''' DTcatena...
|
|
''' and UnitName = ''' IDcentralina ''' and NodeType = ''' ...
|
|
NodeType ''' and NodeNum =' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoSL = curs.Data;
|
|
% Step 2: Considero le date successive e scarico tutti i dati disponibili.
|
|
comando = ['select Val1 from RawDataView where Date > ''' ...
|
|
datainiSL ''' and ToolNameID = ''' DTcatena ''' and UnitName = ''' IDcentralina...
|
|
''' and NodeType = ''' NodeType ''' and NodeNum = ' nNodo ''];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
DATnodoSLd = curs.Data;
|
|
|
|
% DATnodo è la matrice che raccoglie i dati dell' ii-esimo nodo,
|
|
% DATnodi è la matrice che concatena i dati relativi a ciascun nodo.
|
|
if saltoRL == 0
|
|
DatiSnowLink(1:rt,col) = DATnodoSL(:,:);
|
|
else
|
|
DatiSnowLink(1:rd,col) = DATnodoSLd(:,:);
|
|
end
|
|
|
|
[rn,~] = size(DATnodoSLd); % controllo date
|
|
if rn < rd % normalmente sono uguali
|
|
for i = rn+1:rd
|
|
DATnodoSLd(i,:) = DATnodoSLd(rn,:); % se mancano dati, copio gli ultimi
|
|
end
|
|
wardat = ['Node Snow Link ' num2str(ii) ' does NOT work!'];
|
|
fprintf(fileID,fmt,wardat);
|
|
w = 1;
|
|
end
|
|
|
|
if Check(1,2) > 1
|
|
if saltoSL == 0
|
|
DatiSnowLink(rt+1:rt+rd,col) = DATnodoSLd(:,:);
|
|
end
|
|
else
|
|
DatiSnowLink = DatiSnowLink(1:end,:);
|
|
end
|
|
okdatSL = ['Data of node number ' num2str(ii) ' of ' ...
|
|
num2str(rSL) ' Snow Link nodes downloaded correctly'];
|
|
fprintf(fileID,fmt,okdatSL);
|
|
ii = ii+1;
|
|
col = col+1;
|
|
end
|
|
if w == 0
|
|
wardat = 'There are not warning for Snow 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(DatiSnowLink);
|
|
ErrSnowLink = zeros(r,c);
|
|
Ncorr = 0;
|
|
ESCI = 0;
|
|
NAN = 1;
|
|
if NuovoZeroSL == 1
|
|
if isfile(RawDataFile) == 1
|
|
DatiRaw = csvread(RawDataFile);
|
|
[rDR,cDR] = size(DatiRaw);
|
|
DatiRaw(:,1) = DatiRaw(:,1) + 730000;
|
|
RawDate = find(DatiRaw(:,1)<=datenum(datainiSL));
|
|
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',DatiSnowLink(1,jj)));
|
|
idxND = find(strcmp('No Data',DatiSnowLink(1,jj)));
|
|
idxT = find(strcmp('---',DatiSnowLink(1,jj)));
|
|
idxT2 = find(strcmp('-',DatiSnowLink(1,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiSnowLink(1,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiSnowLink(1,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiSnowLink(1,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiSnowLink(1,jj)));
|
|
idxN = find(strcmp('null',DatiSnowLink(1,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
if ri == 1
|
|
wardat = 'Warning on the correction of Snow Link nodes: there are not data at the beginning of the array!';
|
|
fprintf(fileID,fmt,wardat);
|
|
if rDR==1 && cDR==1 || NuovoZeroSL == 0 % il file non è mai stato scritto, cerco la data precedente
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
if datenum(datainiSL)+1 < now
|
|
datainiSL = datestr(datenum(datainiSL)+1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
yesSL = 0;
|
|
end
|
|
else
|
|
if isempty(RawDate) == 1
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiSL = datestr(datenum(datainiSL)-1,'yyyy-mm-dd');
|
|
break
|
|
else
|
|
if isnan(DatiRaw(RawDate(end),jj+1)) == 0
|
|
DatiSnowLink(1,jj) = cellstr(num2str(DatiRaw(RawDate(end),jj+1)));
|
|
ErrSnowLink(1,jj) = 1;
|
|
wardat = 'Data of Snow Link nodes corrected using Raw Data of reference Csv file.';
|
|
fprintf(fileID,fmt,wardat);
|
|
Ncorr = Ncorr+ri;
|
|
NAN = 1;
|
|
else
|
|
NAN = 0;
|
|
ESCI = 1;
|
|
datainiSL = datestr(datenum(datainiSL)-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',DatiSnowLink(:,jj)));
|
|
idxND = find(strcmp('No Data',DatiSnowLink(:,jj)));
|
|
idxT = find(strcmp('---',DatiSnowLink(:,jj)));
|
|
idxT2 = find(strcmp('-',DatiSnowLink(:,jj)));
|
|
idxE2 = find(strcmp('Err2',DatiSnowLink(:,jj)));
|
|
idxE255 = find(strcmp('Err255',DatiSnowLink(:,jj)));
|
|
idxD = find(strcmp('DMUXe',DatiSnowLink(:,jj)));
|
|
idxE1F = find(strcmp('Err1File',DatiSnowLink(:,jj)));
|
|
idxN = find(strcmp('null',DatiSnowLink(:,jj)));
|
|
idx = union(idxE,idxT);
|
|
idx = union(idx,idxT2);
|
|
idx = union(idx,idxND);
|
|
idx = union(idx,idxE2);
|
|
idx = union(idx,idxE255);
|
|
idx = union(idx,idxD);
|
|
idx = union(idx,idxE1F);
|
|
idx = union(idx,idxN);
|
|
[ri,~] = size(idx);
|
|
for kk=1:ri
|
|
indice=idx(kk);
|
|
if indice == 1
|
|
datainiSL = datestr(datenum(datainiSL)-1,'yyyy-mm-dd');
|
|
ESCI = 1;
|
|
NAN = 0;
|
|
break
|
|
else
|
|
DatiSnowLink(indice,jj) = DatiSnowLink(indice-1,jj);
|
|
ErrSnowLink(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(DatiSnowLink(nnn,jj)));
|
|
if check == 1
|
|
DatiSnowLink(nnn,jj) = DatiSnowLink(nnn-1,jj);
|
|
ErrSnowLink(nnn,jj) = 1;
|
|
Ncorr = Ncorr+ri;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
corrdat = ['' num2str(Ncorr) ' corrections of Snow Link data done!'];
|
|
fprintf(fileID,fmt,corrdat);
|
|
% Concateno informazioni generali e/o letture dai nodi.
|
|
DatiSnowLink = [DATiniSL str2double(DatiSnowLink)];
|
|
% Elimino eventuali date doppie
|
|
a = 2;
|
|
while a <= r
|
|
if DatiSnowLink(a,1) == DatiSnowLink(a-1,1)
|
|
DatiSnowLink(a,:) = [];
|
|
r = r-1;
|
|
else
|
|
a = a+1;
|
|
end
|
|
end
|
|
end
|
|
if NuovoZeroSL == 1
|
|
if rDR~=1 && cDR~=1 && isempty(DatiRaw) == 0
|
|
RawDate1 = find(DatiRaw(:,1)<=DatiSnowLink(1,1));
|
|
if isempty(RawDate1) == 1
|
|
RawDate2 = 1;
|
|
elseif RawDate1(end) == rDR
|
|
RawDate2 = find(DatiSnowLink(:,1)>DatiRaw(end,1));
|
|
else
|
|
RawDate2 = find(DatiSnowLink(:,1)>DatiRaw(RawDate1(end)+1,1));
|
|
end
|
|
else
|
|
RawDate1 = [];
|
|
RawDate2 = 1;
|
|
end
|
|
if isempty(RawDate1) == 0 && isempty(RawDate2) == 0
|
|
Dati = [DatiRaw(1:RawDate1(end),:);DatiSnowLink(RawDate2(1):end,:)];
|
|
elseif isempty(RawDate1) == 1 && isempty(RawDate2) == 0
|
|
Dati = DatiSnowLink;
|
|
else
|
|
Dati = DatiRaw;
|
|
end
|
|
% Elimino appoggio più vecchio di un mese
|
|
RawDate3 = find(Dati(:,1)<now-30);
|
|
if isempty(RawDate3) == 0
|
|
[rDati,~] = size(Dati);
|
|
if RawDate3(end) == rDati
|
|
else
|
|
Dati = Dati(RawDate3(end)+1:end,:);
|
|
end
|
|
end
|
|
if isfile(RawDataFile) == 1
|
|
delete(RawDataFile);
|
|
end
|
|
else
|
|
Dati = DatiSnowLink;
|
|
end
|
|
Dati(:,1) = Dati(:,1) - 730000;
|
|
csvwrite(RawDataFile,Dati);
|
|
end
|
|
|
|
text = 'lettura function executed correctly';
|
|
fprintf(fileID,fmt,text);
|
|
fclose(fileID);
|
|
|
|
end |