Vai al contenuto
PLC Forum


Ob interrupt


Messaggi consigliati

Inserito:

Salve a tutti, 

Vorrei utilizzare degli ob di interrupt per elaborare parti di programma e i relativi I/O ogni 10 ms. Il dubbio che ho è il seguente, se non riesco ad elaborare tutto il codice posto nell'ob30 di interrupt, quando ritono nello stesso ob riprendo l'elaborazione da dove avevo interrotto o ricomincia dall'inizio? 


Inserita:

Quando si esce dall'interrupt, il programma riprebnde da dove era stato interrotto.
Attenzione a non appesantire troppo gli OB ad interrupt.

Inserita: (modificato)

Di solito, ad esempio se volessi eseguire FC di cicli di movimentazione assi in un ob ad interrupt ci sono controindicazioni? 

Modificato: da FranckIng
Inserita:
27 minuti fa, FranckIng ha scritto:

Di solito, ad esempio se volessi eseguire FC di cicli di movimentazione assi in un ob ad interrupt ci sono controindicazioni?

 

IN genere nelle routine di servizio interrupt si devono inserire le sole istruzioni strettamente necessarie per servire la routine, anche per una questione di "pulizia" e comprensibilità del programma.

Nel tuo caso basta che tu chiami lo FC che ti interessa, avendo cura di riabilitare gli interrupts prima di chiamare lo FC.

Il programma eseguirà lo FC tornando poi all'istruzione seguente la chiamata e da li tornerà all'istruzione seguente quella eseguita immediatamente prima dell'interrupt.

 

Attenzione.

Se l'intervallo di tempo tra un interrupt e l'altro è, come dichiari, 10ms è indispensabile che tutto il processo dal momento dell'interruzione a tempo sino al ritorno al punto di interruzione, duri molto meno di 10ms. Se così non fosse il PLC elaborerebbe quasi esclusivamente l'interrupt.

 

Inserita:
3 ore fa, FranckIng ha scritto:

Di solito, ad esempio se volessi eseguire FC di cicli di movimentazione assi in un ob ad interrupt ci sono controindicazioni? 

Domanda troppo generica per poter dare una risposta.

Inserita:

Il mio obbiettivo è leggere gli ingressi ed eseguire vari cicli di movimentazione assi e attivazione cilindri nello ob a tempo nello stesso ciclo. In modo non sfasare il tempo di attivazione di un cilindro con la posizione in cui si trova un asse, e cercare di ridurre i tempi ciclo 

Inserita:

Gli interrupt non servono per ridurre il tempo ciclo.

Ma hai provato senza interrupt per vedere quale risultato ottieni?  

Penso che i casi in cui serve veramente un interrupt sono uno su mille, ed il tuo caso non mi sembra proprio uno di questi, se pensi tra l'altro quali sono i tempi di reazione di una elettrovalvola ed un pistone....  beh, la scansione di un plc è molto più rapida.

Inserita:
2 ore fa, FranckIng ha scritto:

e cercare di ridurre i tempi ciclo 

Ma stai parlando di OB a 10 ms. Certo, 10 ms saranno solo un valore di esempio ma, con la velocità dei PLC di oggi, quegli interrup a tempo girerebbero, molto probabilmente, più lenti di OB1.
Se vuoi annullare i ritardi tra un evento e la reazione all'eveneto (lettura di un ingresso e esecuzione di un comando), come prima cosa devi utilizzare ingressi che possano attivare interrupt (non tutti lo possono fare, devi scegliere il modulo adatto), e richiamare la tua routine in questo interrupt ad evento.
Considera anche che sugli ingressi c'è un filtro (tipicamente 6.4 ms nei PLC Siemens) che, a seconda dell'hardware che stai utilizzando, può essere modificato.
E non dimenticare che se all'interno dell'interrupt a tempo non fai una lettura immediata dello stato degli ingressi (e fai quindi sempre riferimento all'immagine degli ingressi aggiornata con OB1), andresti solo a peggiorare le cose.

Quella dell'interrupt a tempo, per quello che intendi fare, non mi pare una buona idea.

 

E, come dice @Roberto Gioachin, prima prova a vedere cosa succede senza interrupt e, se non va bene, descrivi meglio il sistema e vedremo quale soluzione si può adottare.

Inserita:
6 ore fa, FranckIng ha scritto:

Il mio obbiettivo è leggere gli ingressi ed eseguire vari cicli di movimentazione assi e attivazione cilindri nello ob a tempo nello stesso ciclo.

 

 Concordo con qunato scritto da Batta, il ricgiamo a tempo fisso è, se non dannoso, perlomeno inutile per gestire eventi legati ad ingressi fisici.

Semmai si devono usare ingressi veloci, legati ad un interrupt. La routine di servizio dell'interrupt andrà a richiamare la funzione di posizionamento del cilindro.

Concorda anche con quanto scritto da Roberto Gioachin, prima verificherei come risponde il sistema, magari con letture dirette ripetute più volte in OB1, degli ingressi interssati.

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