Vai al contenuto
PLC Forum


Subroutine E Uscite


Ianion

Messaggi consigliati

Ciao tutti.

Al questo forum sono nuovo. Vorei chiedere una domandina.

Ho un PLC S7-200. Sto programmando in KOP. Faccio un esempio.

Dal programma MAIN chiamo una subroutin SBR0.

Poi dal SBR0 chiamo un altra subroutin SBR1.

Nel questa subroutin SBR1 attivo con assegna (=) uscita Q0.1

Questa subroutin SBR1 e chiamata quando I1.0 e attivo nel SBR0.

Tutto funziona la bobina si accende...

Ma quando la SBR1 non vienne piu chiamata la uscita rimane sempre attivata.

Come e posibile che la uscita e sempre attivata anche se la corrente non arriva mai a questa bobina nel SBR1.

Aiuto!

Link al commento
Condividi su altri siti


Come e posibile che la uscita e sempre attivata anche se la corrente non arriva mai a questa bobina nel SBR1.

Quando non viene richiamata la SBR1 il suo contenuto non viene azzerato,ma viene semplicemente congelato per poi tornare al suo normale funzionamento una volta che richiami la SBR1

Link al commento
Condividi su altri siti

  • 2 weeks later...

Non lo sapevo che si congelano anche le uscite. Comunque grazie per la risposta.

Esiste un modo per comandare effetivamente le uscite dal sottoprogramma?

Link al commento
Condividi su altri siti

Quando una subroutine non è eseguita, non sono lette ed eseguti le istruzioni che essa contine. Non sono quindi più eseguite le istruzioni di comando di Q0.1 che mantiene così l'ultimo stato logico che vi è stato scritto. Con un fronte di discesa su I1.0 (QUANDO APRE E QUINDI SBR1 non è più eseguita) puoi resettare l'uscita (R Q0.1).

Puoi anche fare in modo che la cessazione dell'esecuzione di una subroutine sia possibile aprendo I1.0 solo se tutte le uscite comandate nella subroutine sono spente. In questo caso devi mettere le uscite in Or con I1.0.

E' un problema quello di fare sì che quando una subroutine non è più eseguita non ci siano uscite che sono rimaste accese. Questo problema si pone anche quando ci sono pezzi di programma sotto istruzioni di Salto.

Ciao

Link al commento
Condividi su altri siti

La tecnologia dei processori logici programmabili Siemens (ma quasi certamente anche quella di altre case), all'interno del proprio tempo ciclico di elaborazione, prevedono 3 fasi pricipali in sequenza: l'elaborazione della PAA (immagine di processo degli ingressi), l'esecuzione dei comandi logici e l'elaborazione della PAE (immagine di processo delle uscite). In maniera semplicizzata, la cpu elabora lo stato dei segnali d'ingresso, tramite i comandi del programma esegue le sue direttive e, solo alla fine, elabora ed attribuisce lo stato alle uscite. Queste tre fasi pricipali, ovviamente, non avvengono in "tempo zero", ma si susseguono all'interno del tempo ciclo della cpu: più la cpu è lenta o più il programma da elaborare è appesantito da istruzioni, maggiore è il ritardo con cui un determinato ingresso causa l'accensione o lo spegnimento di un uscita. Se poi, tramite il caso in oggetto, una determinata subroutine non aggiorna la PAE dell'uscita richiamata in quella specifica subroutine, questa non può essere più "rinfrescata" e rimane congelata all'ultimo stato utile elaborato dalla fase di esecuzione dei comandi logici.

Una possibile soluzione al problema esposto potrebbe essere quella di attribuire lo spegnimento dell'uscita sul Main, quando cioè si esce dal controllo del sottoprogramma: contrariamente a quanto si potrebbe essere portati a pensare, l'uscita si spegne davvero solo se durante l'aggiornamento dell'immagine di processo delle uscite non ci sono comandi contrastanti.

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