Vai al contenuto
PLC Forum


istruzione per evitare contemporaneita' di 22 pulsanti no


Johnny T.

Messaggi consigliati

Salve a tutti.

Dovrei creare un istruzione per evitare il fenomeno descritto in oggetto. Uso cx progr. V3.2 e c200hg.. ci sono alternative a tuttti i contatti nc in serie tra loro (22) e magari un hr di appoggio? Dovrei nello specifico, partire con delle condizioni generali in un rung, poi immettete il cont. No di uno dei 22 pulsanti che si possono scegliere e da li poi saltare diciamo a verificare che non arrivi uno o piu' pulsanti in contemporanea in modo da eseguire un solo comando x volta. Se tutto poi risulta vero, cioe' non c'e' contemporaneita' di piu' comandi, ritornare al rung principale e attivare le out... dovro' quindi credo creare una procedura simile x tutte e 22 le condizioni.... grazie.

Link al commento
Condividi su altri siti


Se metti un contatore e conti quanti ingressi hai, poi se verifichi ingresso e contatore è uguale a 1 allora hai solo un tasto premuto. Se maggiore ne hai due

Link al commento
Condividi su altri siti

Se tutti i 22 ingressi sono in sequenza, potresti copiare solo la parte che interessa delle 2 word (22 = 16 + 6, quindi una word e un po'...) mascherando i bit inutili mediante una ANDW, e mettere il risultato in due word consecutive (diciamo D100 e D101). A questo punto, con l'istruzione BCNT saprai quanti ingressi (bit) sono a 1. E poi farai le tue scelte del caso.

 

Ommamma, quelle istruzioni di interblocco e salto... Si usavano nei vecchi PLC per problemi di tempo di esecuzione, oramai sui nuovi non si usano più (se Dio vuole...).

Comunque, semplicemente, la IL (interlock) e la ILC (interlock clear) definiscono un blocco di istruzioni che saranno eseguite se la IL ha condizione ON, non eseguite se ha condizione OFF (occhio però alle controindicazioni su uso di timer, uscite, differenziate, ecc).

La JMP e la JME (da usare accoppiate) definiscono dei salti. Quando si trova una JMP n con n= numero da 1 a 99 e la condizione è ON, il programma salta alla JME n con lo stesso numero. Anche in questo caso fare attenzione agli effetti collaterali.

Tutte queste istruzioni di salto e interblocco andrebbero evitate come la peste, il rischio di avere strani comportamenti è elevato. E soprattutto fanno a cazzotti con la famosa programmazione strutturata... 

Link al commento
Condividi su altri siti

Ahah! Grazie! Capito! Immagino che ti ho fatto affiorare ricordi non tanto belli ctec! Allora le lascio stare li anch'io!

I 22 pulsanti invece non sono in sequenza.. nel senso che non sono da premere rispettando un ordine prefissato. Vorrei  solo evitate che se si cerchi di premerne piu' di uno per volta, dato che sono tutti abbastanza vicini x essere premuti con le mani, che solo un comando x volta attivi solo la sua uscita corrispondente... anti contemporaneita' appunto.

Link al commento
Condividi su altri siti

Ok. Provero' a fare come suggeritomi da paolo84... tutti i contatti no dei 22 pulsanti che entrano in cp1 del cnt e sulla sua uscita ancora tutti e 22 i pulsanti no con in serie il cont no del cmt impostato a #1...

Link al commento
Condividi su altri siti

Ok accetto il consiglio Nicola e ctec. Data la mia conoscenza piuttosto limitata di progr. Plc ho inizialmente scelto la prima opzione di paolo84 perche' x me piu semplice da realizzare e comunque che riesco a gestire meglio con le mie conoscenze... nulla assolutamente vieta di sforzarsi di piu' prendendo la via x me piu difficile... c mancherebbe altro! Sicuramente avro' bisogno di qualche altro consiglio su queste operazioni andw e bcnt... vedo il manuale.... comunque... allora, io ho gli ingressi dei 22 pulsanti alcuni su una scheda if212 e altri su un altra... quindi avro' indirizzi diversi... vabbe'. Correggetemi se sbaglio.... io vado a vedere i bit di ciascun ingresso della word e mezza diciamo relativa agli ingressi sulle schede che si chiama come in omron??? poi con l'istr. Andw escludo la parte di quella tipo mezza word che non mi serve e memorizzo con istruz. Move??? Il risultato in due word create apposta allo scopo chiamate d100 e101 che conterranno comunque in tot. 22 bit giusto? Con istr.Bcnt che fara' mi sembra un confronto tra i 22 bit delle 2 word e mi dara' un risultato di che tipo? Dove sapro' che bit ci sono allo stato 1... poi da li in base al tipo di risultato in uscita appunto dall istr. Bcnt vedro' cm gestire il blocco di piu' pulsanti premuti in contemporanea.... ditemi se ho capito bene o se ho cannato completamente!!!

Grazie!!!!!

Link al commento
Condividi su altri siti

Ciao, ho fatto qualcosa di sbagliato...

Allora.. ho fatto delle prove.. ma ho dei dubbi su quale formato adottare x inserire i dati nelle due funzioni di ANDW che devo usare per mascherare i bit inutili nell'IR delle 2 word di ingressi nelle quali ho i bit dei 22 pulsanti da controllare. Sono la word 4 e la 17. Ho capito vedendo il manuale che nell'istruzione ANDW inserisco la wordad esempio n. 4 e la moltiplico con una word che vado a creare mettendo a 0 i bit che non mi servono in modo che il risultato del prodotto venga appunto sempre 0.. bene, ma in che formato devo inserire questa word nell'operando 2 di andw? In BCD o HEX? Mettendo il #? Devo fare una conversione magari con un blocco prima di ANDW? Poi..il BIT COUNTER BCNT... l'operando N cioe' il numero delle word da controllare, cioè come consigliato da Ctec, D100 e 101 che sono il risultato delle due operazioni di ANDW sopra, leggo da manuale che è da inserire in BCD.. ma non capisco se devo inserire il numero 2 cioè le 2 word 100 e 101 oppure 010 in BCD o devo usare il #?  

Alla fine dell'operazione di BCNT il risultato lo scrivo in un altra word D102 che poi vorrei comparare con un CMP al numero 1, che poi, usando il flag di CMP maggiore o uguale 2505 mi pare, vorrò avere una condizione tale da settarmi una memoria che se appunto il contenuto della D102 è maggiore o uguale di 1, mi farà bloccare tramite contatto NC della memoria le condizioni di attivazione degli alri 21 pulsanti.

Grazie mille. 

Link al commento
Condividi su altri siti

Ok. Capito. Grazie mille Nicola. Posso chiederti cosa significa =(300) nel blocco sotto bcnt? E' un cmp? Forse io lo vedo un po' diverso dato che ho cx progr. Versione vecchiotta... 3.2... comunque chiaro il resto.

& sta per inserzione numerica in decimale? E il # in bcd vero?

Link al commento
Condividi su altri siti

Ma nel blocco andw, nel primo operando metto la word ir 4, nel secondo in che formato devo inserire la word con tutti i vari bit 0 e 1 che devo controllare e mascherare? bcd o hex? Il risultato poi che va a creare le 2 word 100 e 101 sara' in formato gia' compatibile con quei blocchi che mi hai gentilmente passato Nicola?

Link al commento
Condividi su altri siti

Prova cosi, il singolo ingresso lo trasferisci nei singoli bit per esempio di W100 e W101 visto che sono 22 pulsanti.

poi la funziona conta i bit che sono a 1

il confronto (325) mette a 1 il bit 100.0 se il risultato di W200 e uguale o maggiore di 1

 

 

Cattura.JPG

Link al commento
Condividi su altri siti

Grazie a tutti! Grazie rda.. ho risolto! Ho fatto alla vecchia... nelle 2 funz. Andw ho inserito su i2 la word 48 dove poi sono andato a mettere a 1 con flag di sempre a 1 fisicamente tutti i bit che mi serve controllare... stessa cosa ho fatto per la seconda istruz. Andw che invece usa la word 49 con i bit a 1 come sopra... i due risultati delle andw confluiscono nella dm100 e dm101 rispettivamente e poi vado a fare la bcnt come da voi consigliatomi. Il risultato di questa word dm102 la vado a comparare con un cmp al valore devimale &1 e usando il flag di cmp 2505 gr, appunto quando maggiore di 1, metto a 1 un hr che poi intetfaccio nel mio programma nella logica dei 22 pulsanti.

Grazie tante ancora a voi tutti!

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...