Vai al contenuto
PLC Forum


Dubbi Su Interrupt


step-80

Messaggi consigliati

Premetto che ho letto parecchie discussioni a riguardo qui sul forum,e da cio che ho capito,un interrupt è un evento scatenato ad intervalli di tempo fissi impostati dall utente. Fin qui sbaglio?

Allo scadere del suddetto si effettua un operazione (es lettura impulsi provenienti da un encoder e confronto con lettura precedente)....

Chiedo venia in anticipo per la mia capoccia dura,ma sono un autodidatta con una curiosità direi infinita . Quello che ancora non mi è chiaro è perchè devo usare un interrupt. Per caso ha il vantaggio di poter essere richiamato con una velocità maggiore del tempo di scansione del plc?se si mi si spiegherebbero molte cose. Grazie a tutti coloro che mi vorranno chiarire le idee,spero non aver detto fesserie

Matteo

Link al commento
Condividi su altri siti


Ciao,

per iniziare ti faccio i complimenti riguardo alla tua "fame" di sapere e alla curiosità, aspetto fondamentate per essere un buon programmatore di PLC!

Detto questo veniamo al punto della tua domanda, cercherò di essere il più chiaro possibile:

Per prima cosa vorrei dirti cosa fa il PLC quando non esegue una task(parte di codice) che non sia ad INTERRUPT:

Come saprai ogni PLC ha una task (una parte di programma) che viene richiamata ogni volta che ha concluso l'elaborazione del programma /codice da te scritto, al termine dello stesso ritornerà ad eseguire nuovamento questa task (es. per SIEMENS è la OB1), questo tipo di elaborazione del programma e detta (SWAP-CYCLE) ovvero un ciclo di elaborazione non costante, si allunga e si contrae continuamente. Questo è dovuto al fatto che ad ogni richiamo es.OB1 il programma e la parte di codice da te scritta non è sempre elaborata come il precedente richiam ES. se all'interno del codice hai dei salti, la tua CPU dovrà fare meno istruzioni e quandi impiegherà meno tempo ad arrivare alla fine del codice scritto.

------------------------------------------------------------------------------------------------------------------------------------

CICLO DI ELABORAZIONE DI UNA TASK SWAP-CYCLE (il classico programma PLC)

------------------------------------------------------------------------------------------------------------------------------------

PASSO 1:

La CPU esegue in controllo di tutto l'hardware del plc, quandi verifica schede di I/O digitale e analogiche ecc....

PASSO 2:

Fa l'immagine di processo degli ingressi, si fa una "fotografia" in un'area di memoria interna di come sono gli INPUT, da questo momento in poi non valuterà più l'eventuale variazione degli ingressi.

PASSO 3:

Elabora il programma PLC da te scritto.

PASSO 4:

Assegna l'elaborazione alle uscite fisiche del PLC ovvero gli OUTPUT.

FINE--->ritorna al PASSO 1

------------------------------------------------------------------------------------------------------------------------------------

LE TASK AD INTERRUPT:

Anche in questo caso ogni PLC ha delle task ad INTERRUPT, ma bisogna precisa che ve ne sono di vari tipi:

INTERRUPT A SCHEDUALZIONE OROLOGIO : il processore richiama questa task ogni volta che scade un timer interno programmato da te ad intervalli costanti e molto precisi) es se definisco una task a 10mS questa verrà richiamata sempre allo scadere dei 10ms.

INTERRUPT AD EVENTO ESTERNO (INPUT) HARDWARE : il processore richiama questa task ogni volta che

un ingresso da te definito in fase di configurazione del plc passa da 0 a 1. Puo esssere anche il contrario quando l'ingresso E3.0 passa da 1 a 0 richiama la task interessata, questo dipende sempre da cosa hai definito in fase di configurazione.

INTERRUPT A CAUSA DI ERRORI DI PROGRAMMAZIONE/ANOMALIE DEL SISTEMA : automaticamente (di solito su tutti i plc) richiama questa task in caso di errori da parte del programmatore.

Questi sono solo tre tipi di INTERRUPT tanto per farti un esempio, ma tieni conto che sono molti di più, pensa che il PLC Siemens S7-300/400 a circa 80 tipi di task ad interrupt.

La cosa importante da capire è un'altra ancora ovvero le PRIORITA'.

La task SWAP-CYCLE e la più sfigata, ha la priorià più bassa, ovverro se il processore è all'interno del programma SWAP-CYCLE e arriva un'interrup per schedulazione orologlio arresta l'elaborazione di questa task e salta alla task di schedulazione orologio esegui il codice all'interno di questa task e quando ha finito ritorno alla task swap-cycle sul punto dove era prima della chiamata. se arrivava ancora unatra schedualzione orologio e si trova a 3/4 della task swap-cycle interompe nuovamente il programma esegue la task di schedualzione e poi torna alla swap-cycle.

Pensa se hai la task swap-cycle cheè esegutia mediamente in circa 100ms ed hai una programmato un INTERRUPT a schedulazione orologio a 10ms, la swap-cycle sara interrotta 10 volte........ :(

Ma come detto in precedenza possiamo avere più tipi di INTERRUPT magari uno a tempo (schedulazione orologio) e un'altra task ad evento di INPU, in questo caso se si verifica la contemporanetità dei due INTERRUPT da chi deve andare il processore ?

Risposta : andrà prima da chi ha la PRIORITA' più alta (questo lo definisci tu).

Rimane sempre il fatto che certi tipi di INTERRUPT es. errore di programmazione (colpa tua) avrà sempre la priorità più alta possibile, solitamente non si può cambiare la priorità di questa tank in quanto è definita fissa dal sistema.

Addesso vengo alla tua domanda:

Perchè usare task a INTERRUPT ?

Il classico esempio della task a schedulazione orologio, è l'applicazione di un regolatore PID per eseguire correttamente l'algoritmo di regolazione I(integrale) D(derivativo), senza entrare in tanti concetti di matematica complessa è importante che il calcolo di questi due parametri sia eseguito a intervalli regolari, visto che sono funzioni matemantiche sono funzioni del tempo.

Per quanto riguarda invece l'INTERRUPT ad evento di un INPUT è perchè voglio eseguire una determinata parte di codice solo quando succede una cosa ben precisa.

Questo mi è molto utile visto che la task swap-cycle fotografa gli INPUT sola all'inizio della sua elaborazione, ma se poi cambiano di stato le ne strafrega.

ES. ho una Fotocellula che deve contare con assoluta precisione i pezzi che trasitano su un nastro trasportatore magari che viaggia a 100mt/' e questi pezzi sono distani tra loro 5mm, se credo di riuscirli a contare nella tak swap-cycle sono pazzo visto che viene elaborata ogni 100ms......

Per quanto riguarda l'encoder vi sono schede dedicate (dette intelligenti) che si occupano di acquisire rapidamente le variazioni di stato dello stesso e poi inviano attaverso il bus dati interno del plc il valore di conteggio, e quandi il plc non deve farsi carico di correre come un pazzo per riuscire a leggere un encoder.

Concluso che ci sono altri aspetti in riferimento alla trak a schedualzione orologio, ovvero l'immagine di processo parziale deglio INPUT, ma questa è un'altra cosa ancora....non strettamente necessaria per capire cosa sono gli INTERRUPT.

Spero di essermi spiegato chiaramente,ho fatto un papiro ma chedo che sia meglio così

Se hai altre domande in merito batti un colpo.

Link al commento
Condividi su altri siti

un interrupt è un evento scatenato ad intervalli di tempo fissi impostati dall utente.

Ci sono interrupt a tempo (che funzionano come hai detto) ed interrupt su evento.

Gli eventi, solo per fare qualche esempio, possono essere:

- fronte di salita o fronte di discesa su ingresso di interrupt

- raggiungimento valore di preset di modulo di conteggio veloce

- guasto su modulo sul quale è stata abilitata la diagnostica

Per caso ha il vantaggio di poter essere richiamato con una velocità maggiore del tempo di scansione del plc?

Esattamente.

La normale scansione di un PLC può andare da 1 ms ad alcune decine di ms.

Per molte azioni non ci si può permettere il ritardo dovuto alla scansione del plc.

Ecco allora che si risolve con gli interrupt.

Con gli interrupt la risposta ad un evento può avvenire con ritardi dell'ordine dei microsecondi. Tutto, ovviamente, dipende dal codice scritto nella routine di interrupt.

Quando viene richiamato un interrupt, l'esecuzione del programma principale viene interrotta, viene eseguito il codice scritto nella routine di interrup, e poi si ritorna al programma principale, continuando da dove era stato abbandonato.

Nel caso di eventi di interrupt contemporanei, si deve considerare la priorità degli interrupt. Un interrupt con priorità pià alta interrompe un interrupt con priorità più bassa, ma non viceversa.

Link al commento
Condividi su altri siti

Innanzitutto volevo ringraziare entrambi per la spiegazione piu che dettagliata,impiegare del tempo proprio per aiutare qualcuno di cui onestamente si ignora la figura credo sia specchio di una grande bontà d animo. Spero di riuscire un giorno ad aiutare qualcuno come state facendo voi con me,e magari con la stessa professionalità...ma questo è un altro discorso.

Dunque effettivamente avevo intuito lo scopo di un interrupt,meno il discorso delle priorità. Nel caso di due o piu interrupt in contemporanea affermate che questi vengono eseguiti in ordine di priorità. Per priorità cosa intendete esattamente?scusate sono una capra. Cioè so cosa significa priorità ma non capisco cosa la determini in un dato interrupt. Per esempio significa che prima si andrà ad eseguire quella di errore,poi quella ad evento ecc ecc?

Link al commento
Condividi su altri siti

Espongo brevemente anche la mia applicazione che mi ha portato ad incuriosirmi sugli interrupt.

Ho una etichettatrice per flaconi cilindrici che all inizio era dotata di un piccolo motore in cc per la svolgitura dell etichetta. L impianto elettrico era ridotto all osso ma per fare qualcosa ogni tanto andava bene. Ora ho deciso di prenderla in mano per sistemarla e farla andare come si deve in quanto si inceppava in continuazione.

A tale scopo ho comprato,per eseguire lo svolgimento dell etichetta,un motore passo passo oriental motor serie RBK flangiato 85 con coppia 5 Nm. Ho scelto un passo passo perchè a mio avviso non risente di variazioni di velocità sotto sforzo,al limite si pianta e stop(correggetemi se sbaglio). Il flacone viaggia su di un nastro trasportatore sino ad essere visto dal fotosensore di start,a quel punto l etichetta si svolge,intanto il flacone comincia a girare su se stesso a causa del rullo in spugna (chi ha esperienza con etichettatrici sa di cosa parlo). Nel frattempo un altra ftc di stop del tipo a forcella deve rilevare la tacca di stop sul nastro e fermare il motore.

Tutto cio io lo eseguivo ignorantemente con uno zelio ma capitava spessissimo che l impulso di stop fosse troppo breve per essere elaborato dal controllo con la conseguenza di buttar fuori due o piu etichette al posto di una. La sequenza di per se è elementare,ma mi rendo conto ora di averla affrontata nel modo sbagliato. La velocità di svolgimento è relativamente bassa,col motore a 60 rpm ed un raggio del rullo di 21 mm sono circa 132 mm/s ma il motore non si fermava mai nello stesso punto.

Ora il punto è: potrei creare una routine di interrupt per fermare il mio motore e far si quindi di ottenere precisione maggiore? Il plc che intendevo usare è un vtp 403 d della kernel(che mi ha dato non poche noie)ma a questo punto non so se possa gestire interrupt.

Scusate per il papiro

Link al commento
Condividi su altri siti

Vediamo di partire quasi dall'origine.

Un PLC è basato, come hw, su di un microcontrollore o microprocessore. Inoltre nella CPU è stato caricato un Firmware, cioè un Sw non modificabile dall'utente (detto in modo semplificato) che effettua tutte le operazioni in modo trasparente per l'utente, ma che permenttono alla macchina di lavorare. In pratica il programma che andrai a scrivere è solo un Job di questo firmware.

Il mircrocontrollore/processore ha una sua schedulazione della priorità degli interuopts.

In altri termini gli interrupts di base sono praticamente tutti Hw o strettamente legati ad eventi Hw. Nel vettore degli interrupts è asseganta, in modo non modificabile, una lista di priorità. L'interrutpt più prioritario può interrompere quello meno prioritario, non vale il viceversa.

Esistono inoltre degli interrupts Hw che non sono ne mascherabili ne disabilitabili. In genere sono legati ad eventi così detti catastrofici.

Il più conosciuto e noto è quello legato alla linea di reset. Quando la tensione di alimentazione scende al disotto di una solgia ben determinita e poi risale sopra questa soglia, il Program Counter vien forzato in una locazione ven precisa in genere 0000, oppure i cima alla memoria, dipende dalla filosofia del processore.

Questo è u interrupts che è comune a tutti i processori.

Poi ce ne sono altri appena al disotto come priorità e sono legati a vari eventi catastrofici o che potrebberlo diventarlo. Questo interupts hanno priorità altissima e sono i primi ad essere serviti e possono interrompere gli interrupt normali.

Poi ci sono gli interrupts così detti di precosso, legati ad eventi esterni o a temporizzazioni. Questi interuopts hanno priorità più bassa, ma laloro priorità può essere configurata in modo tale da renderla maggiore o minore rispetto ad altri della medesima classe.

Dovresti leggerti bene il manuale della CPU e dell step 7. In questo modo vedreai che ci sono particolari OB che sono legati ad eventi particolari e che hanno la loro priorità. In alcuni casi il medesimo evento può essere legato a differenti OB per variarne la priorità.

Purtroppo l'argomento interrupts è un argomento piuttosto complesso e non è facile trattarlo, se non superficialmente, nello spazio di un messaggio.

Link al commento
Condividi su altri siti

Grazie mille Livio,stavo proprio leggendomi il manuale per cercare di capirne di piu.

Purtroppo mi devo scacciare dalla testa la convinzione che,per certi lavori "semplici"che de vo eseguire io,certe funzioni "complicate "non mi possano essere d aiuto. Ma ci riusciro....

Link al commento
Condividi su altri siti

va' anche detto che nella gestione di uscite utilizzando routine di interrupt , la massima efficacia la si ottiene su plc o sistemi che prevedono

l'aggiornamento delle uscite in modo immediato e non solo a fine loop

Modificato: da weather
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...