ste6 Inserito: 9 giugno 2015 Segnala Share Inserito: 9 giugno 2015 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 More sharing options...
ken Inserita: 9 giugno 2015 Segnala Share Inserita: 9 giugno 2015 (modificato) 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: 9 giugno 2015 da ken Link al commento Condividi su altri siti More sharing options...
ste6 Inserita: 9 giugno 2015 Autore Segnala Share Inserita: 9 giugno 2015 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 More sharing options...
batta Inserita: 9 giugno 2015 Segnala Share Inserita: 9 giugno 2015 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 More sharing options...
dott.cicala Inserita: 9 giugno 2015 Segnala Share Inserita: 9 giugno 2015 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 More sharing options...
ste6 Inserita: 9 giugno 2015 Autore Segnala Share Inserita: 9 giugno 2015 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 More sharing options...
bigalex Inserita: 10 giugno 2015 Segnala Share Inserita: 10 giugno 2015 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 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 10 giugno 2015 Segnala Share Inserita: 10 giugno 2015 (modificato) 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: 10 giugno 2015 da batta Link al commento Condividi su altri siti More sharing options...
ste6 Inserita: 10 giugno 2015 Autore Segnala Share Inserita: 10 giugno 2015 Grazie batta, ci sto lavorando. Appena ho novità ti faccio sapere. x bigalex lo scada dovrebbe essere un MES Ciao ste Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora