fabio.silvi Inserito: 10 giugno 2005 Segnala Inserito: 10 giugno 2005 Buongiorno,avrei bisogno di aiuto per risolvere una questione che a me sembrava estremamente banale:un'operazione logica ha come ingressi n bool,il risultato deve essere 1 solo se uno degli ingressi è 1.
Ermy Inserita: 10 giugno 2005 Segnala Inserita: 10 giugno 2005 Programmando con plc omron si può fare così:LD 0.0AND NOT 0.1LD 0.1AND NOT 0.0OR LDOUT 100.00Ciao
fabio.silvi Inserita: 10 giugno 2005 Autore Segnala Inserita: 10 giugno 2005 Purtroppo non conosco la programmazione dei plc Omrom.Mi scuso per non aver specificato all'inizio che utilizzo plc Siemens.Vorrei aggiungere inoltre che nella mia applicazione i miei ingressi bool sono nell'ordine delle decine.
tode72 Inserita: 10 giugno 2005 Segnala Inserita: 10 giugno 2005 Ciao fabio,la tabella della verità è quella della funzione xor. prova a mettere tutti gli ingressi in xor tra loro (non so se li prende come una mega porta xor perchè se li prende a 2 per volta la funzione non funziona come vuoi tu), altrimenti metti un controllo nel ciclo con un flag che si attiva la prima volta che hai una uscita alta dalla porta e, se il bool successivo è 1, esci dal ciclo e non attivi il segnale.
Luca Bab Inserita: 10 giugno 2005 Segnala Inserita: 10 giugno 2005 Altra semplice soluzione :passi lo stato dell'ingresso a bit della stessa DWo piu' DW se non bastase DW diversa da 0 attivi uscita o MCiaoLuca
Cristina Fantoni Inserita: 10 giugno 2005 Segnala Inserita: 10 giugno 2005 (modificato) se DW diversa da 0 attivi uscita o MMi pare che a Fabio serva che sia ad "1" se uno ed uno solo dei bit e' a "1", mentre il valore della DW esarebbe"0" se tutti i bit sono a "0""1" se bit N.0"2" se bit N.1"4" se bit N.2In tutti questi casi, se il bit in oggetto e' l'unico attivo, l'uscita dovrebbe essere abilitata, ma il valore della DW e' sempre diverso... Questo se ho capito, in caso contrario significa che mi sono persa una puntata... Modificato: 10 giugno 2005 da Cristina Fantoni
fabio.silvi Inserita: 10 giugno 2005 Autore Segnala Inserita: 10 giugno 2005 La funzione xor funziona solo se confronto due bit.Il discorso del flag và bene, ma diventa meno rapido di quello che speravo (io ho più di 60 ingressi):U ingresso1S flagU ingresso2U flagSPB AU ingresso2S flagU ingresso3U flagSPB AU ingresso3S flagU flag= uscitaSPA BA: R uscitaB: BEA
tode72 Inserita: 10 giugno 2005 Segnala Inserita: 10 giugno 2005 Io intendevo fare un loop decrementando ad esempio un puntatore e mettendo tutte le variabili in una db. il blocco di codice viene sicuramente più compatto ma bisogna stare attenti a non rimanere all'interno del loop.Altrimenti puoi trovare il modo di fare un blocco di conversione da binario in bcd (visto che la somma binaria non è contemplata) poi li sommi tutti e se il risultato è uguale a 1 attivi l'uscita, altrimenti no (se come ha detto Cristina l'uscita deve essere attiva se e solo se uno dei bit è 1)
JumpMan Inserita: 10 giugno 2005 Segnala Inserita: 10 giugno 2005 Ecco la pappa: R #PiuDiUnBit // resetta memoria R #Trovato // resetta memoria L 60 // esaminare 60 bits L: T #ContatoreLoops UN M [AR1,P#0.0] // Esamina il bit SPB ok // se a 0 salta a 'ok' // Il bit è a 1.... U #Trovato // se aveva già trovato un bit a 1 S #PiuDiUnBit // setta memoria SPB exit // salta a 'exit' S #Trovato // setta memoria ok: +AR1 P#0.1 // Incrementa puntatore bit L #ContatoreLoops LOOP L // (loop) // Attiva l'uscita solo se ha trovato un solo bit a 1: exit: U #Trovato UN #PiuDiUnBit = #UscitaSpero che la sintassi sia giusta, non ho qui l’ S7.
Water Inserita: 11 giugno 2005 Segnala Inserita: 11 giugno 2005 Buongiorno,avrei bisogno di aiuto per risolvere una questione che a me sembrava estremamente banale:un'operazione logica ha come ingressi n bool,il risultato deve essere 1 solo se uno degli ingressi è 1.***********************************************.... in effetti messa così sembra banale ...e quasi mi vergogno a rispondere ....(ladder) se per esempio hai tre ingressi, in un solo segmento:contatto aperto per l'ingresso 1 + contatto nc per i rimanentianalogo per gli altri ingressi (cont 2 + nc per rimanenti....)ovviamente in parallelo (ogni serie su linee diverse) e quindi ....... collega il tutto ad un merker,se il merker è ON hai un solo ingresso 1 (XOR)ma mi sa che intendevi altro ....ciao, Zef
p.valli Inserita: 11 giugno 2005 Segnala Inserita: 11 giugno 2005 Perchè invece non fai una cosa combinata tra tutti i suggermenti che ti hanno proposto?La prima cosa che mi viene n mente sarebbe:a) fa un XOR a parole, in cascata fno ad ottenere una sola WORD che sarà il risulato della combinanazioni d quelle precedenti (quindi devi prendere in considerazione un numero di bit che sia multiplo di 16... nel tuo caso 64.. al massimo gli ultimi 4 non li consideri e li metti a 0) con l metodo dei flag, fai un piccolo loop sulla word rsultante dalla fase a. che si limita qundi solo a 16 btForse così ottimizzerai i tempi ciclo...Naturalmente è tutta da provare.... ma sò che otterai un ottimo risultato (almeno spero)Scappo....Ciao PAX
JumpMan Inserita: 16 giugno 2005 Segnala Inserita: 16 giugno 2005 Ci sono degli FC appositi nella libreria TI... uno conta i bit a 1 di una double-word..... l’altro ti dice la posizione (da 0 a 31) del primo bit a 1 trovato ... ecc. ecc. (il nr. dell’FC non lo ricordo, mi ci sono imbattuto per caso oggi).
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