Files
matlab-python/Tilt/lettura.m

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