function [status,firstdata_num,datasample,colonna1,colonna2,colonna2bis,colonna3,... colonna4,colonna5,colonna6,colonna6_short,colonna7,yesKLHR3D,c1trigger,c6trigger,cA] = ... report_table(info_sito,controlsito,tipoarray,tipoalarms,alarms,chainID,Chain_Scheme,... yesTL,yesTLHR,yesTLH,yesTLHRH,yesPL,yesBL,yesLL,yesRL,yesKL,yesKLHR,yesThL,... yesPT100,yesIPL,yesIPLHR,yesTuL,yesRaL,yesPCL,yesPCLHR,yesPrL,yesEL,yes3DEL,... yesWEL,yesMPBEL,yesCrL,yes3DCrL,yesBML,yesHL,yesLuxL,yesCO2,yesRSN,yesRSNHR,yesTrL,... yesPE,yesWL,yes2DCrL,yesGF,yesGS,rTL,rTLHR,rTLH,rTLHRH,rKL,rKLHR,rIPL,rIPLHR,nCT,... num_nodi,time,conn,FileName) fileID = fopen(FileName,'a'); fmt = '%s \r'; text = 'report_table function started'; fprintf(fileID,fmt,text); [rS,~] = size(info_sito); [~,cCT] = size(controlsito); rCT = nCT; status = zeros(rS,1); % Stato dei Tool presenti in sito % Riga 1 - ID for j = 1:rS coppia = {char(info_sito(j,1)) ' ' char(info_sito(j,2))}; info = cellstr(strjoin(coppia)); colonna1(1,j+1) = info; end colonna1(1,1) = {'ID'}; [rA,cA] = size(alarms); if cA > 1 for j = 1:rA IDallarme = {char(alarms(j,2))}; colonna1(1,rS+1+j) = IDallarme; end c1trigger = colonna1{1,rS+2:end}; else c1trigger = []; end colonna1 = colonna1'; % Riga 2 - prima lettura valida disponibile date_start = '2010-01-01'; % data "artificiale" per trovare la prima lettura Data(1,1) = cellstr(date_start); Data(1,2) = cellstr(time); colonna2(1,1) = {'Prima lettura disponibile [gg-mm-aaaa]'}; for t = 1:rS datalogger = num2str(cell2mat((chainID(t,1)))); array = char(info_sito(t,2)); comando = ['select statustool_id from tools where unit_ID like ''' ... datalogger ''' and name like ''' array ''' ']; status(t,1) = cell2mat(fetch(conn,comando)); if status(t,1) == 1 % Inactive colonna2{t+1,1} = 'Strumento non ancora installato o inattivo'; firstdata_num{t+1,1} = 0; elseif status(t,1) == 3 % Monitoring Completed colonna2{t+1,1} = 'Monitoraggio completato'; firstdata_num{t+1,1} = 0; elseif status(t,1) == 2 || status(t,1) == 4 % Active o Manual Upload comando = ['select prod_date from tools where unit_ID like ''' ... datalogger ''' and name like ''' array ''' ']; data_ini = fetch(conn,comando); Datab = datestr(data_ini(1,1),'yyyy-mm-dd HH:MM:SS'); [rI,cI] = size(Datab); if rI && cI == 1 data1b = 0; else data1b = datenum(Datab); end Date = [cell2mat(Data(1,1)) repmat(' ', [1,1]) cell2mat(Data(1,2))]; data1a = datenum(Date); if data1b > data1a data1 = data1b; else data1 = data1a; end if data1 == data1a colonna2{t+1,1} = 'Strumento non ancora installato'; firstdata_num{t+1,1} = 0; else colonna2{t+1,1} = datestr(data1,'dd-mm-yyyy'); firstdata_num{t+1,1} = data1; % mi serve per definire catena pił recente in Centralina end else firstdata_num{t+1,1} = 0; end end if cCT > 1 for t = 1:rCT array = char(alarms(t,2)); comando = ['select EventDate, EventTime from ELABDATACTRL where EventDate > ''' ... date_start ''' and CtrlToolName = ''' ... array ''' and NodeNum = 1 ']; curs = exec(conn,comando); curs = fetch(curs); D_num_ini = curs.Data; Data_num_ini = [cell2mat(D_num_ini(1,1)) repmat(' ', [1,1]) cell2mat(D_num_ini(1,2))]; [rI,cI] = size(D_num_ini); if rI && cI == 1 Data_num_ini = 0; end Date = [cell2mat(Data(1,1)) repmat(' ', [1,1]) cell2mat(Data(1,2))]; data1a = datenum(Date); data1b = datenum(Data_num_ini(1,:)); if data1b > data1a data1 = data1b; else data1 = data1a; end if data1 == data1a colonna2{t+rS+1,1} = 'Dispositivo non ancora installato'; firstdata_num{t+1,1} = 0; else colonna2{t+rS+1,1} = datestr(data1,'dd-mm-yyyy'); firstdata_num{t+1,1} = data1; % mi serve per definire catena pił recente in Centralina end end end % Riga 2 Bis - Lettura di riferimento date_start = '2010-01-01'; % data "artificiale" per trovare la prima lettura Data(1,1) = cellstr(date_start); Data(1,2) = cellstr(time); colonna2bis(1,1) = {'Lettura di riferimento [gg-mm-aaaa]'}; for t = 1:rS if status(t,1) == 1 % Inactive colonna2bis{t+1,1} = '-'; elseif status(t,1) == 3 % Monitoring Completed colonna2bis{t+1,1} = '-'; elseif status(t,1) == 2 || status(t,1) == 4 % Active o Manual Upload datalogger = num2str(cell2mat((chainID(t,1)))); array = char(info_sito(t,2)); comando = ['select graph_prod_date from tools where unit_ID like ''' datalogger ''' and name like ''' array ''' ']; data_ini = fetch(conn,comando); stringa = cell2mat(data_ini); [~,cS] = size(stringa); esci = 0; if cS == 4 esci = 1; else date = stringa(1,1:10); time = stringa(1,11:21); clear Datab Datab(1,1) = cellstr(date); Datab(1,2) = cellstr(time); Datab = [cell2mat(Datab(1,1)) repmat(' ', [1,1]) cell2mat(Datab(1,2))]; data1b = datenum(Datab); end if esci == 0 Date = [cell2mat(Data(1,1)) repmat(' ', [1,1]) cell2mat(Data(1,2))]; data1a = datenum(Date); if data1b > data1a data1 = data1b; else data1 = data1a; end if data1 == data1a colonna2bis{t+1,1} = 'Strumento non ancora installato'; else colonna2bis{t+1,1} = datestr(data1,'dd-mm-yyyy'); firstdata_num{t+1,1} = data1; % mi serve per definire catena pił recente in Centralina end else colonna2bis{t+1,1} = colonna2{t+1,1}; end end end if nCT > 0 for c = 1:nCT colonna2bis{rS+1+c:rS+c+1,1} = colonna2{rS+1+c:rS+c+1,1}; end end % Riga 3 - Ultima lettura disponibile colonna3(1,1) = {'Ultima lettura disponibile [gg-mm-aaaa]'}; for i = 1:rS datalogger = char(info_sito(i,1)); array = char(info_sito(i,2)); dataU = datestr(today,'yyyy-mm-dd'); OK = 0; if status(i,1) == 1 % Inactive colonna3{i+1,1} = '-'; datasample{i+1,1} = 9999; OK = 1; end while OK == 0 % trovo la data dell'ultima lettura disponibile if strcmp(tipoarray(i),'MUSA') == 1 comando = ['select EventDate, EventTime from ElabDataMusaView where EventDate >= ''' dataU ''' and UnitName = ''' datalogger... ''' and ToolNameID = ''' array ''' and NodeNum = 1 ']; else comando = ['select EventDate, EventTime from ElabDataView where EventDate >= ''' dataU ''' and UnitName = ''' datalogger... ''' and ToolNameID = ''' array ''' and NodeNum = 1 ']; end curs = exec(conn,comando); curs = fetch(curs); Letture = curs.Data; [~,cu] = size(Letture); if cu == 1 % nessun dato trovato dataU = datestr((datenum(dataU) - 1),'yyyy-mm-dd'); % provo con la data precedente else dataUL = datestr(dataU,'dd-mm-yyyy'); datasample{i+1,1} = datenum(dataU); % date numeriche per scegliere, a partitą di centralina, la catena con i dati pił recenti colonna3{i+1,1} = dataUL; OK = 1; end end end if cCT > 1 for t = 1:rCT array = char(alarms(t,2)); comando = ['select EventDate, EventTime from ELABDATACTRL where EventDate > ''' ... date_start ''' and CtrlToolName = ''' ... array ''' and NodeNum = 1 ']; curs = exec(conn,comando); curs = fetch(curs); D_num_ini = curs.Data; Data_num_ini = [cell2mat(D_num_ini(end,1)) repmat(' ', [1,1]) cell2mat(D_num_ini(end,2))]; [rI,cI] = size(D_num_ini); if rI && cI == 1 Data_num_ini = 0; end Date = [cell2mat(Data(1,1)) repmat(' ', [1,1]) cell2mat(Data(1,2))]; data1a = datenum(Date); data1b = datenum(Data_num_ini(1,:)); if data1b > data1a data1 = data1b; else data1 = data1a; end if data1 == data1a colonna3{t+rS+1,1} = 'Dispositivo non ancora installato'; else colonna3{t+rS+1,1} = datestr(data1,'dd-mm-yyyy'); end end end % Riga 4 - tipologia catena colonna4(1,1) = {'Tipologia di Array'}; colonna4 = [colonna4, tipoarray']; if cCT > 1 colonna4 = [colonna4, tipoalarms']; end colonna4 = colonna4'; % Riga 5 - Lunghezza catena colonna5(1,1) = {'Lunghezza [m]'}; c = 0; for k = 1:rS L(k+1,1) = max(cell2mat(Chain_Scheme(:,2+c))); conv2 = num2str(L(k+1,1)); [~,cc2] = size(conv2); corretto = 0; for cc = 1:cc2 if strcmp(conv2(cc),'.') % Cerco la virgola corretto = 1; % Significa che ho trovato la virgola if cc == cc2-1 % Un solo decimale conv2 =[conv2 '0']; break end end end if corretto == 0 conv2 = [conv2 '.00']; end colonna5(k+1,1) = {conv2}; if strcmp(colonna5(k+1,1),'0') || strcmp(colonna5(k+1,1),'0.00') colonna5(k+1,1) = cellstr('-'); end c = c+3; end if cCT > 1 colonna5(rS+2:rS+rCT+1,1) = cellstr('-'); end % Riga 6 - tipologia sensori colonna6(1,1) = {'Tipologia di sensori o dispositivi'}; colonna6_short(1,1) = {'Tipologia di sensori o dispositivi'}; for nn = 1:rS s = 1; % conta sensori di tipo diverso if yesTL(nn) == 1 % Tilt Link V if yesTLHR(nn) == 1 % se ho Tilt Link HR elimino Tilt Link dalla lista if rTL(nn) == rTLHR(nn) riga6temp(s,1) = {'Tilt Link HR 3D V'}; riga6short(s,1) = {'Tilt Link HR 3D V'}; else riga6temp(s,1) = {'Tilt Link V'}; riga6short(s,1) = {'Tilt Link V'}; end else riga6temp(s,1) = {'Tilt Link V'}; riga6short(s,1) = {'Tilt Link V'}; end s = s+1; end if yesTLHR(nn) == 1 % Tilt Link HR V if yesTL(nn) ~= 1 % Tilt Link V riga6temp(s,1) = {'Tilt Link HR V'}; riga6short(s,1) = {'Tilt Link HR V'}; s = s+1; end end if yesTLH(nn) == 1 % Tilt Link H if yesTLHRH(nn) == 1 % se ho Tilt Link HR H elimino Tilt Link H dalla lista if rTLH(nn) == rTLHRH(nn) riga6temp(s,1) = {'Tilt Link HR 3D H'}; riga6short(s,1) = {'Tilt Link HR 3D H'}; else riga6temp(s,1) = {'Tilt Link H'}; riga6short(s,1) = {'Tilt Link H'}; end else riga6temp(s,1) = {'Tilt Link H'}; riga6short(s,1) = {'Tilt Link H'}; end s = s+1; end if yesTLHRH(nn) == 1 % Tilt Link HR H if yesTLH(nn) ~= 1 % Tilt Link H riga6temp(s,1) = {'Tilt Link HR H'}; riga6short(s,1) = {'Tilt Link HR H'}; s = s+1; end end if yesPL(nn) == 1 % Piezo Link riga6temp(s,1) = {'Piezo Link'}; riga6short(s,1) = {'Piezo Link'}; s = s+1; end if yesBL(nn) == 1 || yesBML(nn) == 1 % Baro Link (normale o MUSA) riga6temp(s,1) = {'Baro Link'}; riga6short(s,1) = {'Baro Link'}; s = s+1; end if yesLL(nn) == 1 % Load Link riga6temp(s,1) = {'Load Link'}; riga6short(s,1) = {'Load Link'}; s = s+1; end if yesRL(nn) == 1 % Rain Link riga6temp(s,1) = {'Rain Link'}; riga6short(s,1) = {'Rain Link'}; s = s+1; end if yesKL(nn) == 1 % Klino Link if yesKLHR(nn) == 1 % se ho Klino Link HR elimino Klino Link dalla lista if rKL(nn) == rKLHR(nn) yesKLHR3D(nn,1) = 1; riga6temp(s,1) = {'Klino Link HR 3D'}; riga6short(s,1) = {'Klino Link HR 3D'}; else yesKLHR3D(nn,1) = 0; riga6temp(s,1) = {'Klino Link'}; riga6short(s,1) = {'Klino Link'}; end else yesKLHR3D(nn,1) = 0; riga6temp(s,1) = {'Klino Link'}; riga6short(s,1) = {'Klino Link'}; end s = s+1; else yesKLHR3D(nn,1) = 0; end if yesKLHR(nn) == 1 % Klino Link HR if yesKL(nn) ~= 1 % Klino Link riga6temp(s,1) = {'Klino Link HR'}; riga6short(s,1) = {'Klino Link HR'}; s = s+1; end end if yesThL(nn) == 1 % Therm Link riga6temp(s,1) = {'Therm Link'}; riga6short(s,1) = {'Therm Link'}; s = s+1; end if yesPT100(nn) == 1 % PT100 Link riga6temp(s,1) = {'PT100 Link'}; riga6short(s,1) = {'PT100 Link'}; s = s+1; end if yesIPL(nn) == 1 % In Place Link if yesIPLHR(nn) == 1 % se ho In Place Link HR elimino In Place Link dalla lista if rIPL(nn) == rIPLHR(nn) riga6temp(s,1) = {'In Place Link HR 3D'}; riga6short(s,1) = {'IP Link HR 3D'}; else riga6temp(s,1) = {'In Place Link'}; riga6short(s,1) = {'In Place Link'}; end else riga6temp(s,1) = {'In Place Link'}; riga6short(s,1) = {'In Place Link'}; end s = s+1; end if yesIPLHR(nn) == 1 % In Place Link HR if yesIPL(nn) ~= 1 % In Place Link riga6temp(s,1) = {'In Place Link HR'}; riga6short(s,1) = {'IP Link HR'}; s = s+1; end end if yesTuL(nn) == 1 % Tunnel Link riga6temp(s,1) = {'Tunnel Link'}; riga6short(s,1) = {'Tunnel Link'}; s = s+1; end if yesRaL(nn) == 1 % Radial Link riga6temp(s,1) = {'Radial Link'}; riga6short(s,1) = {'Radial Link'}; s = s+1; end if yesPCL(nn) == 1 % PreConv Link if yesPCLHR(nn) == 1 % se ho PreConv Link HR elimino PreConv Link dalla lista if rPCL(nn) == rPCLHR(nn) riga6temp(s,1) = {'PreConv Link HR 3D'}; riga6short(s,1) = {'PC Link HR 3D'}; else riga6temp(s,1) = {'PreConv Link'}; riga6short(s,1) = {'PreConv Link'}; end else riga6temp(s,1) = {'PreConv Link'}; riga6short(s,1) = {'PreConv Link'}; end s = s+1; end if yesPCLHR(nn) == 1 % PreConv Link HR if yesPCL(nn) ~= 1 % PreConv Link riga6temp(s,1) = {'PreConv Link HR'}; riga6short(s,1) = {'PC Link HR'}; s = s+1; end end if yesPrL(nn) == 1 % Pressure Link riga6temp(s,1) = {'Pressure Link'}; riga6short(s,1) = {'Press. Link'}; s = s+1; end if yesEL(nn) == 1% Extensometer Link riga6temp(s,1) = {'Extensometer Link'}; riga6short(s,1) = {'Extens. Link'}; s = s+1; end if yes3DEL(nn) == 1 % 3D Extensometer Link riga6temp(s,1) = {'3D Extensometer Link'}; riga6short(s,1) = {'3D Ext. Link'}; s = s+1; end if yesWEL(nn) == 1 % Wire Extensometer Link riga6temp(s,1) = {'Wire Extensometer Link'}; riga6short(s,1) = {'Wire Ex. Link'}; s = s+1; end if yesMPBEL(nn) == 1 % Multi Point Borehole Extensometer Link riga6temp(s,1) = {'Multi Point Borehole Extensometer Link'}; riga6short(s,1) = {'MPBX Link'}; s = s+1; end if yesCrL(nn) == 1 % Crack Link riga6temp(s,1) = {'Crack Link'}; riga6short(s,1) = {'Crack Link'}; s = s+1; end if yes2DCrL(nn) == 1 % 2D Crack Link riga6temp(s,1) = {'2D Crack Link'}; riga6short(s,1) = {'2D Crack Link'}; s = s+1; end if yes3DCrL(nn) == 1 % 3D Crack Link riga6temp(s,1) = {'3D Crack Link'}; riga6short(s,1) = {'3D Cr. Link'}; s = s+1; end if yesHL(nn) == 1 % Humidity Link riga6temp(s,1) = {'Humidity Link'}; riga6short(s,1) = {'Humidity Link'}; s = s+1; end if yesLuxL(nn) == 1 % Lux Link riga6temp(s,1) = {'Lux Link'}; riga6short(s,1) = {'Lux Link'}; s = s+1; end if yesCO2(nn) == 1 % CO2 Link riga6temp(s,1) = {'CO2 Link'}; riga6short(s,1) = {'CO2 Link'}; s = s+1; end if yesRSN(nn) == 1 % RSN Link if yesRSNHR(nn) == 1 % se ho RSN Link HR elimino RSN Link dalla lista if rPRSN(nn) == rRSNHR(nn) riga6temp(s,1) = {'RSN Link HR 3D'}; riga6short(s,1) = {'RSN Link HR 3D'}; else riga6temp(s,1) = {'RSN Link'}; riga6short(s,1) = {'RSN Link'}; end else riga6temp(s,1) = {'RSN Link'}; riga6short(s,1) = {'RSN Link'}; end s = s+1; end if yesRSNHR(nn) == 1 % RSN Link HR if yesRSN(nn) ~= 1 % RSN Link riga6temp(s,1) = {'RSN Link HR'}; riga6short(s,1) = {'RSN Link HR'}; s = s+1; end end if yesTrL(nn) == 1 % Trigger Link riga6temp(s,1) = {'Trigger Link'}; riga6short(s,1) = {'Trigger Link'}; s = s+1; end if yesPE(nn) == 1 % Pendulum riga6temp(s,1) = {'Pendulum'}; riga6short(s,1) = {'Pendulum'}; s = s+1; end if yesWL(nn) == 1 % Weir Link riga6temp(s,1) = {'Weir Link'}; riga6short(s,1) = {'Weir Link'}; s = s+1; end if yesGF(nn) == 1 % G-Flow Link riga6temp(s,1) = {'G-Flow Link'}; riga6short(s,1) = {'G-Flow Link'}; s = s+1; end if yesGS(nn) == 1 % G-Shock Link riga6temp(s,1) = {'G-Shock Link'}; riga6short(s,1) = {'G-Shock Link'}; s = s+1; end if s == 2 colonna6(1,nn+1) = riga6temp(:,1); colonna6_short(1,nn+1) = riga6short(:,1); clear riga6temp clear riga6short else colonna6{1,nn+1} = splitlines(strjoin(cellstr(riga6temp(:,1)), '\n')); colonna6_short{1,nn+1} = splitlines(strjoin(cellstr(riga6short(:,1)), '\n')); clear riga6temp; clear riga6short end end if cCT > 1 ct = 1; % conta dispositivi di tipo diverso for mm = 1:nCT if strcmp(char(tipoalarms(mm)),'Variable Message System') CTtemp(ct,1) = {'Pannello a messaggio variabile'}; CTtemp_short(ct,1) = {'PMV'}; ct = ct +1; elseif strcmp(char(tipoalarms(mm)),'Traffic Lights') CTtemp(ct,1) = {'Impianto semaforico'}; CTtemp_short(ct,1) = {'Semafori'}; ct = ct +1; elseif strcmp(char(tipoalarms(mm)),'Alarms') CTtemp(ct,1) = {'Allarme acustico e/o visivo'}; CTtemp_short(ct,1) = {'Sistema di Allarme'}; ct = ct +1; elseif strcmp(char(tipoalarms(mm)),'Camera') CTtemp(ct,1) = {'Camera'}; CTtemp_short(ct,1) = {'Camera'}; ct = ct +1; end colonna6{1,rS+1+mm} = strjoin(cellstr(CTtemp(mm,1)), ', '); colonna6_short{1,rS+1+mm} = strjoin(cellstr(CTtemp_short(mm,1)), ', '); end c6trigger = colonna6{1,rS+2:end}; else c6trigger = []; clear CTtemp end colonna6 = colonna6'; colonna6_short = colonna6_short'; % Riga 7 - numero sensori colonna7(1,1)={'Numero di sensori o dispositivi'}; for s = 1:rS if strcmp(cellstr(colonna4(s+1,1)),'Vertical Array') || strcmp(cellstr(colonna4(s+1,1)),'In Place Array')... || strcmp(cellstr(colonna4(s+1,1)),'Therm Array') || strcmp(cellstr(colonna4(s+1,1)),'Piezo Array')... || strcmp(cellstr(colonna4(s+1,1)),'Cir Array') || strcmp(cellstr(colonna4(s+1,1)),'Rad Array')... || strcmp(cellstr(colonna4(s+1,1)),'PreConv Array') || strcmp(cellstr(colonna4(s+1,1)),'Horizontal Array')... || strcmp(cellstr(colonna4(s+1,1)),'Vertical Array Structure') colonna7(s+1,1) = cellstr(num2str(num_nodi(s,1)-1)); else colonna7(s+1,1) = cellstr(num2str(num_nodi(s,1))); end end if cCT > 1 colonna7(rS+2:rS+1+rCT) = cellstr('1'); end text = 'report_table function executed correctly'; fprintf(fileID,fmt,text); fclose(fileID); end