FranckIng Posted January 13 Report Posted January 13 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?
batta Posted January 13 Report Posted January 13 Quando si esce dall'interrupt, il programma riprebnde da dove era stato interrotto. Attenzione a non appesantire troppo gli OB ad interrupt.
FranckIng Posted January 13 Author Report Posted January 13 (edited) Di solito, ad esempio se volessi eseguire FC di cicli di movimentazione assi in un ob ad interrupt ci sono controindicazioni? Edited January 13 by FranckIng
Livio Orsini Posted January 13 Report Posted January 13 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.
batta Posted January 13 Report Posted January 13 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.
FranckIng Posted January 15 Author Report Posted January 15 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
Roberto Gioachin Posted January 15 Report Posted January 15 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.
batta Posted January 15 Report Posted January 15 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.
Livio Orsini Posted January 15 Report Posted January 15 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.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now