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