Sync from remote server: 2025-10-12 18:56:41

This commit is contained in:
2025-10-12 18:56:59 +02:00
commit 7e8ee264aa
553 changed files with 161447 additions and 0 deletions

375
RSN/RSN.m Executable file
View 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