Files
matlab-python/RSN/lettura.m

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