Sync from remote server: 2025-10-12 18:56:41
This commit is contained in:
305
ATD/alert_Levels.m
Executable file
305
ATD/alert_Levels.m
Executable file
@@ -0,0 +1,305 @@
|
||||
function alert_Levels(rLL,rCrL,DatiLoad,DatiCrack,ARRAYdate_LL,ARRAYdate_CrL,...
|
||||
ErrLoadLink,~,NodoLoadLink,NodoCrackLink,IDcentralina,DTcatena,...
|
||||
sms,date,time,conn,FileName)
|
||||
|
||||
fileID = fopen(FileName,'a');
|
||||
fmt = '%s \r';
|
||||
text = 'alert_Levels function started';
|
||||
fprintf(fileID,fmt,text);
|
||||
fclose(fileID);
|
||||
|
||||
alert = 0;
|
||||
alarm = 0;
|
||||
if strcmp(IDcentralina,'ID0081') && strcmp(DTcatena,'DT0009') % Varazze - Casanova - Via Fossello
|
||||
[numDate,~] = size(ARRAYdate_LL);
|
||||
indexALA = zeros(1,2);
|
||||
indexALE = zeros(1,2);
|
||||
cI = 1;
|
||||
cI2 = 1;
|
||||
for s = 1:rLL
|
||||
for n = 1:numDate
|
||||
if DatiLoad(n,s) > 588.4 % kN
|
||||
if ErrLoadLink(n,s) == 0 || ErrLoadLink(n,s) == 0.5 % Il nodo non è in errore
|
||||
alarm = 1;
|
||||
indexALA(cI,1) = n; % Data
|
||||
indexALA(cI,2) = s; % sensore
|
||||
cI = cI+1;
|
||||
end
|
||||
% elseif DatiLoad(n,s)-DatiLoad(n-1,s) > 0.3 % mm
|
||||
% if ErrLoadLink(n,s) == 0 || ErrLoadLink(n,s) == 0.5 % Il nodo non è in errore
|
||||
% alert = 1;
|
||||
% indexALE(cI2,1) = n; % Data
|
||||
% indexALE(cI2,2) = s; % fessurimetro
|
||||
% cI2 = cI2+1;
|
||||
% end
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif strcmp(IDcentralina,'ID0082') && strcmp(DTcatena,'DT0010') % Riva di Tures
|
||||
[numDate,~] = size(ARRAYdate_CrL);
|
||||
indexALA = zeros(1,2);
|
||||
indexALE = zeros(1,2);
|
||||
cI = 1;
|
||||
cI2 = 1;
|
||||
fuoriSoglia1 = zeros(numDate,rCrL); % Sensore 1 > 50 mm
|
||||
fuoriSoglia2 = zeros(numDate,rCrL); % Sensore 2 > 5 mm
|
||||
fuoriSoglia3 = zeros(numDate,rCrL); % Sensore 1 > 20 mm per 10 letture
|
||||
fuoriSoglia4 = zeros(numDate,rCrL); % Sensore 1 > 10 mm per 10 letture
|
||||
RIF = zeros(1,rCrL);
|
||||
for s = 1:rCrL
|
||||
NodeNumCrL = num2str(cell2mat(NodoCrackLink(s,2))); % scarico i dati del primo nodo Crack Link
|
||||
comando = ['select XShift from ElabDataView where EventDate = ''' ...
|
||||
date ''' and EventTime >= ''' time ''' and UnitName = ''' IDcentralina ...
|
||||
''' and ToolNameID = ''' DTcatena ''' and NodeNum = ' NodeNumCrL ' '];
|
||||
curs = exec(conn,comando);
|
||||
curs = fetch(curs);
|
||||
Data_LastElab = curs.Data;
|
||||
RIF(1,s) = cell2mat(Data_LastElab(1,1));
|
||||
for n = 1:numDate
|
||||
if DatiCrack(n,s) - RIF(1,s) > 50 % mm
|
||||
fuoriSoglia1(n,s) = 1;
|
||||
end
|
||||
if DatiCrack(n,s) - RIF(1,s) > 5 % mm
|
||||
fuoriSoglia2(n,s) = 1;
|
||||
end
|
||||
if n >= 10
|
||||
cont = 0;
|
||||
cont2 = 0;
|
||||
for aa = n-9:n
|
||||
if DatiCrack(aa,s) - RIF(1,s) > 20 % mm
|
||||
cont = cont+1;
|
||||
end
|
||||
if DatiCrack(aa,s) - RIF(1,s) > 10 % mm
|
||||
cont2 = cont2+1;
|
||||
end
|
||||
end
|
||||
if cont >= 10
|
||||
fuoriSoglia3(n,s) = 1;
|
||||
end
|
||||
if cont2 >= 10
|
||||
fuoriSoglia4(n,s) = 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for s = 1:rCrL
|
||||
for n = 10:numDate
|
||||
if fuoriSoglia1(n,s) == 1
|
||||
if fuoriSoglia3(n,s) == 1
|
||||
if s == 1
|
||||
if fuoriSoglia2(n,2) == 1 || fuoriSoglia2(n,3) == 1 || fuoriSoglia2(n,4) == 1
|
||||
alarm = 1;
|
||||
indexALA(cI,1) = n; % Data
|
||||
indexALA(cI,2) = s; % sensore
|
||||
cI = cI+1;
|
||||
end
|
||||
elseif s == 2
|
||||
if fuoriSoglia2(n,1) == 1 || fuoriSoglia2(n,3) == 1 || fuoriSoglia2(n,4) == 1
|
||||
alarm = 1;
|
||||
indexALA(cI,1) = n; % Data
|
||||
indexALA(cI,2) = s; % sensore
|
||||
cI = cI+1;
|
||||
end
|
||||
elseif s == 3
|
||||
if fuoriSoglia2(n,1) == 1 || fuoriSoglia2(n,2) == 1 || fuoriSoglia2(n,4) == 1
|
||||
alarm = 1;
|
||||
indexALA(cI,1) = n; % Data
|
||||
indexALA(cI,2) = s; % sensore
|
||||
cI = cI+1;
|
||||
end
|
||||
elseif s == 4
|
||||
if fuoriSoglia2(n,1) == 1 || fuoriSoglia2(n,2) == 1 || fuoriSoglia2(n,3) == 1
|
||||
alarm = 1;
|
||||
indexALA(cI,1) = n; % Data
|
||||
indexALA(cI,2) = s; % sensore
|
||||
cI = cI+1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if fuoriSoglia4(n,s) == 1
|
||||
alert = 1;
|
||||
indexALE(cI2,1) = n; % Data
|
||||
indexALE(cI2,2) = s; % sensore
|
||||
cI2 = cI2+1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if alert == 1 || alarm == 1
|
||||
|
||||
%% Controllo la data
|
||||
if alarm == 1
|
||||
if strcmp(IDcentralina,'ID0081') && strcmp(DTcatena,'DT0009') % Varazze - Casanova - Via Fossello
|
||||
dateALA = ARRAYdate_LL(indexALA(:,1));
|
||||
nodeALA = NodoLoadLink(indexALA(:,2),2);
|
||||
valALA = round(DatiLoad(indexALA(:,1),indexALA(:,2)),2);
|
||||
desc = 'kN';
|
||||
sms = 1;
|
||||
elseif strcmp(IDcentralina,'ID0082') && strcmp(DTcatena,'DT0010') % Riva di Tures
|
||||
dateALA = ARRAYdate_CrL(indexALA(:,1));
|
||||
nodeALA = NodoCrackLink(indexALA(:,2),2);
|
||||
valALA = round(DatiCrack(indexALA(:,1),indexALA(:,2)),2);
|
||||
desc = 'mm';
|
||||
sms = 1;
|
||||
end
|
||||
DataALA = dateALA(end);
|
||||
end
|
||||
if alert == 1
|
||||
if strcmp(IDcentralina,'ID0081') && strcmp(DTcatena,'DT0009') % Varazze - Casanova - Via Fossello
|
||||
dateALE = ARRAYdate_LL(indexALE(:,1));
|
||||
nodeALE = NodoLoadLink(indexALE(:,2),2);
|
||||
valALE = round(DatiLoad(indexALA(:,1),indexALA(:,2)),2);
|
||||
desc = 'kN';
|
||||
sms = 0;
|
||||
elseif strcmp(IDcentralina,'ID0082') && strcmp(DTcatena,'DT0010') % Riva di Tures
|
||||
dateALE = ARRAYdate_CrL(indexALE(:,1));
|
||||
nodeALE = NodoCrackLink(indexALE(:,2),2);
|
||||
valALE = round(DatiCrack(indexALA(:,1),indexALA(:,2)),2);
|
||||
desc = 'mm';
|
||||
sms = 0;
|
||||
end
|
||||
DataALE = dateALE(end);
|
||||
end
|
||||
|
||||
FileNameALA = ['' IDcentralina '-' DTcatena '-Alarm.txt'];
|
||||
if isfile(FileNameALA) == 1
|
||||
A = importdata(FileNameALA);
|
||||
[rA,~] = size(A);
|
||||
if rA == 0
|
||||
DataRifALE = 0;
|
||||
DataRifALA = 0;
|
||||
elseif rA == 1
|
||||
DataRifALA = A(1,1);
|
||||
DataRifALE = 0;
|
||||
else
|
||||
DataRifALA = A(1,1);
|
||||
DataRifALE = A(2,1);
|
||||
end
|
||||
else
|
||||
DataRifALE = 0;
|
||||
DataRifALA = 0;
|
||||
end
|
||||
DATA_rif = max(DataRifALA,DataRifALE); % Data della mail
|
||||
|
||||
if alert == 1 || alarm == 1
|
||||
if alert == 1 && alarm == 1
|
||||
DATA = max(DataALA,DataALE);
|
||||
DataWriteALA = DataALA;
|
||||
DataWriteALE = DataALE;
|
||||
elseif alert == 1
|
||||
DATA = DataALE;
|
||||
DataWriteALE = DataALE;
|
||||
DataWriteALA = DataRifALA;
|
||||
elseif alarm == 1
|
||||
DATA = DataALA;
|
||||
DataWriteALA = DataALA;
|
||||
DataWriteALE = DataRifALE;
|
||||
end
|
||||
|
||||
if DATA_rif >= DATA % Mail già inviata
|
||||
Mail = 0;
|
||||
else
|
||||
Mail = 1;
|
||||
end
|
||||
else
|
||||
DataWriteALA = DataRifALA;
|
||||
DataWriteALE = DataRifALE;
|
||||
end
|
||||
|
||||
if Mail == 1
|
||||
allarme = 0;
|
||||
DATAinsert = cell(1,9);
|
||||
AL = 1;
|
||||
for ii = 1:cI-1 % numero di allarmi
|
||||
if DATA_rif < dateALA(ii) % Allarme non ancora uscito
|
||||
Data = datestr(dateALA(ii),'yyyy-mm-dd HH:MM:SS');
|
||||
Valore = valALA(ii);
|
||||
Nodo = cell2mat(nodeALA(ii));
|
||||
Livello = 2;
|
||||
DATAinsert{AL,1} = 3; % Soglie tradizionali
|
||||
DATAinsert{AL,2} = IDcentralina;
|
||||
DATAinsert{AL,3} = DTcatena;
|
||||
DATAinsert{AL,4} = Nodo;
|
||||
DATAinsert{AL,5} = Data;
|
||||
DATAinsert{AL,6} = Valore;
|
||||
DATAinsert{AL,7} = Livello;
|
||||
DATAinsert{AL,8} = sms;
|
||||
DATAinsert{AL,9} = desc;
|
||||
allarme = 1;
|
||||
AL = AL+1;
|
||||
end
|
||||
end
|
||||
for ii = 1:cI2-1 % numero di allerte
|
||||
if DATA_rif < dateALE(ii) % Allerta non ancora uscita
|
||||
Data = datestr(dateALE(ii),'yyyy-mm-dd HH:MM:SS');
|
||||
Valore = valALE(ii);
|
||||
Nodo = cell2mat(nodeALE(ii));
|
||||
Livello = 1;
|
||||
DATAinsert{AL,1} = 3; % Soglie tradizionali
|
||||
DATAinsert{AL,2} = IDcentralina;
|
||||
DATAinsert{AL,3} = DTcatena;
|
||||
DATAinsert{AL,4} = Nodo;
|
||||
DATAinsert{AL,5} = Data;
|
||||
DATAinsert{AL,6} = Valore;
|
||||
DATAinsert{AL,7} = Livello;
|
||||
DATAinsert{AL,8} = sms;
|
||||
DATAinsert{AL,9} = desc;
|
||||
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,5};
|
||||
nNodo = num2str(DATAinsert{a,4}); % Numero nodo
|
||||
type = num2str(DATAinsert{a,1}); % tipologia
|
||||
level = num2str(DATAinsert{a,7}); % livello allarme
|
||||
value = num2str(DATAinsert{a,6}); % Valore
|
||||
desc = DATAinsert{a,9}; % Descrizione
|
||||
comando = ['select id, type_id, date_time from alarms where unit_name = ''' ...
|
||||
IDcentralina ''' and tool_name = ''' DTcatena ''' and node_num = ''' ...
|
||||
nNodo ''' and date_time = ''' Data ''' and type_id = ''' type ...
|
||||
''' and alarm_level = ''' level ''' and registered_value = ''' value ...
|
||||
''' and description like ''' desc ''' order by date_time'];
|
||||
curs = exec(conn,comando);
|
||||
curs = fetch(curs);
|
||||
idDate = curs.Data;
|
||||
if idDate == 0 || strcmp(idDate,'No Data') == 1
|
||||
idElabData = 0; % 0 indica che il dato non è presente su DB
|
||||
else
|
||||
idElabData = cell2mat(idDate(:,1));
|
||||
end
|
||||
tablename = 'alarms';
|
||||
colnames = {'type_id','unit_name','tool_name','node_num','date_time',...
|
||||
'registered_value','alarm_level','send_sms','description'};
|
||||
data = [DATAinsert(a,1),DATAinsert(a,2),DATAinsert(a,3),DATAinsert(a,4),...
|
||||
DATAinsert(a,5),DATAinsert(a,6),DATAinsert(a,7),DATAinsert(a,8),DATAinsert(a,9)];
|
||||
if idElabData == 0 % Scrivo
|
||||
fastinsert(conn,tablename,colnames,data);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
fileID = fopen(FileNameALA,'a');
|
||||
outdat = fopen(FileNameALA,'wt+');
|
||||
fmt = '%.10f \r';
|
||||
fprintf(fileID,fmt,DataWriteALA);
|
||||
fmt = '%.10f \r';
|
||||
fprintf(fileID,fmt,DataWriteALE);
|
||||
fclose(fileID);
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
text = ('alert_Levels function worked correctly');
|
||||
fileID = fopen(FileName,'a');
|
||||
fmt = '%s \r';
|
||||
fprintf(fileID,fmt,text);
|
||||
fclose(fileID);
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user