meccanico1 Inserito: 22 luglio 2015 Segnala Inserito: 22 luglio 2015 buon giorno esiste la possibilità di monitorare il tempo di esecuzione di ob40 in una 314c2dp ? Ho due interrupt , su due ingressi diversi, che potrebbero essere contemporanei . garzie
Livio Orsini Inserita: 22 luglio 2015 Segnala Inserita: 22 luglio 2015 Assegna priorità differente ai 2 interrupt; se arrivano contemporaneamente viene servito immediatamente il più prioritario el'altro rimane pendente. Al termine della routine di sevizio del primo sarà servito anche il secondo. Comunque se vuoi monitorare il tempo di esecuzione di un blocco o di un FB-FC è sufficiente come prina istruzione del blocco settare un valore su di uscita analogica, usando la scrittura diretta in periferia Hw; come ultima istruzione del blocco si setta la medesima uscita a 0, sempre scrivendo direttamente in periferia Hw. Poi misuri con un osciloscopio In alternaticìva come pria istruzione leggi l'orologio di sistema e come lo rileggi alla fine del blocco, esegui la sottrazione ed il valore lo metti in una variabie che andrai a leggere.
meccanico1 Inserita: 22 luglio 2015 Autore Segnala Inserita: 22 luglio 2015 scusami Livio , ho cercato un po' dove stabilire la priorità ma non ho trovato nulla . Poi correggimi se sbaglio ma per elaborare interrupts con una cpu 314c2dp l'unica opzione è l'b40 ?
Livio Orsini Inserita: 22 luglio 2015 Segnala Inserita: 22 luglio 2015 Sono anni che non uso più S7300, però ricordo che gli interrutp di processo non erano legabili solo allo OB40. Comunque anche se fosse solo lo OB40 il blocco di servizio per l'interrupt di processo, la priorità di servizio se non è definibile da utente è fissata dal sistema. Dovresti leggerti bene quella parte di manuale che riguarda gli interrutp di processo ed il manuale relativo della CPU, se usi gli ingressi on board, oppure quello della scheda se usi una scheda di ingressi veloci. Tieni comunque presente che statisticamente improbabile, direi impossibile, la perfetta contemporaneità degli interrupts. Il primo che viene riconosciuto viene servito. Se durante il servizio del primo interrupt ne arriva un altro si hanno 2 possibilità: se il secondo ha più alta priorità del primo viene interrotta la routin di servizio del primo e viene servito quello a più alta priorità, al termine verràripresa l'elaborazione di quello meno prioritario, altrimenti il secondo sarà servito al termine del servizio del primo interrupt. Però forse tu stai usando male il blocco di servizio OB40. Se entrambi gli eventi sono legati allo OB40 tu dovrai fare una semplice operazione. Come prima istruzione in OB40 vai a riconoscere quale dei di 2 ingressi ha scatenato l'interrupt, in base all'ingresso chiami lo FB o lo FC relativo, prima però riabiliti l'interrupt. In questo modo la durata di OB40 sarà dell'ordine del µs.
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