Jump to content
PLC Forum

daniele__32

trovare nuovo allarme

Recommended Posts

daniele__32

Ciao a tutti, chiedevo per curiosita' e anche per cercare il modo ottimale, la presenza di un nuovo allarme .

suppongo di avere una DB con 100 bit e di avere il bit 10.0 attivo per anomalia..segue quindi segnalazione acustica e visiva.

Come posso trovare in tale DB la presenza di un secondo nuovo allarme in modo da ridare la segnalazione?

grazie.

 

Link to post
Share on other sites

drn5

Ciao,

Dipende da chi spegne l'allarme acustico e quello luminoso. Io tengo una area uguale a quella di allarme per la tacitazione e una per akwnoledge. Se l'allarme viene tacitato ma non riconosciuto la sirena per quellalrme non suonerà più, se invece viene anche riconosciuto al prossimo allarme risuonerà.....detta un po' di corsa...

Link to post
Share on other sites
daniele__32

e io posso resettare da pulsante fisico, d un pulsante da un PC..quindi come lo fai il confronto fra le aree?
 

Link to post
Share on other sites
drn5
47 minuti fa, daniele__32 ha scritto:

quindi come lo fai il confronto fra le aree?

Dipende da come hai strutturato il tuo codice. 

Fai un confronto a bit nel blocco degli allarmi, immagino tu abbia un FC,FB... generale...

Ciao

Link to post
Share on other sites
Max.bocca69

Crei un bit che si alza quando c'è una variazione, basta fare un confronto tra l'attuale  e un precedente dove dopo il confronto il precedente é uguale all attuale. 

Link to post
Share on other sites
leleviola

io faccio un trasferimento della DB o dei bit degli allarmi in un'altra identica struttura di dati  al momento dell'acquisizione dell'allarme presente (pressione di un tasto o di un campo RESET sul pannello HMI) e sempre faccio un confronto fra le due strutture di dati e se non sono uguali faccio suonare e segnalare l'eventuale segnalazione sonora o visiva, in automatico se le due strutture sono diverse è automatica l'attivazione della sirena o della segnalazione, quando l'operatore acquisisce ogni nuova condizione la segnalzione non si attiva perchè entrambe le strutture di dati sono identiche, appena un nuovo allarme arriva l'ultima struttura acquisita è diversa da quella attuale e la segnalazione si attiva. E' ovvio che al momento dell'acquisizione allarme l'operatore a video prima di acquisire vede l'allarme attivo e al momento dell'acquisizione allarme se le condizioni lo permettono l'allarme viene azzerato o cancellato e memorizzata l'ultima struttura dei dati allarme, ogni cambiamento di qualsiasi bit allarme crea una nuova segnalazione

Edited by leleviola
Link to post
Share on other sites
batta

Ci sono molti modi.
Uno di questi, è il seguente:
- Struttura di bit di allarmi, con ogni allarme con il suo bel nome simbolico, che aiuta la programmazione

- Trasferimento della struttura di bit in un array di word con istruzione GATHER o GATHER_BLK

- L'array di word risulta già pronto anche per l'utilizzo come variabili di allarmi nel HMI Siemens, senza bisogno di scambiare byte od altro (con GATHER, il primo bit viene scritto come bit meno significativo della word)

- Un array di word dove memorizzare lo stato degli allarmi per poter rilevare entrata nuovo allarme.

Funziona tutto anche con blocchi ottimizzati, il che non guasta.
Questo è un esempio di codice di una funzione che, oltre a quanto descritto sopra, gestisce anche una maschera per filtrare allarmi e avvisi.
La funzione restituisce presenza allarme, presenza avviso, entrata nuovo allarme (on una scansione), entrata nuovo avviso (on una scansione).

Con qualche piccola modifica si può adattare alle proprie esigenze, magari eliminando la parte di mascheramento allarmi/avvisi se non serve, o aggiungendo un comando in ingresso per fare il reset degli allarmi.
Da notare che gli array, all'interno della funzione, sono dichiarati con dimensione non definita, quindi va sempre bene, per array di word di qualunque dimensione.
Importante, ovviamente, che l'array dove memorizzare lo stato degli allarmi e quello (eventuale) di mascheratura allarmi/avvisi, siano di dimensioni adeguate.

 

FUNCTION "RilevaAllarmi" : Void
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : batta
VERSION : 0.1
   VAR_OUTPUT 
      AlmPresent : Bool;
      AlmNew : Bool;
      WrnPresent : Bool;
      WrnNew : Bool;
   END_VAR

   VAR_IN_OUT 
      actAlmArray : Array[*] of Word;
      oldAlmArray : Array[*] of Word;
      wrnMaskArray : Array[*] of Word;
   END_VAR

   VAR_TEMP 
      tmpFirstElement : DInt;
      tmpLastElement : DInt;
      i : Int;
      tmpAlmWord : Word;
      tmpWrnWord : Word;
      tmpPrevStatusWord : Word;
   END_VAR


BEGIN
	// Rileva primo e ultimo elemento dell'array
	#tmpFirstElement := LOWER_BOUND(ARR := #actAlmArray, DIM := 1);
	#tmpLastElement := UPPER_BOUND(ARR := #actAlmArray, DIM := 1);
	
	#AlmNew := #AlmPresent := FALSE;
	#WrnNew := #WrnPresent := FALSE;
	
	// Allarmi e avvisi sono nelle stesse aree.
	// Per distinguere se si tratta di allarme o di avviso, si controlla lo stato dell'area MASK:
	// bit TRUE = Avviso; bit FALSE = Allarme
	// 
	FOR #i := #tmpFirstElement TO #tmpLastElement DO
	    // Appoggia allarmi, avvisi e stato precedente a variabili locali
	    #tmpAlmWord := #actAlmArray[#i] AND NOT #wrnMaskArray[#i];
	    #tmpWrnWord := #actAlmArray[#i] AND #wrnMaskArray[#i];
	    #tmpPrevStatusWord := #oldAlmArray[#i];
	    
	    //Rileva entrata nuovo allarme  
	    IF (#tmpAlmWord AND #tmpPrevStatusWord) <> 0 THEN
	        #AlmNew := TRUE;
	    END_IF;
	    
	    //Rileva presenza allarme
	    IF #tmpAlmWord <> 0 THEN
	        #AlmPresent := TRUE;
	    END_IF;
	    
	    //Rileva entrata nuovo avviso  
	    IF (#tmpWrnWord AND #tmpPrevStatusWord) <> 0 THEN
	        #WrnNew := TRUE;
	    END_IF;
	    
	    //Rileva presenza avviso
	    IF #tmpWrnWord <> 0 THEN
	        #WrnPresent := TRUE;
	    END_IF;
	    
	    //Memorizza stato inverso allarmi e avvisi
	    #oldAlmArray[#i] := NOT #actAlmArray[#i];
	END_FOR;
	
	
	
END_FUNCTION

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...