Sync from remote server: 2025-10-12 18:56:41
This commit is contained in:
225
RSN/Siren.m
Executable file
225
RSN/Siren.m
Executable file
@@ -0,0 +1,225 @@
|
||||
function Siren(alarms,datainiSS,datainiTrL,datainiRSN,datainiRSNHR,datainiLL,...
|
||||
tempoiniSS,tempoiniTrL,tempoiniRSN,tempoiniRSNHR,tempoiniLL,ARRAYdateSS,ARRAYdateTrL,...
|
||||
ARRAYdateRSN,ARRAYdateRSNHR,ARRAYdateLL,SirenON,conn,date,time,FileName)
|
||||
|
||||
fileID = fopen(FileName,'a');
|
||||
fmt = '%s \r';
|
||||
|
||||
text = 'Siren function started';
|
||||
fprintf(fileID,fmt,text);
|
||||
|
||||
[rA,cA] = size(alarms);
|
||||
|
||||
sirena = 0;
|
||||
if rA > 0 && cA > 1
|
||||
for aa = 1:rA
|
||||
if cell2mat(alarms(aa,3)) == 1
|
||||
sirena = 1;
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if cA ~= 1 && sirena == 1
|
||||
% Attivazione della Sirena al superamento di una determinata soglia
|
||||
if yesSS == 1
|
||||
dataini = datainiSS;
|
||||
tempoini = tempoiniSS;
|
||||
ARRAYdateAL = ARRAYdateSS;
|
||||
elseif yesTrL == 1
|
||||
dataini = datainiTrL;
|
||||
tempoini = tempoiniTrL;
|
||||
ARRAYdateAL = ARRAYdateTrL;
|
||||
elseif yesRSN == 1
|
||||
dataini = datainiRSN;
|
||||
tempoini = tempoiniRSN;
|
||||
ARRAYdateAL = ARRAYdateRSN;
|
||||
elseif yesRSNHR == 1
|
||||
dataini = datainiRSNHR;
|
||||
tempoini = tempoiniRSNHR;
|
||||
ARRAYdateAL = ARRAYdateRSNHR;
|
||||
elseif yesLL == 1
|
||||
dataini = datainiLL;
|
||||
tempoini = tempoiniLL;
|
||||
ARRAYdateAL = ARRAYdateLL;
|
||||
end
|
||||
[ListaDate,~] = size(ARRAYdateAL);
|
||||
val_AL = zeros(ListaDate,rA);
|
||||
StoricoAllarmi = zeros(ListaDate,rA);
|
||||
|
||||
dateCheck = [date ' ' time];
|
||||
if dataini < datenum(dateCheck)
|
||||
dataini = date;
|
||||
tempoini = time;
|
||||
else
|
||||
dataini = datestr(dataini,'yyyy-mm-dd HH:MM:SS');
|
||||
end
|
||||
|
||||
%% QUI ANDRA' INSERITO IL CRITERIO DI ATTIVAZIONE DELL'ALLARME
|
||||
|
||||
% Criterio di attivazione dell'allarme
|
||||
%-------------------------------------
|
||||
if SirenON == 1
|
||||
val_AL(end,:) = 1; % Da mettere a posto!
|
||||
% Criterio di attivazione dell'SMS
|
||||
AL = 1;
|
||||
DATAinsert = cell(1,5);
|
||||
Data = datestr(ARRAYdateAL(end,1),'yyyy-mm-dd HH:MM:SS');
|
||||
for ii = 1:rA % numero di allarmi
|
||||
if val_AL(end,ii) == 1 && ARRAYdateAL(end,1) > alarms(ii,end)
|
||||
desc = strjoin(alarms(ii,5),alarms(ii,6),'ON');
|
||||
DATAinsert{AL,1} = 6; % Sirena e lampeggiante
|
||||
DATAinsert{AL,2} = alarms(ii,2); % ID del CT
|
||||
DATAinsert{AL,3} = Data; % Data & ora
|
||||
DATAinsert{AL,4} = 1; % SMS
|
||||
DATAinsert{AL,5} = desc; % Codice da inviare
|
||||
allarme = 1;
|
||||
AL = AL+1;
|
||||
end
|
||||
end
|
||||
|
||||
if allarme == 1
|
||||
AL = AL-1; % Numero totale di allarmi
|
||||
for a = 1:AL
|
||||
% Cerco se il dato è già presente
|
||||
Data = DATAinsert{a,3};
|
||||
type = num2str(DATAinsert{a,1}); % tipologia
|
||||
IDtool = num2str(DATAinsert{a,2}); % ID del CT
|
||||
desc = DATAinsert{a,5}; % Descrizione
|
||||
comando = ['select id from alarms where tool_name = ''' IDtool ''' and date_time = ''' ...
|
||||
Data ''' and type_id = ''' type ''' and description like ''' desc ''' order by date_time'];
|
||||
curs = exec(conn,comando);
|
||||
curs = fetch(curs);
|
||||
idDate = curs.Data;
|
||||
if cell2mat(idDate) == 0
|
||||
idElabData = 0; % 0 indica che il dato non è presente su DB
|
||||
else
|
||||
idElabData = cell2mat(idDate);
|
||||
end
|
||||
tablename = 'alarms';
|
||||
colnames = {'type_id','tool_name','date_time','send_sms','description'};
|
||||
data = [DATAinsert(a,1),DATAinsert(a,2),DATAinsert(a,3),DATAinsert(a,4),DATAinsert(a,5)];
|
||||
if idElabData == 0 % Scrivo
|
||||
fastinsert(conn,tablename,colnames,data);
|
||||
text = ['ALERT was written in the DB by Siren function for date: ''' Data ''' '];
|
||||
else % Aggiorno
|
||||
whereclause = ['WHERE tool_name = ''' DATAinsert{a,2} ''' and date_time = ''' DATAinsert{a,3} ...
|
||||
''' and type_id = ''' type ''' and description like ''' desc ''' '];
|
||||
update(conn,tablename,colnames,data,whereclause)
|
||||
text = ['ALERT was updated in the DB by Siren function for date: ''' Data ''' '];
|
||||
end
|
||||
fprintf(fileID,fmt,text);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Control = 1;
|
||||
while Control == 1
|
||||
for nn = 1:rA
|
||||
% Scarico i dati storici di attivazione dell'allarme
|
||||
comando = ['select EventDate, EventTime, X from ELABDATACTRL where EventDate = ''' ...
|
||||
dataini ''' and EventTime >= ''' tempoini ''' and CtrlToolName = '''...
|
||||
char(alarms(nn,2)) ''' and NodeNum = 1 '];
|
||||
curs = exec(conn,comando);
|
||||
curs = fetch(curs);
|
||||
AlarmTot_1 = curs.Data; % numero cumulato di attivazioni prima della lettura in elaborazione
|
||||
|
||||
comando = ['select EventDate, EventTime, X from ELABDATACTRL where EventDate > ''' ...
|
||||
dataini ''' and CtrlToolName = ''' char(alarms(nn,2)) ''' and NodeNum = 1 '];
|
||||
curs = exec(conn,comando);
|
||||
curs = fetch(curs);
|
||||
AlarmTot_2 = curs.Data; % numero cumulato di attivazioni prima della lettura in elaborazione
|
||||
|
||||
[r1,c1] = size(AlarmTot_1);
|
||||
[r2,c2] = size(AlarmTot_2);
|
||||
if r1 == 1 && c1 == 1
|
||||
if r2 == 1 && c2 == 1
|
||||
if dataini < datenum(dateCheck)
|
||||
AlarmTot(1,1) = cellstr(date);
|
||||
AlarmTot(1,2) = cellstr(time);
|
||||
AlarmTot(1,3) = cell;
|
||||
Control = 0;
|
||||
else
|
||||
dataini = dataini-1;
|
||||
break
|
||||
end
|
||||
else
|
||||
AlarmTot = AlarmTot_2;
|
||||
Control = 0;
|
||||
end
|
||||
else
|
||||
Control = 0;
|
||||
if r2 == 1 && c2 == 1
|
||||
AlarmTot = AlarmTot_1;
|
||||
else
|
||||
AlarmTot = [AlarmTot_1; AlarmTot_2];
|
||||
end
|
||||
end
|
||||
[rA,~] = size(AlarmTot);
|
||||
Data = [cell2mat(AlarmTot(:,1)) repmat(' ', [rA,1]) cell2mat(AlarmTot(:,2))];
|
||||
Data = datenum(Data);
|
||||
Var = find(Data < datenum(ARRAYdateAL(1,1)));
|
||||
if isempty(Var) == 1
|
||||
StoricoAllarmi(:,nn) = cumsum(val_AL);
|
||||
else
|
||||
StoricoAllarmi(:,nn) = cumsum(val_AL)+cell2mat(AlarmTot(Var(end),3));
|
||||
end
|
||||
|
||||
DATAinsert = cell(ListaDate,6);
|
||||
% Creo i dati da scrivere
|
||||
for ii=1:ListaDate
|
||||
DATAinsert{ii,1} = alarms(nn,2);
|
||||
DATAinsert{ii,2} = datestr(ARRAYdateAL(ii),'yyyy-mm-dd');
|
||||
DATAinsert{ii,3} = datestr(ARRAYdateAL(ii),'HH:MM:SS');
|
||||
DATAinsert{ii,4} = val_AL(ii,nn);
|
||||
DATAinsert{ii,5} = StoricoAllarmi(ii,nn);
|
||||
DATAinsert{ii,6} = 1;
|
||||
end
|
||||
idElabData = zeros(ListaDate,1); % Contiene gli id delle date delle quali ho già dati
|
||||
cc = 1; % contatore
|
||||
% Cerco su DB se i dati sono da aggiornare o scrivere
|
||||
for ii = 1:ListaDate
|
||||
dString = datestr(ARRAYdateAL(ii),'yyyy-mm-dd');
|
||||
tString = datestr(ARRAYdateAL(ii),'HH:MM:SS');
|
||||
|
||||
comando = ['select idElabDataCtrl from ELABDATACTRL where CtrlToolName = '''...
|
||||
char(alarms(nn,2)) ''' and NodeNum = 1 and EventDate = ''' ...
|
||||
dString ''' and EventTime = ''' tString ''' '];
|
||||
curs = exec(conn,comando);
|
||||
curs = fetch(curs);
|
||||
idDate = curs.Data;
|
||||
if strcmp(idDate,'No Data')
|
||||
idElabData(cc,1) = 0; % 0 indica che il dato non è presente su DB
|
||||
else
|
||||
idElabData(cc,1) = cell2mat(idDate);
|
||||
end
|
||||
cc = cc+1;
|
||||
% Scrivo o Aggiorno i dati
|
||||
idData = idElabData(ii,1);
|
||||
tablename = 'ELABDATACTRL';
|
||||
if idData == 0 % Se la data non è su DB (=0), scrivo i dati
|
||||
colnames = {'CtrlToolName','EventDate','EventTime','XShift','X','NodeNum',};
|
||||
data = [DATAinsert(ii,1),DATAinsert(ii,2),DATAinsert(ii,3),...
|
||||
DATAinsert(ii,4),DATAinsert(ii,5),DATAinsert(ii,6)];
|
||||
fastinsert(conn,tablename,colnames,data);
|
||||
else % altrimenti li aggiorno
|
||||
colnames = {'XShift','X'};
|
||||
data = [DATAinsert(ii,4),DATAinsert(ii,5)];
|
||||
whereclause = ['WHERE CtrlToolName = ''' char(alarms(nn,2)) ...
|
||||
''' and NodeNum = 1 and EventDate = ''' cell2mat(DATAinsert(ii,2))...
|
||||
''' and EventTime = ''' cell2mat(DATAinsert(ii,3)) ''' '];
|
||||
update(conn,tablename,colnames,data,whereclause)
|
||||
end
|
||||
end
|
||||
text = ['Data of Control Tools ' char(alarms(nn,2)) ' uploaded in the DB correctly'];
|
||||
fprintf(fileID,fmt,text);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
text = 'Siren function executed correctly';
|
||||
fprintf(fileID,fmt,text);
|
||||
fclose(fileID);
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user