Vai al contenuto
PLC Forum


Attivare Un Bit Ogni Volta Che Si Verifica Interrupt A Tempo


baltimora

Messaggi consigliati

E' possibile attivare in un qualche modo un bit con fronte di salita ogni qual volta si richiama un blocco interrupt a tempo?

Il bit poi dovrà essere utilizzato all'interno dello stesso blocco interrupt.

Modificato: da baltimora
Link al commento
Condividi su altri siti


Vediamo se ho capito.

Hai un timer che alla scadenza attiva un interrupt. All'ingresso della routine di servizio dell'interrupt vorresti mandare a "1" un bit. La cosa è fattibile, c'è solo il problema di chi resetta, e quando lo resetta, il bit.

Io uso una funzione simile per verificare l'esatta temporizzazione o i tempi di ciclo.

Entrando nella funzione sotto test scrivo tutti "1" su un'uscita analogica. Quando esco dalla funzione, come ultima istruzione, scrivo tutti "0" nella medesima uscita. Ovviamente le scritture son dirette, saqltando i registri immagine.

In questo modo ottengo un segnale alto per la durata della funzione. Con un oscilloscopio posso verificare sia la durata della funzione, sia la temporizzazione di ciclo.

Se ti serve avere un flag che cambia di stato puoi usare la medesima tecnica.

Link al commento
Condividi su altri siti

e se all'apertura del blocco provassi a portare un bit (come prima istruzione) ad 1 e a zero come ultima istruzione prima della chiusura utilizando set e reset?

Modificato: da baltimora
Link al commento
Condividi su altri siti

Va benissimo, però se ci spiegassi anche lo scopo forse potremmo avere qualche suggerimento differente.

Link al commento
Condividi su altri siti

Se guardi un ingresso di periferia hai un fronte di salita quando l'ingresso passa da "0" ad "1".

Se guardi un bit della memoria immagine hai un fronte di salita quando nella scansione precedente era nello stato logco "0" e nello stato logico "1" nella scansione attuale. Nel bit ausiliario dell'istruzione "P-TRIG", quando è letta ed eseguita, c'è lo stato logico del bit nella scansione precedente.

Se il bit ausiliario è ritentivo e la rete diventa off e poi on con il bit della memoria immagine sempre on, non hai un nuovo impulsino sul fronte di salita. Nel caso il bit ausiliario sia non ritentivo hai un nuovo impulsino sul fronte.

Nel tuo caso di un subroutine eseguita ad interrupt per una scansione ad intervalli regolari di tempo, forse vuoi (ma non ho capito bene) rilevare il fronte di salita di un bit che passa dallo stato "0" allo stato "1" nella stessa scansione usando 2 volte l'istruzione "P-TRIG" (segmenti identici). La prima volta la usi all'inizio della subroutine, la seconda volta la usi dopo le istruzioni di comando del bit del quale vui rilevare il fronte e dopo metti le istruzioni che usano l'impulsino. Non ho mai provato ma credo funzioni. Ciao

Link al commento
Condividi su altri siti

Va benissimo, però se ci spiegassi anche lo scopo forse potremmo avere qualche suggerimento differente.

Avevo la necessità di far si che determinate operazioni all'interno del blocco potessero essere eseguite solo se all'apertura del medesimo, fossero attivi dei consensi provenienti da altri blocchi. Se (i contatti si chiudevano) quando il blocco era già in esecuzione non dovevano essere eseguite

Modificato: da baltimora
Link al commento
Condividi su altri siti

non devi fare nulla

mentre viene elaborato l interupt non viene eseguito nientaltro quindi i bit scritti in altre parti del sw non vengono modificati

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