Vai al contenuto
PLC Forum


Estrapolazione Codice Numerico


ste6

Messaggi consigliati

Buongiorno ragazzi,

la situazione è la seguente:

ho una DBnn di 160 bool (20 byte) che raccoglie gli allarmi di una macchina.

Il software gestisce in modo indipendente ogni singolo bit e, a seconda delle condizioni esterne, alza il bit del relativo allarme.

Problema: devo generare un numero (da 1 a 160) che identifica in modo univoco l'allarme uscito e passarlo ad uno scada di supervisione.

Es. si alza il bit DBnn.DBX1.4 , i numero generato sarà 13. (DBX1.4 è il 13° bit dall'inizio della DB).

Ho provato con loop e variabili indicizzate ma non ho ottenuto niente di valido.

Grazie in anticipo a tutti coloro che ci perderanno del tempo.

Saluti

Link al commento
Condividi su altri siti


se gli allarmi fossero più di uno? che numero passi?

il modo più semplice ma più lungo da scrivere e poco elegante è:

u dbxx.dbx0.0
spbn 0001
l 1
spa code
// 
0001: u dbxx.dbx0.1
spbn 0002
l 2
spa code
 
.....
 
0160: u dbxx.dbx19.7
spbn FINE
l 160
CODE: T Dbxx.DBwxx
FINE: nop 0

in questo modo al primo bit di allarme ad uno scriverai in dbxx.dbwxx il valore corrispondente

Modificato: da ken
Link al commento
Condividi su altri siti

Si Ken, avevo pensato anche io ad una cosa del genere ma è decisamente molto lunga e, se mi passi il termine, poco "automatizzata".

Ho delle macchine dove posso arrivare a 500 allarmi e in questo caso, il codice diventerebbe decisamente pesante.

L'intenzione è comunque di beccare il primo allarme in ordine di apparizione e passare il codice di quello.

Io pensavo ad un loop e utilizzare come numero da passare l'indice di puntamento nella DB incrementato dal loop ............

Link al commento
Condividi su altri siti

Basta fare un loop con indice e un puntatore.

Interrogi lo stato dei bit e, se ne trovi uno alto, esci dal loop e scrivi il valore dell'indice.

Link al commento
Condividi su altri siti

Avevo pensato anch'io ad una cosa simile...però non è l'ultimo allarme, ma il primo.

In ogni caso, l'efficacia che può avere l'emissione di 1 segnalazione su 160 o 500, che sia la prima o l'ultima, su di uno scada...lascia il tempo che trova.

Se è uno scada, si può anche bere i 20 byte e farlo lui questo lavoretto.....altrimenti è uno scadino...o scaduto

Link al commento
Condividi su altri siti

Purtroppo, dott., lo scada non è mio. Viene realizzato da chissà chi in Corea e non ho ne tempo ne voglia di discutere con questi qua. Dare loro un numero ed una tabella excel con l'elenco degli allarmi è ciò che mi libera da qualsiasi complicazione.

Batta, avresti per caso un esempio di quello che descrivi nella tua risposta ?

Grazie ragazzi, questa si chiama disponibilità e collaborazione.

Ammirevole!

Link al commento
Condividi su altri siti

Ciao Ste6.

Quello che tu dovresti fare prima di tutto è di implementare la logica per il rilevamento del "nuovo allarme" .

Il tuo array di bit o byte che contiene le informazioni degli allarmi attivi (bit singoli) deve prima essere scandito per l'individuazione del "nuovo allarme"

e quindi il tuo codice di allarme rappresenta sempre l'allarme più recente .

Anche perchè altrimenti ti troveresti sempre ad inviare il codice dell'allarme che viene trovato per primo all'interno dell'array.

Per applicazioni come queste non dovresti gestire gli allarmi con lo standard ISA e cioè ALLARME ATTIVO --> RICONOSCIUTO --> CANCELLATO .

Ti devi percaso interfacciare con un DCS ?

bigalex :blink:

Link al commento
Condividi su altri siti

Al seguente link trovi un esempio di una funzione che ricerca un valore all'interno di un array.

http://www.plcforum.it/f/topic/181964-ricerca-di-un-valore-dentro-un-vettore/#entry1332091

Nel post #10 JumpMan ha apportato alcune modifiche ed ha aggiunto un parametro in uscita che indica dove è stato trovato il valore.

Ti basta modificare la funzione tenendo conto che tu dovrai interrogare dei bit e non delle word.

Modificato: da batta
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...