FranckIng Inserito: lunedì alle 11:50 Segnala Inserito: lunedì alle 11:50 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 Inserita: lunedì alle 14:22 Segnala Inserita: lunedì alle 14:22 Quando si esce dall'interrupt, il programma riprebnde da dove era stato interrotto. Attenzione a non appesantire troppo gli OB ad interrupt.
FranckIng Inserita: lunedì alle 14:45 Autore Segnala Inserita: lunedì alle 14:45 (modificato) Di solito, ad esempio se volessi eseguire FC di cicli di movimentazione assi in un ob ad interrupt ci sono controindicazioni? Modificato: lunedì alle 14:46 da FranckIng
Livio Orsini Inserita: lunedì alle 15:22 Segnala Inserita: lunedì alle 15:22 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 Inserita: lunedì alle 18:39 Segnala Inserita: lunedì alle 18:39 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 Inserita: mercoledì alle 08:34 Autore Segnala Inserita: mercoledì alle 08:34 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 Inserita: mercoledì alle 09:21 Segnala Inserita: mercoledì alle 09:21 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 Inserita: mercoledì alle 11:36 Segnala Inserita: mercoledì alle 11:36 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 Inserita: mercoledì alle 15:09 Segnala Inserita: mercoledì alle 15:09 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.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora