Vai al contenuto
PLC Forum


Ventilazione tunnel


charlie1992

Messaggi consigliati

Buona sera a tutti;

sono un giovane ragazzo che sta cercando di imparare a programmare e mi sto affidando ad un libro di testo scrittp dal Professor Pirraglia. 

sto svolgendo un esercizietto banale ma purtroppo mi trovo in difficolta perche non so usare bene le funzioni degli operandi e non so quale usare. 

l' esercio da svolgere e questo:  

4 ventilanti dentro ad un tunnel fanno il ricircolo dell aria; 

un semaforo esterno concede o nega il permesso di entrare dentro al tunnel; in funzione del funzionamento delle 4 ventilanti. 

il programma deve sempicemente gestire il semaforo in questo modo:

lampada verde quando 3 oppure tutti e 4 le ventilanti funzionano.

lampada gialla quando soltanto 2 ventilanti sono attive.

lampada rossa quando una sola ventilante o nessuna e attiva.

sembra semplice ma mi sto intortando; non so bene che funzione usare. 

grazie a chi mi aiutera

Link al commento
Condividi su altri siti


Ciao,basta usare della semplice logica booleana,faccio un esempio per Zelio:

                                    X1.PNG.bd44d306065bcc5c8dffbc8303d84ec0.PNG

per verde:

                                                                    X2.PNG.bfb48678988bd53da50d37b24d720f96.PNG

per giallo:

                                                                    X3.PNG.63d97f7fea9e5f834573878248f7c69f.PNG

per rosso:

                                                                    X4.PNG.be595b3a011d1c7512bc89107feb4f50.PNG

Link al commento
Condividi su altri siti

Oppure ti basta contare i ventilatori attivi.

Poi se il numero >=3 lampada verde

Se uguale a 2 lampada gialla

E se minore o uguale a 1 lampada rossa

Link al commento
Condividi su altri siti

Concordo con 84Paolo, per me è la soluzione più semplice e pratica.

Si esegue una somma e 2 confronti.

Link al commento
Condividi su altri siti

Grazie innanzi tutto per le risposte; 

Blackice tu hai semplicemente usato delle porte or? o sono comparatori?

per quanto riguarda 84Paolo,per contare intendi utilizzando dei contatori avanti indietro? e successivamente 

usare delle operazioni di confronto per attivare il semaforo.  

provo a fare cosi; spero di non avere difficolta nella "sintassi" del programma; piu che altro nel settare le operazioni di confronto 

Link al commento
Condividi su altri siti

L'esempio è fatto con porte logiche programmabili (per semplificare) ,ma si realizza con qualunque linguaggio,in KOP il verde viene così:

                                                                    X1.PNG.f57250ee5c44675ffc89ca6b7a19b44e.PNG:

 

Link al commento
Condividi su altri siti

Sono riuscito a farlo funzionare; ci ho pensato po ed ho trovato la soluzione utilizzando dei contatori avanti.

infatti questi mi contano le ventilanti attive; e accendano la luce del semaforo corrispondente. 

per evitare che arrivati a 2 ventilanti attive; mi rimanesse la luce rossa accesa( attivata in precedenza col contatore che l'attiva quando una sola ventilante funziona)

contemporaneamente con la luce gialla.

Ho fatto resettare al contatore che mi attiva la luce gialla, il contatore che aveva attivato la luce rossa. 

uguale per la luce verde che viene attivata dal contatore stesso che disattiva la luce gialla precedentemente attivata. 

spero di essere stato chiaro. posto in discussione le immagini del programmino che ho fatto; avrei piacere che mi diciate la vostra su cio che ho fatto.

 

P.s ho testato il programma con PLCSIM, cosi da testare il funzionamento piu verosimilmente possibile.

 

Ventilante 1.png

Link al commento
Condividi su altri siti

Basta un solo contatore.

Ad ogni ciclo conti quante ventilanti sono in funzione.

Esegui la comparazione

Se è >= 3 accendi la verde e spegni le altre 2

Se è = 2 accendi la gialla e spegni le altre 2, altrimenti accendi la rossa e spegni le altre 2.

 

Il tutto comporta 4 somme al amssimo, 2 comparazioni al massimo con 2 salti, un set e due reset

Link al commento
Condividi su altri siti

Livio Orsini grazie della risposta; 

non riesco a capire come devo usare le istruzioni di confronto sinceramente. potresti cortesemente spiegarmi?

nella guida dice che devo mettere come operando 1 il valore da confrontare con l operando 2. se questo e maggiore l' uscita sarà 1.

se vado a settare l operando 1 e 2 mi fa selezionare soltanto blocchi dati. 

puoi spiegarmi come devo settarlo e come funziona questo tipo di istruzione. purtroppo da solo non riesco a capire. 

grazie

Link al commento
Condividi su altri siti

Grazie livio, non ci avevo pensato.

mi sono messo e l ho modificato; qualche piccola difficolta iniziale ma ci sono riuscito. 

grazie mille dell aiuto.

ne apprfitto per chiedere una cosa, che non c entra con questo esercizio. 

se la stessa uscita; l attivo piu volte; ma tramite segmenti diversi, 

devo fare un parallelo e farla attivare in un unico segmento?  spero di essere stato chiaro

Link al commento
Condividi su altri siti

Lavorandoci un po' ci si arriva da soli alla soluzione.;)

 

Tu ouoi alzare e abbassare più volte la stessa uscita durante il programma e non succede nulla, questo perchè in tutti i PLC le uscite fisiche si scrivono una sola volta alla fine del ciclo. E questo avviene in mo trasparente al programma applicativo.

 

In tutti i PLC all'inizio ciclo il sistema operativo della macchina copia lo stato fisico degli ingressi in unatebella immagine, si esegue il ciclo, il sistema operativo copia la tabella immagine delle uscite sulle uscite fisiche, legge gli ingressi fisici, copia lo stato degli ingressi fisici nella tabella immagine ed il ciclo riprende.

 

In altri termmini quando tu leggi un ingresso, non leggi lo stato dell'ingresso in quell'istante, ma come era l'ingresso al momento della lettura da parte dello SO.

parimenti quando alzi o abbassi un'uscita l'uscita fisica non cambia stato, ma l'operazione influenza solo un bit della tabella immagine.

 

Comunque è buona norma di programmazione non scrivere la stessa uscita in più parti del programma, questo per evitare problemi difficilmente rintracciabili in fase di collaudo.

 

Se si vuole leggere lo stato attuale di un ingresso, o scrivere direttamente un'uscita, si susano le istruzioni di accesso diretto alle unità fisiche.

In alcuni casi, specialmente perle letture e scritture degli I/O analogici, è necessaro ricorrere a questa funzione.

Però la velocità di lavoro crescente delle CPU, con la conseguente diminuzione dei tempi di ciclo, fa diminuire drasticamente questa necessità.

Tieni resente che, ad esempio, un ingresso normale ha un filtro Hw che da un ritardo di circa 1ms.

 

Io ti consiglierei prima di proseguire nello studio del software, di leggere (anzi studiare) i manuali della CPU e delle principali schede di periferia; possibilmente leggendo prima la versione italiana e poi confrontandola con quela in inglese (se conosci iltedesco ancora meglio, per siemens quella più corretta è al versione germanica).

Link al commento
Condividi su altri siti

Non usare i contatori. Usa una variabile.

Puoi procedere come segue:

- azzeri la variabile "nrVentilON" (usa l'istruzione MOVE)

- se la ventilante 1 è accesa, incrementa la variabile "nrVentilON" (usa l'istruzione INC, oppure ADD)

- se la ventilante 2 è accesa, incrementa la variabile "nrVentilON"

- se la ventilante 3 è accesa, incrementa la variabile "nrVentilON"

- se la ventilante 4 è accesa, incrementa la variabile "nrVentilON"

A questo punto, la variabile "nrVentilON" contiene il numero delle ventilanti accese.

Poi fai delle semplici comparazioni:

- se "nrVentilOn" > 2, accendo la luce verde

- se "nrVentilOn" = 2, accendo la luce gialla

- se "nrVentilOn" < 2, accendo la luce rossa

 

È la soluzione proposta da "84Paolo"

Link al commento
Condividi su altri siti

Quote

se la ventilante 1 è accesa, incrementa la variabile "nrVentilON" (usa l'istruzione INC, oppure ADD)

 

Puoi chiamarla variabile ma si tratta comunque di un contatore, sia che usi l'istruzion "inc" o "add":)

Link al commento
Condividi su altri siti

Quote

Puoi chiamarla variabile ma si tratta comunque di un contatore, sia che usi l'istruzion "inc" o "add":)

Sì, certo. Ho specificato solo per essere sicuro che non utilizzasse il contatore "CTU", visto che in un precedente post "charlie1992 afferma: " Sono riuscito a farlo funzionare; ci ho pensato po ed ho trovato la soluzione utilizzando dei contatori avanti. ".

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