Files
matlab-python/ATD/report_CrL.m

412 lines
18 KiB
Matlab
Executable File
Raw Permalink Blame History

function [GI_DispCrL,GI_NumCrL,GI_DateCrL,battANALOG,ATTIVA,FIG,FIG_ENG] = report_CrL(rCrL,...
m,NodoCrackLink,toolrif,unitrif,contunit,datarif,Font_caption,...
Font_tools,battANALOG,ATTIVA,siteID,DT,DT_ENG,FIG,FIG_ENG,br,status,...
activeEN,conn,FileName)
fileID = fopen(FileName,'a');
fmt = '%s \r';
text = 'report_CrL function started';
fprintf(fileID,fmt,text);
import mlreportgen.dom.*
import mlreportgen.report.*
% Make sure DOM is compilable
makeDOMCompilable()
GI_DispCrL = [];
GI_NumCrL = [];
GI_DateCrL = [];
if status(m,1) == 1
if ATTIVA == 1
testo = Paragraph('GMUX non ancora installato o canale inattivo.');
add(DT,testo);
ATTIVA = 0;
if activeEN == 1
testo = Paragraph('GMUX not installed or inactive.');
add(DT_ENG,testo);
end
end
elseif status(m,1) == 3
if ATTIVA == 1
testo = Paragraph(['Monitoraggio completato. Invitiamo a visitare la '...
'piattaforma web per la visione dei dati storici.']);
ATTIVA = 0;
add(DT,testo);
if activeEN == 1
testo = Paragraph(['Monitoring completed. Please log into the web-based platform '...
'to access the complete dataset.']);
add(DT_ENG,testo);
end
end
else
CrE = Section();
sezCrack = Heading3('Crack Link');
sezCrack.Style = {OuterMargin('0in','0in','0.15in','0in'),FontSize(Font_tools),Bold(1),Italic(1)};
CrE.Title = sezCrack;
if battANALOG == 0
comando = ['select Date, Time, UnitName, ToolNameID, BatLevel, Temperature from RawDataView where Date >= ''' ...
datarif ''' and UnitName = ''' char(unitrif) ''' and ToolNameID = '''...
char(toolrif) ''' and NodeNum = 1 '];
curs = exec(conn,comando);
curs = fetch(curs);
BatTemp = curs.Data;
[~,cc] = size(BatTemp);
if cc ~= 1 %ci sono dati riferiti all'ultimo mese/periodo di interesse
DataPlot = [BatTemp(:,1) BatTemp(:,2)];
% sistemo date, batteria e temperatura
[rD,~] = size(DataPlot);
T = [cell2mat(DataPlot(:,1)) repmat(' ', [rD,1]) cell2mat(DataPlot(:,2))];
Date = datenum(T);
Batteria = cell2mat(BatTemp(:,5));
Temperatura = cell2mat(BatTemp(:,6));
% testo introduttivo
testoB1 = Paragraph(['I valori di tensione di alimentazione del GMUX durante il periodo '...
'di monitoraggio sono riportati di seguito. Il corretto funzionamento del sistema '...
char(232) ' assicurato per una carica superiore a 12 V. L''ultimo dato disponibile ' char(232) ' pari '...
'a ' num2str(Batteria(end,1)) ' V.']);
testoB2 = Paragraph(['Il GMUX integra al proprio interno un termometro '...
'per monitorate la temperatura di esercizio ed identificare eventuali '...
'anomalie. I dati di temperatura registrati sono riportati di seguito.']);
testoB1.HAlign = 'justify';
testoB2.HAlign = 'justify';
% grafico batteria
figure(19)
plot(Date,Batteria);
hold on
title('Batteria e Temperatura del GMUX');
xlabel('Data [gg/mm/aaaa]');
ylabel('Livello di Batteria [V]');
ylim([floor(min(Batteria(:,1))) ceil(max(Batteria(:,1)))]);
yyaxis right
GMUX = plot(Date,Temperatura,':','LineWidth',1.1);
ylim([floor(min(Temperatura(:,1))) ceil(max(Temperatura(:,1)))]);
ylabel(['Temperatura [' char(176) 'C]']);
set(gca,'YColor','k');
str(1,1) = cellstr('Batteria');
str(2,1) = cellstr('Temperatura');
legend(str,'Location','northwest');
h = gca;
h.XAxis.MinorTick = 'on';
datetick('x','dd/mm/yyyy','keepticks','keeplimits');
xtickangle(20);
grid on
grid minor
xlim([Date(1)-1 Date(end)+1]);
TempName = char(strcat('Report',siteID,'-', contunit,'-GMUX.png'));
saveas(GMUX,TempName);
ChartGMUX = Image(TempName);
ChartGMUX.Style = {Height('8cm'),HAlign('center')};
if Batteria(end,1) >= 12.5
TempName = char(strcat('B_13.jpg'));
elseif Batteria(end,1) >= 12
TempName = char(strcat('B_12.jpg'));
elseif Batteria(end,1) >= 11.3
TempName = char(strcat('B_115.jpg'));
elseif Batteria(end,1) >= 10.5
TempName = char(strcat('B_11.jpg'));
else
TempName = char(strcat('B_10.jpg'));
end
Batt = Image(TempName);
Batt.Style = {Height('4cm'),HAlign('center')};
lot = Table({ChartGMUX, Batt});
lot.TableEntriesStyle = {HAlign('center'),VAlign('middle')};
lot.Style = {ResizeToFitContents(false),Width("100%")};
grps(1) = TableColSpecGroup;
grps(1).Span = 2;
specs(1) = TableColSpec;
specs(1).Span = 1;
specs(1).Style = {Width("80%")};
specs(2) = TableColSpec;
specs(2).Span = 1;
specs(2).Style = {Width("20%")};
grps(1).ColSpecs = specs;
lot.ColSpecGroups = grps;
lot_cap = Paragraph(['Fig. ' num2str(FIG) ' - Livello di carica della batteria e temperatura del '...
'GMUX durante il periodo di riferimento']);
FIG = FIG+1;
lot_cap.Style = {HAlign('center'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
Batt = Section();
sezBATT = Heading3('GMUX - Batteria e Temperatura');
sezBATT.Style = {FontSize(Font_tools),Bold(1),Italic(1)};
Batt.Title = sezBATT;
add(DT,sezBATT);
add(DT,testoB1);
add(DT,testoB2);
add(DT,lot);
add(DT,lot_cap);
add(DT,br);
close(figure(19));
%--ENG---
if activeEN == 1
CrL_ENG = Section();
sezCrL_ENG = Heading3('Crack Link');
sezCrL_ENG.Style = {OuterMargin('0in','0in','0.15in','0in'),FontSize(Font_tools),Bold(1),Italic(1)};
CrL_ENG.Title = sezCrL_ENG;
testoB1 = Paragraph(['The following chart reports the GMUX battery level trend recorded '...
'during the reference time period. '...
'The correct functioning of the data acquisition system is guaranteed for a '...
'minimum level of 12 V. The last available data is equal to ' num2str(Batteria(end,1)) ' V.']);
testoB2 = Paragraph(['GMUX equips also a thermometer that allows the monitoring '...
'of the working temperature and the identification of eventual malfunctioning. The same '...
'chart displays also temperature data recorded by the multiplexer.']);
testoB1.HAlign = 'justify';
testoB2.HAlign = 'justify';
% grafico batteria
figure(19)
plot(Date,Batteria);
hold on
title('GMUX battery level and temperature');
xlabel('Date [dd/mm/yyyy]');
ylabel('Battery Level [V]');
ylim([floor(min(Batteria(:,1))) ceil(max(Batteria(:,1)))]);
yyaxis right
GMUX = plot(Date,Temperatura,':','LineWidth',1.1);
ylim([floor(min(Temperatura(:,1))) ceil(max(Temperatura(:,1)))]);
ylabel(['Temperature [' char(176) 'C]']);
set(gca,'YColor','k');
str(1,1) = cellstr('Battery');
str(2,1) = cellstr('Temperature');
legend(str,'Location','northwest');
h = gca;
h.XAxis.MinorTick = 'on';
datetick('x','dd/mm/yyyy','keepticks','keeplimits');
xtickangle(20);
grid on
grid minor
xlim([Date(1)-1 Date(end)+1]);
TempName = char(strcat('Report',siteID,'-', contunit,'-GMUX_ENG.png'));
saveas(GMUX,TempName);
ChartGMUX = Image(TempName);
ChartGMUX.Style = {Height('8cm'),HAlign('center')};
Batt = Image(TempNameB);
Batt.Style = {Height('4cm'),HAlign('center')};
lot = Table({ChartGMUX, Batt});
lot.TableEntriesStyle = {HAlign('center'),VAlign('middle')};
lot.Style = {ResizeToFitContents(false),Width("100%")};
grps(1) = TableColSpecGroup;
grps(1).Span = 2;
specs(1) = TableColSpec;
specs(1).Span = 1;
specs(1).Style = {Width("80%")};
specs(2) = TableColSpec;
specs(2).Span = 1;
specs(2).Style = {Width("20%")};
grps(1).ColSpecs = specs;
lot.ColSpecGroups = grps;
lot_cap = Paragraph(['Fig. ' num2str(FIG_ENG) ' - Battery level and temperature recorded '...
'by the GMUX during the reference time period']);
FIG_ENG = FIG_ENG+1;
lot_cap.Style = {HAlign('center'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
Batt_ENG = Section();
sezBATT_ENG = Heading3('GMUX - Battery and temperature');
sezBATT_ENG.Style = {FontSize(Font_tools),Bold(1),Italic(1)};
Batt_ENG.Title = sezBATT_ENG;
add(DT_ENG,sezBATT_ENG);
add(DT_ENG,testoB1);
add(DT_ENG,testoB2);
add(DT_ENG,lot);
add(DT_ENG,lot_cap);
add(DT_ENG,br);
close(figure(19));
end
battANALOG = 1;
end
end
add(DT,sezCrack);
for cr = 1:rCrL(m,1)
NodeNum = num2str(NodoCrackLink(cr,m));
comando = ['select EventDate, EventTime, XShift from ElabDataView where EventDate >= ''' ...
datarif ''' and ToolNameID = ''' char(toolrif) ''' and UnitName = ''' char(unitrif) ...
''' and NodeNum = ''' NodeNum ''' '];
curs = exec(conn,comando);
curs = fetch(curs);
Dati = curs.Data;
% Modifico il formato di data e ora
[rD,rC] = size(Dati);
if rC ~= 1
T = [cell2mat(Dati(:,1)) repmat(' ', [rD,1]) cell2mat(Dati(:,2))];
Date = datenum(T); % Data
open = cell2mat(Dati(:,3)); % Fessura
dS = open-open(1);
GI_DispCrL(:,cr) = open;
GI_NumCrL(:,cr) = NodoCrackLink(cr,m);
GI_DateCrL = Date;
% grafico deformazioni NELL'ULTIMO MESE
figure(5);
apertura = plot(Date,dS);
title(['Apertura/chiusura del fessurimetro numero ' NodeNum]);
xlabel('Data [gg/mm/aaaa]');
ylabel('Deformazione [mm]');
control = abs(max(dS)-min(dS));
if control < 1
varG = (1-control)/2;
ylim([min(dS)-varG max(dS)+varG]);
end
xlim([Date(1)-1 Date(end)+1]);
h = gca;
h.XAxis.MinorTick = 'on';
datetick('x','dd/mm/yyyy','keepticks','keeplimits');
xtickangle(15);
grid on
grid minor
hold off
TempName = char(strcat('Report',siteID,'-', char(toolrif),'-Crack', NodeNum, '.png'));
saveas(apertura,TempName);
ChartCrL = Image(TempName);
ChartCrL.Style = {Height('7.1cm'),HAlign('center')};
ChartCrL_cap = Paragraph(['Fig. ' num2str(FIG) ' - Andamento '...
'dell''apertura o chiusura del fessurimetro, nodo numero ' ...
NodeNum ', durante il periodo temporale di riferimento']);
FIG = FIG+1;
ChartCrL_cap.Style = {HAlign('center'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
if cr == 1
testo = Paragraph(['Nei grafici seguenti sono rappresentati i dati relativi '...
'alle deformazioni registrate durante il periodo temporale di riferimento '...
'dai fessurimetri presenti in sito. Si sottolinea che valori crescenti indicano '...
'un''apertura della fessura, mentre numeri decrescenti una chiusura della stessa.']);
testo.HAlign = 'justify';
add(DT,testo);
end
testo2 = Paragraph(['In particolare, il nodo numero ' NodeNum ' ha registrato un valore massimo e minimo '...
'di apertura assoluta dello strumento rispettivamente pari a ' num2str(round(max(open),2), '%0.2f') ' mm e '...
num2str(round(min(open),2), '%0.2f') ' mm, con una '...
'variazione massima di circa ' num2str(round(max(open),2)-round(min(open),2),'%0.2f') ' mm.' ]);
testo2.HAlign = 'justify';
add(DT,testo2);
add(DT,ChartCrL);
add(DT,ChartCrL_cap);
if cr == rCrL(m,1)
add(DT,br);
end
close(figure(5));
%---ENG---
if activeEN == 1
% grafico deformazioni NELL'ULTIMO MESE
figure(25);
apertura = plot(Date,dS);
title(['Crack meter opening - node ' NodeNum]);
xlabel('Date [dd/mm/yyyy]');
ylabel('Deformation [mm]');
control = abs(max(dS)-min(dS));
if control < 1
varG = (1-control)/2;
ylim([min(dS)-varG max(dS)+varG]);
end
xlim([Date(1)-1 Date(end)+1]);
h = gca;
h.XAxis.MinorTick = 'on';
datetick('x','dd/mm/yyyy','keepticks','keeplimits');
xtickangle(15);
grid on
grid minor
hold off
TempName = char(strcat('Report',siteID,'-', char(toolrif),'-Crack', NodeNum, '_ENG.png'));
saveas(apertura,TempName);
ChartCrL_ENG = Image(TempName);
ChartCrL_ENG.Style = {Height('7.1cm'),HAlign('center')};
ChartCrL_ENG_cap = Paragraph(['Fig. ' num2str(FIG_ENG) ' - Crack link '...
'opening measured by node ' ...
NodeNum ' during the reference time period']);
FIG_ENG = FIG_ENG+1;
ChartCrL_ENG_cap.Style = {HAlign('center'),FontSize(Font_caption),Italic(1),Color('midnightblue')};
if cr == 1
testo = Paragraph(['The following graphs present deformation data recorded during the reference '...
'time period by the crack meters installed on site. In this representation, positive values '...
'corresponds to an opening crack, while negative values represent a closing displacement of '...
'the monitored element.']);
testo.HAlign = 'justify';
add(DT_ENG,testo);
end
testo2 = Paragraph(['In particular, Crack Link ' NodeNum ' recorded a maximum and minimum value of absolute '...
'opening of ' num2str(round(max(open),2), '%0.2f') ' mm and '...
num2str(round(min(open),2), '%0.2f') ' mm respectively, for a maximum variation '...
'that amounts to ' num2str(round(max(open),2)-round(min(open),2),'%0.2f') ' mm.' ]);
testo2.HAlign = 'justify';
add(DT_ENG,testo2);
add(DT_ENG,ChartCrL_ENG);
add(DT_ENG,ChartCrL_ENG_cap);
if cr == rCrL(m,1)
add(DT_ENG,br);
end
close(figure(25));
end
%pulisco variabili da riutilizzare per catena successiva
clear open;
else
if ATTIVA == 1
CrE = Section();
sezCrack = Heading3('Crack Link');
sezCrack.Style = {OuterMargin('0in','0in','0.15in','0in'),FontSize(Font_tools),Bold(1),Italic(1)};
CrE.Title = sezCrack;
add(DT,sezCrack);
testo = Paragraph('Non sono presenti dati relativi al periodo temporale considerato.');
add(DT,testo);
br = PageBreak();
add(DT,br);
if activeEN == 1
CrE_ENG = Section();
sezCrack_ENG = Heading3('Crack Link');
sezCrack_ENG.Style = {OuterMargin('0in','0in','0.15in','0in'),FontSize(Font_tools),Bold(1),Italic(1)};
CrE_ENG.Title = sezCrack;
add(DT_ENG,sezCrack_ENG);
testo = Paragraph('No data available for the reference time period.');
add(DT_ENG,testo);
br = PageBreak();
add(DT_ENG,br);
end
ATTIVA = 0;
end
end
end
if isempty(GI_DispCrL) == 0
ind = 1;
if rCrL(m) > 1 % pi<70> di un fessurimetro, prendo quello con max variazione
for k = 1:rCrL(m)
maxX(1,k) = max(GI_DispCrL(:,k)-GI_DispCrL(1,k));
if k == 1
rif = maxX(1,1);
end
if maxX(1,k) > rif
rif = maxX(1,k);
ind = k;
end
end
GI_DispCrL = GI_DispCrL(:,ind);
GI_NumCrL = GI_NumCrL(1,ind);
end
end
end
text = 'report_CrL function executed correctly';
fprintf(fileID,fmt,text);
fclose(fileID);
end