Sync from remote server: 2025-10-12 18:56:41
This commit is contained in:
375
RSN/RSN.m
Executable file
375
RSN/RSN.m
Executable file
@@ -0,0 +1,375 @@
|
||||
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<EFBFBD> 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
|
||||
Reference in New Issue
Block a user