225 lines
8.7 KiB
Matlab
Executable File
225 lines
8.7 KiB
Matlab
Executable File
function alarms = Siren(siteID,yesTuL,yesRL,yesTLH,yesTLHRH,yesPCL,yesPCLHR,...
|
|
yesCrL,yes3DCrL,yes2DCrL,yesEL,yes3DEL,yesWEL,yesMPBEL,datainiTuL,tempoiniTuL,...
|
|
datainiRL,tempoiniRL,datainiTLH,tempoiniTLH,datainiTLHRH,tempoiniTLHRH,...
|
|
datainiPCL,tempoiniPCL,datainiPCLHR,tempoiniPCLHR,datainiCrL,tempoiniCrL,...
|
|
dataini3DCrL,tempoini3DCrL,dataini2DCrL,tempoini2DCrL,...
|
|
datainiEL,tempoiniEL,dataini3DEL,tempoini3DEL,...
|
|
datainiWEL,tempoiniWEL,datainiMPBEL,tempoiniMPBEL,ARRAYdate_TuL,ARRAYdate_RL,...
|
|
ARRAYdate_TLH,ARRAYdate_TLHRH,ARRAYdate_PCL,ARRAYdate_PCLHR,ARRAYdate_CrL,...
|
|
ARRAYdate_3DCrL,ARRAYdate_2DCrL,ARRAYdate_EL,ARRAYdate_3DEL,ARRAYdate_WEL,ARRAYdate_MPBEL,...
|
|
conn,date,time,FileName)
|
|
|
|
fileID = fopen(FileName,'a');
|
|
fmt = '%s \r';
|
|
|
|
text = 'Siren function started';
|
|
fprintf(fileID,fmt,text);
|
|
|
|
% Scarico l'allarme relativo al sito
|
|
comando = ['select id, name, ctrltype_id from ctrltools where site_id = ''' siteID ''' '];
|
|
curs = exec(conn,comando);
|
|
curs = fetch(curs);
|
|
alarms = curs.Data;
|
|
[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
|
|
if yesTuL == 1
|
|
ARRAYdateAL = ARRAYdate_TuL;
|
|
elseif yesRL == 1
|
|
ARRAYdateAL = ARRAYdate_RL;
|
|
elseif yesTLH == 1
|
|
ARRAYdateAL = ARRAYdate_TLH;
|
|
elseif yesTLHRH == 1
|
|
ARRAYdateAL = ARRAYdate_TLHRH;
|
|
elseif yesPCL == 1
|
|
ARRAYdateAL = ARRAYdate_PCL;
|
|
elseif yesPCLHR == 1
|
|
ARRAYdateAL = ARRAYdate_PCLHR;
|
|
elseif yesCrL == 1
|
|
ARRAYdateAL = ARRAYdate_CrL;
|
|
elseif yes3DCrL == 1
|
|
ARRAYdateAL = ARRAYdate_3DCrL;
|
|
elseif yes2DCrL == 1
|
|
ARRAYdateAL = ARRAYdate_2DCrL;
|
|
elseif yesEL == 1
|
|
ARRAYdateAL = ARRAYdate_EL;
|
|
elseif yes3DEL == 1
|
|
ARRAYdateAL = ARRAYdate_3DEL;
|
|
elseif yesWEL == 1
|
|
ARRAYdateAL = ARRAYdate_WEL;
|
|
elseif yesMPBEL == 1
|
|
ARRAYdateAL = ARRAYdate_MPBEL;
|
|
end
|
|
[ListaDate,~] = size(ARRAYdateAL);
|
|
val_AL = zeros(ListaDate,rA);
|
|
StoricoAllarmi = zeros(ListaDate,rA);
|
|
% Attivazione della Sirena al superamento di una determinata soglia
|
|
|
|
if yesTuL == 1
|
|
dataini = datainiTuL;
|
|
tempoini = tempoiniTuL;
|
|
elseif yesRL == 1
|
|
dataini = datainiRL;
|
|
tempoini = tempoiniRL;
|
|
elseif yesTLH == 1
|
|
dataini = datainiTLH;
|
|
tempoini = tempoiniTLH;
|
|
elseif yesTLHRH == 1
|
|
dataini = datainiTLHRH;
|
|
tempoini = tempoiniTLHRH;
|
|
elseif yesPCL == 1
|
|
dataini = datainiPCL;
|
|
tempoini = tempoiniPCL;
|
|
elseif yesPCLHR == 1
|
|
dataini = datainiPCLHR;
|
|
tempoini = tempoiniPCLHR;
|
|
elseif yesCrL == 1
|
|
dataini = datainiCrL;
|
|
tempoini = tempoiniCrL;
|
|
elseif yes3DCrL == 1
|
|
dataini = dataini3DCrL;
|
|
tempoini = tempoini3DCrL;
|
|
elseif yes2DCrL == 1
|
|
dataini = dataini2DCrL;
|
|
tempoini = tempoini2DCrL;
|
|
elseif yesEL == 1
|
|
dataini = datainiEL;
|
|
tempoini = tempoiniEL;
|
|
elseif yes3DEL == 1
|
|
dataini = dataini3DEL;
|
|
tempoini = tempoini3DEL;
|
|
elseif yesWEL == 1
|
|
dataini = datainiWEL;
|
|
tempoini = tempoiniWEL;
|
|
elseif yesMPBEL == 1
|
|
dataini = datainiMPBEL;
|
|
tempoini = tempoiniMPBEL;
|
|
end
|
|
dateCheck = [date ' ' time];
|
|
if dataini < datenum(dateCheck)
|
|
dataini = date;
|
|
tempoini = time;
|
|
else
|
|
dataini = datestr(dataini,'yyyy-mm-dd HH:MM:SS');
|
|
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 datenum(dataini) < datenum(dateCheck)
|
|
AlarmTot(1,1) = cellstr(date);
|
|
AlarmTot(1,2) = cellstr(time);
|
|
AlarmTot(1,3) = num2cell(0);
|
|
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
|
|
|
|
|