Jump to content
PLC Forum


Sign in to follow this  
Maverick85vr

Anomalia utilizzo Hardware Interrupt

Recommended Posts

Maverick85vr

Buongiorno a tutti!

In un PLC S7-1200 installato presso un cliente, ho provato a implementare un interrupt Hardware scatenato sul fronte di salita di un ingresso digitale, in conseguenza del quale viene chiamato un blocco di codice che estrae un elemento dalla testa di un array e, in base al valore che esso assume attiva o meno un'uscita digitale per un certo tempo (bobina di out preceduta da timer TP). Gli ingressi digitali hanno un filtro impostato di 10 ms.

Ora, il comportamento per me strano (ma sicuramente sarò io che non ho tutte le conoscenze necessarie) è che nel momento in cui l'interrupt viene scatenato e la relativa procedura viene eseguita, quando l'uscita va alta essa rimane alta fino al successivo interrupt, nonostante in realtà la durata sia impostata mediante timer TP a 10 ms;
in sostanza, è come se a ogni interrupt, l'uscita venisse inizialmente resettata e poi eventualmente settata (in presenza delle condizioni opportune), anziché rimanere eventualmente alta soltanto per il tempo previsto.
Il medesimo blocco di codice, se anziché inserirlo nella procedura di interrupt lo utilizzo (come sto facendo tuttora) nella ciclica del PLC funziona correttamente.

A cosa può essere dovuto questo comportamento? Fa parte della naturale gestione delle procedure di interrupt, su cui ammetto di avere pochissima esperienza?

Grazie infinite a tutti per il supporto.

Buona giornata! 😉

Share this post


Link to post
Share on other sites

step-80

Ciao 

 

la prima cosa che mi viene da chiederti è: dove alzi l'uscita digitale col Timer ? nel blocco interrupt? Perchè se cosi fosse secondo me è perfettamente normale ciò che succede. 

Il blocco viene eseguito su richiesta e viene eseguito ciò che vi è all'interno ma solo per una scansione. Quindi il tuo programma alza l'uscita ma poi ciò che dovrebbe abbassarla (il fronte di discesa del timer TP) non viene elaborato e quindi l'uscita rimane alta. Questo è ciò che deduco, cosi a primo sguardo. 

Sempre se cosi fosse, secondo me dovresti alzare l'uscita nell'interrupt ma abbassarla nell'OB normale ciclico. 

Share this post


Link to post
Share on other sites
Maverick85vr

Grazie mille 

21 minuti fa, step-80 scrisse:

Ciao 

 

la prima cosa che mi viene da chiederti è: dove alzi l'uscita digitale col Timer ? nel blocco interrupt? Perchè se cosi fosse secondo me è perfettamente normale ciò che succede. 

Il blocco viene eseguito su richiesta e viene eseguito ciò che vi è all'interno ma solo per una scansione. Quindi il tuo programma alza l'uscita ma poi ciò che dovrebbe abbassarla (il fronte di discesa del timer TP) non viene elaborato e quindi l'uscita rimane alta. Questo è ciò che deduco, cosi a primo sguardo. 

Sempre se cosi fosse, secondo me dovresti alzare l'uscita nell'interrupt ma abbassarla nell'OB normale ciclico. 

Grazie della risposta!
Sì, effettivamente la gestione dell'uscita avevo provato a farla internamente alla procedura di interrupt, quindi molto probabile sia come dici: essendo il blocco eseguito solo per un ciclo, il fronte di discesa del timer TP non viene elaborato e l'uscita rimane alta per quello.  Proverò a cambiare implementazione.

Grazie ancora!

Share this post


Link to post
Share on other sites
step-80

Non conosco la tua applicazione, ma valuterei bene l'uso dell'interrupt. Una cpu decente oggi gira in 3-5 ms (e questo già la dice lunga sul tempo di filtro impostato a 10 ms). Guarda bene anche le impostazioni Hw perchè un ingresso legato ad interrupt non può avere quel filtraggio secondo me..ma non conosco Siemens cosi bene

Share this post


Link to post
Share on other sites
Maverick85vr
11 minuti fa, step-80 scrisse:

Non conosco la tua applicazione, ma valuterei bene l'uso dell'interrupt. Una cpu decente oggi gira in 3-5 ms (e questo già la dice lunga sul tempo di filtro impostato a 10 ms). Guarda bene anche le impostazioni Hw perchè un ingresso legato ad interrupt non può avere quel filtraggio secondo me..ma non conosco Siemens cosi bene

Sono d'accordo.
Diciamo che ti ho raccontato le condizioni in cui ho provato e mi si è presentata l'anomalia, non avendo avuto purtroppo tempo per effettuare tentativi e modificare configurazioni HW e quant'altro rispetto al SW che ho trovato sulla macchina. Mi interessava sentire una vostra opinione su quel particolare comportamento, ecco tutto.

Grazie ancora.

Share this post


Link to post
Share on other sites
batta

Concordo con tutto quello che ha detto Step-80, sia per quanto riguarda l'uscita che rimane alta, sia sulla valutazione se serve complicarsi la vita con un interrupt, se il filtro dell'ingresso è impostato, probabilmente, con un tempo più elevato del ciclo di scansione della cpu.
A volte, oltre alla descrizione del problema, potrebbe essere utile descrivere anche cosa si vuol fare.

Magari si scopre che ci sono soluzioni più semplici e razionali.

Share this post


Link to post
Share on other sites
Maverick85vr
15 ore fa, batta scrisse:

Concordo con tutto quello che ha detto Step-80, sia per quanto riguarda l'uscita che rimane alta, sia sulla valutazione se serve complicarsi la vita con un interrupt, se il filtro dell'ingresso è impostato, probabilmente, con un tempo più elevato del ciclo di scansione della cpu.
A volte, oltre alla descrizione del problema, potrebbe essere utile descrivere anche cosa si vuol fare.

Magari si scopre che ci sono soluzioni più semplici e razionali.

Onestamente, mi pareva di aver descritto il contesto nella maniera più chiara possibile, pur omettendo ulteriori dettagli sulla logica di programma.
A ogni modo, la necessità era quella di eseguire una certa operazione esattamente nell'istante in cui quell'ingresso digitale (corrispondente ad una FC) passava da 0 a 1, più per scrupolo che per altro...per essere sicuri che l'azione della FC avesse priorità su tutta la ciclica del PLC e indipendentemente dal punto in cui si trovasse l'esecuzione del programma (era più che altro un test).
Il filtro sull'ingresso non ha alcun senso, son d'accordo...solo che mi sono accorto tardi che fosse impostato e non ho potuto fare prove togliendolo, sicché vi ho riportato il contesto in cui mi si è verificata l'anomalia, così come era, in modo che potesse esservi d'aiuto per dare una spiegazione all'anomalia che avevo riscontrato.
Tutto qui.

Grazie ancora.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...