376 lines
13 KiB
Matlab
Executable File
376 lines
13 KiB
Matlab
Executable File
function RC = RSN(IDcentralina,DTcatena)
|
||
%%% Programma per l'elaborazione dei dati del Rockfall Safety Network
|
||
%%% Versione 2.0 del febbraio-giugno 2021
|
||
|
||
tic
|
||
|
||
RC = 1; %#ok<NASGU>
|
||
text = ['Elaboration of RSN chain ' DTcatena ' of control unit ' IDcentralina ' started correctly'];
|
||
d = datestr(datetime,'yyyy_mm_dd');
|
||
t = datestr(datetime,'HH_MM_SS');
|
||
FileName = ['LogFile_RSN-' IDcentralina '-' DTcatena '-' d '-' t '.txt'];
|
||
outdat = fopen(FileName,'wt+');
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
fprintf(fileID,fmt,text);
|
||
fclose(fileID);
|
||
|
||
%% Parte generale
|
||
|
||
% Associo ID company al relativo DB
|
||
% Definisco i parametri del Database
|
||
IDcompany = '1'; % DA INTEGRARE IN VERSIONI FUTURE
|
||
DB = database_definition(IDcompany,FileName);
|
||
|
||
% Apro la connessione al DB
|
||
dbname = cell2mat(DB{1,1});
|
||
username = cell2mat(DB{2,1});
|
||
password = cell2mat(DB{3,1});
|
||
driver = cell2mat(DB{4,1});
|
||
dburl = 'jdbc:mysql://212.237.30.90:3306/ase_lar?useLegacyDatetimeCode=false&serverTimezone=Europe/Rome&';
|
||
conn = database(dbname, username, password, driver, dburl);
|
||
|
||
% scarico Contol Unit ID
|
||
unitID = IDunit(IDcentralina,conn,FileName);
|
||
|
||
% questa funzione considera la prima data e ora da cui caricare i dati a seconda della catena
|
||
[date,time,unitID] = datainiziale(DTcatena,unitID,conn,FileName);
|
||
|
||
% funzione che elenca tutti i nodi ed il loro numero presenti per ogni tipo di sensore.
|
||
[idTool,NodoRSNLink,NodoSS,NodoRSNLinkHR,~,NodoLoadLink,...
|
||
NodoTriggerLink,NodoGflowLink,NodoGshockLink,NodoDebrisLink] = tipologiaNodi(...
|
||
DTcatena,unitID,conn,FileName);
|
||
|
||
% funzione che ricostruisce i nodi della catena
|
||
catena = schema(idTool,conn,FileName);
|
||
|
||
% funzione che attiva/disattiva l'elaborazione per una determinata tipologia di nodo
|
||
[yesRSN,yesRSNHR,yesSS,yesLL,yesTrL,yesGF,yesGS,yesDL,rRSN,rRSNHR,...
|
||
rLL,rTrL,rSS,rDL] = YesNo(NodoRSNLink,NodoRSNLinkHR,NodoSS,NodoLoadLink,...
|
||
NodoTriggerLink,NodoGflowLink,NodoGshockLink,NodoDebrisLink,FileName);
|
||
|
||
% funzione che definisce tutti i parametri importanti a elaborare
|
||
% un'installazione
|
||
[NdatiMedia,Ndatidespike,MEMS,tolleranzaAcc,pos_inst,Tmax,Tmin,SEL,...
|
||
MEL] = Parametri_Installazione(yesRSN,yesRSNHR,yesDL,idTool,conn,FileName);
|
||
|
||
% funzione che carica i dati di calibrazione
|
||
[DCalRSNTot,DCalRSNHRTot,DCalLLTot,~,yesRSN,yesRSNHR,yesLL,yesDL]...
|
||
= letturaCal(MEMS,IDcentralina,DTcatena,catena,yesRSN,yesRSNHR,yesLL,yesDL,rRSN,...
|
||
rRSNHR,rLL,rDL,NodoRSNLink,NodoLoadLink,NodoDebrisLink,conn,FileName);
|
||
|
||
% tipologia di centralina
|
||
Unit = centralina(IDcentralina,conn,FileName);
|
||
|
||
%% Scarico dei dati
|
||
|
||
% Scarico l'ultima data elaborata: in questo modo far<61> i calcoli a partire
|
||
% solo da qualche data prima, per incrementare le prestazioni del software
|
||
[NuovoZeroRSN,datainiRSN,tempoiniRSN,NuovoZeroRSNHR,datainiRSNHR,tempoiniRSNHR,...
|
||
DatiElabTriggerLink,NuovoZeroTrL,datainiTrL,tempoiniTrL,DatiElabShockSensor,NuovoZeroSS,...
|
||
datainiSS,tempoiniSS,NuovoZeroLL,datainiLL,tempoiniLL,datainiGF,tempoiniGF,datainiGS,tempoiniGS,...
|
||
DatiElabDebrisLink,NuovoZeroDL,datainiDL,tempoiniDL]...
|
||
= LastElab(conn,date,time,IDcentralina,DTcatena,NdatiMedia,NodoRSNLink,yesRSN,NodoRSNLinkHR,yesRSNHR,...
|
||
NodoTriggerLink,yesTrL,rTrL,NodoSS,yesSS,rSS,NodoLoadLink,yesLL,yesGF,yesGS,NodoDebrisLink,yesDL,...
|
||
rDL,Ndatidespike,FileName);
|
||
|
||
% Carico i dati dal database a seconda della catena
|
||
[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);
|
||
|
||
% Controllo incrociato fra la data iniziale definita da Lettura e la data
|
||
% iniziale definita da LastElab
|
||
[DatiElabTriggerLink,DatiElabShockSensor,DatiElabDebrisLink] = checkdata(...
|
||
yesTrL,yesSS,yesDL,DatiElabTriggerLink,DatiElabShockSensor,DatiElabDebrisLink,...
|
||
datainiTrL,datainiSS,datainiDL,rTrL,rSS,rDL,tempoiniTrL,tempoiniSS,tempoiniDL,...
|
||
NodoTriggerLink,NodoSS,NodoDebrisLink,NuovoZeroTrL,NuovoZeroSS,NuovoZeroDL,...
|
||
IDcentralina,DTcatena,conn,FileName);
|
||
|
||
%% ---Parte di definizione dati---
|
||
|
||
%% RSN Link
|
||
if yesRSN == 1 % attiva l'elaborazione dei RSN Link
|
||
[TimeRSN,accRSN,tempRSN,ErrRSNLink] = defDatiRSN(MEMS,DatiRSNLink,...
|
||
ErrRSNLink,rRSN,Ndatidespike,FileName);
|
||
% Conversione dei dati grezzi
|
||
[accRSN,ris_acc,tempRSN] = conv_grezziRSN(rRSN,accRSN,...
|
||
tempRSN,DCalRSNTot,MEMS,FileName);
|
||
% medie
|
||
[angRSN,ARRAYdateRSN,TempDef_RSN] = MediaDati_RSN(accRSN,TimeRSN,tempRSN,...
|
||
NdatiMedia,FileName);
|
||
else
|
||
ARRAYdateRSN = [];
|
||
end
|
||
% Pulisco le variabili che non uso
|
||
clear DatiRSNLink
|
||
clear TimeRSN
|
||
clear accRSN
|
||
clear tempRSN
|
||
clear DCalRSNTot
|
||
|
||
%% RSN Link HR
|
||
if yesRSNHR == 1 % attiva l'elaborazione dei RSN Link HR
|
||
[TimeRSNHR,angRSNHR,tempRSNHR,ErrRSNLinkHR] = defDatiRSNHR(DatiRSNLinkHR,...
|
||
ErrRSNLinkHR,rRSNHR,IDcentralina,DTcatena,Ndatidespike,NuovoZeroRSNHR,FileName);
|
||
% Conversione dei dati grezzi
|
||
[angRSNHR,T_RSNHR] = conv_grezziRSNHR(angRSNHR,tempRSNHR,DCalRSNHRTot,rRSNHR,FileName);
|
||
% Media
|
||
[angRSNHR,ARRAYdateRSNHR,TempDef_RSNHR] = MediaDati_RSNHR(angRSNHR,...
|
||
TimeRSNHR,T_RSNHR,NdatiMedia,FileName);
|
||
else
|
||
ARRAYdateRSNHR = [];
|
||
end
|
||
% Pulisco le variabili che non uso
|
||
clear DatiRSNLinkHR
|
||
clear TimeRSNHR
|
||
clear tempRSNHR
|
||
clear DCalRSNHRTot
|
||
clear T_RSNHR
|
||
|
||
%% Trigger Link
|
||
if yesTrL == 1 % attiva l' definizione dei dati dei Trigger Link
|
||
[ARRAYdateTrL,val_TrL,ErrTriggerLink] = defDatiTrL(DatiTriggerLink,...
|
||
Type,ErrTriggerLink,rTrL,NuovoZeroTrL,FileName);
|
||
else
|
||
ARRAYdateTrL = [];
|
||
end
|
||
clear Type
|
||
|
||
%% Shock Sensor
|
||
if yesSS == 1 % attiva l' definizione dei dati dei Trigger Link
|
||
[ARRAYdateSS,val_SS,ErrShockSensor] = defDatiSS(DatiShockSensor,...
|
||
ErrShockSensor,rSS,FileName);
|
||
else
|
||
ARRAYdateSS = [];
|
||
end
|
||
|
||
%% Load Link
|
||
if yesLL == 1 % attiva l'elaborazione dei Load Link
|
||
[TimeLL,ADCLoad,ErrLoadLink] = defDatiLL(DatiLoadLink,ErrLoadLink,rLL,Ndatidespike,FileName);
|
||
% Conversione dei dati grezzi
|
||
DatiLoad = conv_grezziLL(ADCLoad,DCalLLTot,NodoLoadLink,FileName);
|
||
% Media
|
||
[LoadDef,ARRAYdateLL] = MediaDati_LL(DatiLoad,TimeLL,NdatiMedia,FileName);
|
||
else
|
||
ARRAYdateLL = [];
|
||
end
|
||
% Pulisco le variabili che non uso
|
||
clear DatiLoadLink
|
||
clear TimeLL
|
||
clear ADCLoad
|
||
clear DCalLLTot
|
||
clear DatiLoad
|
||
|
||
%% ---Parte di Elaborazione---
|
||
|
||
%% RSN Link
|
||
if yesRSN == 1
|
||
[AlfaX,AlfaY,TempDef_RSN,ARRAYdateRSN,ErrRSNLink] = elaborazione_RSN(conn,...
|
||
IDcentralina,DTcatena,MEMS,rRSN,ris_acc,tolleranzaAcc,angRSN,Tmax,Tmin,TempDef_RSN,...
|
||
NodoRSNLink,ARRAYdateRSN,NuovoZeroRSN,NdatiMedia,Ndatidespike,ErrRSNLink,datainiRSN,...
|
||
pos_inst,FileName);
|
||
else
|
||
[AlfaX,AlfaY,TempDef_RSN,ARRAYdateRSN] = matrici_vuote_RSN(FileName);
|
||
end
|
||
clear MEMS
|
||
clear ris_acc
|
||
clear tolleranza Acc
|
||
clear angRSN
|
||
clear NuovoZeroRSN
|
||
|
||
%% RSN Link HR
|
||
if yesRSNHR == 1
|
||
[AlfaX_HR,AlfaY_HR,TempDef_RSNHR,ARRAYdateRSNHR,ErrRSNLinkHR] = ...
|
||
elaborazione_RSNHR(conn,IDcentralina,DTcatena,rRSNHR,angRSNHR,Tmax,Tmin,...
|
||
TempDef_RSNHR,NodoRSNLinkHR,ARRAYdateRSNHR,NuovoZeroRSNHR,NdatiMedia,...
|
||
Ndatidespike,datainiRSNHR,ErrRSNLinkHR,FileName);
|
||
else
|
||
[AlfaX_HR,AlfaY_HR,TempDef_RSNHR] = matrici_vuote_RSNHR(FileName);
|
||
end
|
||
clear angRSNHR
|
||
clear NuovoZeroRSNHR
|
||
|
||
%% Load Link
|
||
if yesLL == 1
|
||
[LoadDef,ErrLoadLink,ARRAYdateLL] = loadcell(LoadDef,ErrLoadLink,...
|
||
ARRAYdateLL,NuovoZeroLL,NdatiMedia,Ndatidespike,yesRSN,IDcentralina,DTcatena,FileName);
|
||
else
|
||
LoadDef = [];
|
||
end
|
||
clear NuovoZeroLL
|
||
|
||
%% Elaborazione Trigger Link
|
||
if yesTrL == 1
|
||
if NuovoZeroTrL == 1
|
||
cont = 3;
|
||
[ndate,~] = size(val_TrL);
|
||
StoricoTrigger = zeros(ndate,rTrL);
|
||
for n = 1:rTrL
|
||
StoricoTrigger(:,n) = cumsum(val_TrL(:,n))+cell2mat(DatiElabTriggerLink(1,cont));
|
||
cont = cont+3;
|
||
end
|
||
else
|
||
StoricoTrigger = cumsum(val_TrL);
|
||
end
|
||
text = 'Trigger Link elaborated correctly';
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
fprintf(fileID,fmt,text);
|
||
fclose(fileID);
|
||
else
|
||
StoricoTrigger = [];
|
||
val_TrL=[];
|
||
ARRAYdateTrL = [];
|
||
text = 'Trigger Link has not been elaborated';
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
fprintf(fileID,fmt,text);
|
||
fclose(fileID);
|
||
end
|
||
clear NuovoZeroTrL
|
||
|
||
%% Elaborazione Shock Sensor
|
||
if yesSS == 1
|
||
if NuovoZeroSS == 1
|
||
cont = 3;
|
||
[ndate,~] = size(val_SS);
|
||
StoricoShock = zeros(ndate,rSS);
|
||
ss = 1;
|
||
while ss <= ndate
|
||
if val_SS(ss) == 1 && val_SS(ss+1) == 1 && val_SS(ss+2) == 1
|
||
val_SS(ss+1) = 0;
|
||
val_SS(ss+2) = 0;
|
||
ss = ss+3;
|
||
else
|
||
ss = ss+1;
|
||
end
|
||
end
|
||
for n = 1:rSS
|
||
StoricoShock(:,n) = cumsum(val_SS(:,n))+cell2mat(DatiElabShockSensor(1,cont));
|
||
cont = cont+3;
|
||
end
|
||
else
|
||
StoricoShock = cumsum(val_SS);
|
||
end
|
||
text = 'Shock Sensor elaborated correctly';
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
fprintf(fileID,fmt,text);
|
||
fclose(fileID);
|
||
else
|
||
StoricoShock = [];
|
||
val_SS = [];
|
||
ARRAYdateSS = [];
|
||
text = 'Shock Sensor has not been elaborated';
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
fprintf(fileID,fmt,text);
|
||
fclose(fileID);
|
||
end
|
||
clear NuovoZeroSS
|
||
|
||
%% G-Flow
|
||
if yesGF == 1
|
||
ARRAYdateGF = datenum(DatiGFLink(:,1));
|
||
DatiGFLink = cell2mat(DatiGFLink(:,2:end));
|
||
else
|
||
ARRAYdateGF = [];
|
||
DatiGFLink = [];
|
||
end
|
||
|
||
%% G-Shock
|
||
if yesGS == 1
|
||
ARRAYdateGS = datenum(DatiGSLink(:,1));
|
||
DatiGSLink = cell2mat(DatiGSLink(:,2:end));
|
||
else
|
||
ARRAYdateGS = [];
|
||
DatiGSLink = [];
|
||
end
|
||
|
||
%% Scrittura Database
|
||
database_write(catena,IDcentralina,DTcatena,...
|
||
AlfaX,AlfaY,TempDef_RSN,ARRAYdateRSN,ErrRSNLink,...
|
||
AlfaX_HR,AlfaY_HR,TempDef_RSNHR,ARRAYdateRSNHR,ErrRSNLinkHR,...
|
||
LoadDef,ErrLoadLink,ARRAYdateLL,val_TrL,StoricoTrigger,ErrTriggerLink,ARRAYdateTrL,...
|
||
val_SS,StoricoShock,ErrShockSensor,ARRAYdateSS,conn,FileName);
|
||
|
||
%% Parte di lancio SW complementari
|
||
yesMusa = SWSearch(idTool,conn,FileName);
|
||
try
|
||
if yesMusa == 1
|
||
rilancio = ['/usr/local/matlab_func/run_Musa_lnx.sh /usr/local/MATLAB/MATLAB_Runtime/v93 ' IDcentralina ' ' DTcatena ''];
|
||
status = system(rilancio);
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
text = 'Musa relaunch operation executed with success';
|
||
fprintf(fileID,fmt,text);
|
||
fprintf(fileID,fmt,status);
|
||
fclose(fileID);
|
||
end
|
||
catch err
|
||
FileErr = ['ErrorFile-' IDcentralina '-' datestr(today) '-' datestr(now,'hhMMss')];
|
||
fid = fopen(FileErr,'a+');
|
||
fprintf(fid, '%s', err.getReport('extended','hyperlinks','off'));
|
||
fclose(fid);
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
text = 'relaunch operation FAILED';
|
||
fprintf(fileID,fmt,text);
|
||
fclose(fileID);
|
||
end
|
||
|
||
%% Parte di allertamento
|
||
|
||
% Determino gli utenti da utilizzare in tutte le funzioni successive
|
||
[Mail,~,~,Users_Report,~,activeEN,~,siteID,NomeSito,~] = Users_Def(IDcentralina,conn,FileName);
|
||
|
||
% Determino alcune informazioni del sito che mi servono nei passaggi
|
||
% successivi
|
||
[unitID,chainID,Chain_Scheme,num_nodi,alarms] = Site_Info(siteID,conn,FileName);
|
||
|
||
% Soglie e Trigger
|
||
SirenON = alert_Levels(IDcentralina,DTcatena,ARRAYdateTrL,ARRAYdateSS,...
|
||
ARRAYdateRSN,datainiRSN,ARRAYdateRSNHR,ARRAYdateLL,ARRAYdateGF,ARRAYdateGS,SEL,MEL,...
|
||
val_TrL,val_SS,LoadDef,DatiGFLink,DatiGSLink,rTrL,rRSN,rRSNHR,rLL,yesTrL,yesSS,...
|
||
yesRSN,yesRSNHR,yesLL,yesGF,yesGS,NomeSito,date,conn,FileName);
|
||
|
||
% Attivazione dispositivi come sirene, semafori, etc.
|
||
Siren(alarms,datainiSS,datainiTrL,datainiRSN,datainiRSNHR,datainiLL,...
|
||
tempoiniSS,tempoiniTrL,tempoiniRSN,tempoiniRSNHR,tempoiniLL,ARRAYdateSS,ARRAYdateTrL,...
|
||
ARRAYdateRSN,ARRAYdateRSNHR,ARRAYdateLL,SirenON,conn,date,time,FileName);
|
||
|
||
% Controllo del Livello della Batteria
|
||
checkBattery(Batteria,IDcentralina,Unit,Mail,conn,FileName);
|
||
|
||
% Controllo della data di chiusura piattaforma per una determinata centralina
|
||
checkUnit(IDcentralina,conn,FileName);
|
||
|
||
% Controllo della data di scadenza per una determinata SIM
|
||
checkSIM(IDcentralina,conn,FileName);
|
||
|
||
% Controllo della data di scadenza della visualizzazione GIS per un
|
||
% determinato sito
|
||
checkGIS(siteID,NomeSito,conn,FileName);
|
||
|
||
% Redazione del Report Automatico
|
||
Report_ASE(IDcentralina,unitID,chainID,alarms,Chain_Scheme,num_nodi,...
|
||
Users_Report,Mail,time,activeEN,siteID,conn,FileName);
|
||
|
||
% Chiudo connessione al database
|
||
close(conn)
|
||
|
||
T = num2str(toc);
|
||
text = ['RSN elaboration completed in ' T '!'];
|
||
fileID = fopen(FileName,'a');
|
||
fmt = '%s \r';
|
||
fprintf(fileID,fmt,text);
|
||
fclose(fileID);
|
||
|
||
RC = 0;
|
||
end
|