Vai al contenuto
PLC Forum


Problema Con I Timer


marantz65

Messaggi consigliati

buonasera a tutti

come dal titolo, ho un problema con i timer.

ho un evento nel main che mi sta facendo lampeggiare una uscita utilizzando due timer.

un successivo evento fa entrare il programma in una subroutine e fino a che non esce dalla subroutine, il lampeggio o meglio i timer si fermano.

è normale o posso fare qualcosa?

Grazie

Marino

Link al commento
Condividi su altri siti


Di una cosa puoi essere certo: il PLC sta facendo esattamente quello che gli hai detto di fare.

Sicuramente c'è qualcosa di sbagliato nel tuo codice, ma per dire cosa, senza poter vedere il codice stesso, ci vorrebbe un indovino.

un successivo evento fa entrare il programma in una subroutine e fino a che non esce dalla subroutine, il lampeggio o meglio i timer si fermano

Anche in questa affermazione c'è qualcosa di sicuramente sbagliato. Un PLC esce sempre dalla subroutine. Magari ci rientra al ciclo successivo, ma deve assolutamente uscire.

Questo perché un PLC deve sempre tenere sotto controllo tutto quello che deve gestire. Non può dedicarsi ad un solo compito e non accorgersi, solo per fare un banale esempio, che un movimento è arrivato a finecorsa.

Per evitare che, a causa di eventuali errori di programmazione, il programma rimanga bloccato in una subroutine, nei PLC c'è un controllo (watchdog) che, se il ciclo impiega più tempo del massimo previsto, mette la CPU in stop.

Quindi, non può essere vero che il programma entri in una subroutine e non ne esca.

Link al commento
Condividi su altri siti

Se parte del programma, come in questo caso il tuo main, non viene elaborata, rimane attivo l'ultimo risultato logico combinatorio (RLC) che era stato elaborato prima di entrare nella subroutine. La stessa cosa può succedere, al contrario, in quanto è elaborato nella sub quando si torna al main.

Domanda: ma perchè utilizzi 2 timer per far lampeggiare e non SM0.5?

Link al commento
Condividi su altri siti

grazie per la celere risposta

per Batta

il lampeggio riprende quando il programma esce dalla subroutine

per Busanela

SM0.5 pulsa 0.5 secondi, e non mi va bene, perchè attraverso una sola lampada devo generare lampeggi differenti a seconda del problema in essere.

in questo caso spesifico devo lampeggiare 2 sec in on ed 1 sec in off.

grazie

Link al commento
Condividi su altri siti

il lampeggio riprende quando il programma esce dalla subroutine

Vorrai dire che il lampeggio riprende quando non richiami più la subroutine, che è diverso.

Come ti ho scritto nel precedente post, non è possibile che tu rimanga dentro alla subroutine, perché la CPU andrebbe in stop.

In ogni caso, se non spieghi in modo dettagliato quello che hai fatto, come pensi che ti possiamo aiutare?

Link al commento
Condividi su altri siti

Giuseppe Signorella
Vorrai dire che il lampeggio riprende quando non richiami più la subroutine, che è diverso.

Si, ma è strano ugualmente, perchè dal punto in cui entra nella sub, ritorna quando esce per poi ripetersi al ciclo successivo.

Se non disabilita i timer in qualche modo, all'uscita della sub ( e se non fa salti) i timer una volta usciti dalla sub dovrebbero continuare a "correre".

Secondo me nella sub riscrive le medesime uscite che (scrivono) i timer per il lampeggio.

Link al commento
Condividi su altri siti

grazie per le risposte (anche se parlate tra di voi)

comunque Giuseppe hai ragione, nella sub impiego alcune uscite che sono presenti anche nel main.

mi è già capitato che alcune uscite non funzionassero a dovere, perchè presenti in più punti del programma.

una volta accorpate magicamente hanno ripreso a funzionare.

sto facendo piano piano progressi e cercando di affinare il tiro, come si dice.

purtroppo devo usare una lampada che oltre ad essere accesa fissa da un timer presente in una sub, deve lampeggiare 1 sec on e 1 sec off) se ho un termico nel main e lampeggiare in un modo diverso (2 sec on e 1 sec off) se ho un allarme diverso, sempre nel main.

l'impianto può continuare a funzionare parzialmente con uno di questi allarmi in corso ed entrare in una sub, e mentre lo fa, il lampeggio si interrompe fino a quando il programma esce dalla sub e ritorna al main.

per Batta: spero di essere stato più chiaro, scusami.

Link al commento
Condividi su altri siti

Se non disabilita i timer in qualche modo, all'uscita della sub ( e se non fa salti) i timer una volta usciti dalla sub dovrebbero continuare a "correre".

Secondo me, a naso, è proprio qualcosa di questo genere: salta nella sub subito prima del ciclo di conteggio dei timer e/o rientra nel main dopo del suddetto.

Credo siano da verificare nel listato le condizioni del salto condizionato nel main alla sub ed il rientro.

mi è già capitato che alcune uscite non funzionassero a dovere, perchè presenti in più punti del programma.

una volta accorpate magicamente hanno ripreso a funzionare.

Tipico errore di chi non ha compreso a dovere il significato di immagine di processo, rlc, etc. etc.

Modificato: da busanela
Link al commento
Condividi su altri siti

comunque Giuseppe hai ragione, nella sub impiego alcune uscite che sono presenti anche nel main.

E come pretendi possa funzionare?

Se alla stessa uscita assegni uno stato in diversi punti del programma, lo stato reale sarà quello assegnato per ultimo.

Se tu attivi un'uscita e succesivamente richiami una subroutine nella quale disattivi l'uscita, l'uscita rimarrà bassa.

Per fare quello che desideri, devi usare i merker.

Utilizzi un merker per la logica di lampeggio 1, un altro merker per la logica di lampeggio 2, poi metti i merker in OR per comandare l'uscita.

Con un altro merker puoi evitare la sovrapposizione dei lampeggi in caso di contemporaneità dei lampeggi stessi.

Link al commento
Condividi su altri siti

Giuseppe Signorella
comunque Giuseppe hai ragione, nella sub impiego alcune uscite che sono presenti anche nel main.

Avevo immaginato, pecccato che vincere al superenalotto non sia così facile.

Se alla stessa uscita assegni uno stato in diversi punti del programma, lo stato reale sarà quello assegnato per ultimo.

Se tu attivi un'uscita e succesivamente richiami una subroutine nella quale disattivi l'uscita, l'uscita rimarrà bassa.

Questo nella programmazione è "vangelo" (Per usare un'espressione significativa).

E' una regola che non va mai dimenticata. In programmazione non vanno mai scritte (richiamate) delle uscite in diversi punti del programma, che essi siano fisiche o non. Essi si richiamano solo e sempre in un solo punto.

Infine se posso consigliarti, se desideri variare il tempo di un temporizzatore, "scusa il gioco di parole" a secondo dell'evento, ti conviene semplicemente trasferire un nuovo valore nella proprietà time del tuo temporizzatore. In tal modo usi sempre il medesimo temporizzatore. (Perchè secondo me tu nel tuo programma hai inserito più temporizzatori alle medesime uscite)

Link al commento
Condividi su altri siti

In un'altra discussione avevo risposto a Marantz65 quanto segue:

se vuoi imparare i principi della programmazione di processori logici programmabili; procurati un testo base (in questo forum si parla spesso del libro di Bergamaschi, anche se io non l'ho mai visionato), un manuale della cpu che hai a disposizione e comincia da li, riga per riga, pagina dopo pagina: se hai passione, il tempo per farlo si trova.

L'obbiettivo fondamentale è entrare nella comprensione della maniera in cui la cpu espleta le sue funzionalità di sistema: elaborazione ciclica, tempo di ciclo, tempo di reazione, immagine di processo degli ingressi e delle uscite, interrupt devono essere termini chiari e compresi in maniera completa.

E' ovvio che se si vuole imparare smanettando, senza avere una base della tecnica, magari si arriva comunque all'obbiettivo, ma per una strada senza dubbio più lunga e tortuosa.

Ribadisco che gli errori di Marantz65 sono:

Tipico errore di chi non ha compreso a dovere il significato di immagine di processo, rlc, etc. etc.

Link al commento
Condividi su altri siti

grazie a tutti

finalmente vedo un po di luce ogni tanto.

purtroppo come primo lavoro con un plc tra modifiche ed aggiunte a quello che doveva essere un impiantino con la sola cpu sono stati già aggiunti 2 moduli di espansione IO.

rinnovo le mie scuse per le domande che pongo, ma alcuni dubbi mi aiutate egregiamente ad eliminarli.

come Giuseppe citava, il manuale non ti insegna a programmare .....

ma voi ci state piano piano riuscendo...

grazie :worthy:

Link al commento
Condividi su altri siti

Giuseppe Signorella
a quello che doveva essere un impiantino

Tengo sempre a precisare, che fare un programma che assolva alle funzioni che uno si è prefissato, non significa aver fatto un software a norma.

Pertanto consiglio, quando non si hanno ben chiari alcuni concetti basilari della programmazione, di fare molta attenzione.

Il PLC non fa ciò che pensii, ma ciò che gli hai detto di fare.

Comportamenti non previsti, e/o anomali, sono sempre in agguato, e la colpa non è mai del PLC.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

non sono ancora riuscito a sistemare perfettamente il lampeggio ma ci sto lavorando.

ho gradito molto il vostro interesse e ve ne sono grato come sempre.

per Busanela:

"Tipico errore di chi non ha compreso a dovere il significato di immagine di processo, rlc, etc. etc."

cosa dovrei fare?

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