charlie1992 Inserito: 23 agosto 2017 Segnala Share Inserito: 23 agosto 2017 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 More sharing options...
Blackice Inserita: 24 agosto 2017 Segnala Share Inserita: 24 agosto 2017 Ciao,basta usare della semplice logica booleana,faccio un esempio per Zelio: per verde: per giallo: per rosso: Link al commento Condividi su altri siti More sharing options...
84paolo Inserita: 24 agosto 2017 Segnala Share Inserita: 24 agosto 2017 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 More sharing options...
Livio Orsini Inserita: 24 agosto 2017 Segnala Share Inserita: 24 agosto 2017 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 More sharing options...
charlie1992 Inserita: 24 agosto 2017 Autore Segnala Share Inserita: 24 agosto 2017 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 More sharing options...
Blackice Inserita: 24 agosto 2017 Segnala Share Inserita: 24 agosto 2017 L'esempio è fatto con porte logiche programmabili (per semplificare) ,ma si realizza con qualunque linguaggio,in KOP il verde viene così: : Link al commento Condividi su altri siti More sharing options...
charlie1992 Inserita: 24 agosto 2017 Autore Segnala Share Inserita: 24 agosto 2017 ma non ce un modo piu carino; piu professionale usando delle funzioni per fare cio? Link al commento Condividi su altri siti More sharing options...
charlie1992 Inserita: 24 agosto 2017 Autore Segnala Share Inserita: 24 agosto 2017 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. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 25 agosto 2017 Segnala Share Inserita: 25 agosto 2017 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 More sharing options...
charlie1992 Inserita: 25 agosto 2017 Autore Segnala Share Inserita: 25 agosto 2017 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 More sharing options...
charlie1992 Inserita: 25 agosto 2017 Autore Segnala Share Inserita: 25 agosto 2017 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 More sharing options...
Livio Orsini Inserita: 26 agosto 2017 Segnala Share Inserita: 26 agosto 2017 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 More sharing options...
batta Inserita: 26 agosto 2017 Segnala Share Inserita: 26 agosto 2017 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 More sharing options...
Livio Orsini Inserita: 26 agosto 2017 Segnala Share Inserita: 26 agosto 2017 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 More sharing options...
batta Inserita: 26 agosto 2017 Segnala Share Inserita: 26 agosto 2017 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 More sharing options...
Livio Orsini Inserita: 26 agosto 2017 Segnala Share Inserita: 26 agosto 2017 Sei più difidente di me. Io proprio non ci avevo nemmeno pensato a questa complicazione potenziale. 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