Maverick85vr Inserito: 1 agosto 2019 Segnala Share Inserito: 1 agosto 2019 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! 😉 Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 1 agosto 2019 Segnala Share Inserita: 1 agosto 2019 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. Link al commento Condividi su altri siti More sharing options...
Maverick85vr Inserita: 1 agosto 2019 Autore Segnala Share Inserita: 1 agosto 2019 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! Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 1 agosto 2019 Segnala Share Inserita: 1 agosto 2019 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 Link al commento Condividi su altri siti More sharing options...
Maverick85vr Inserita: 1 agosto 2019 Autore Segnala Share Inserita: 1 agosto 2019 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. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 1 agosto 2019 Segnala Share Inserita: 1 agosto 2019 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. Link al commento Condividi su altri siti More sharing options...
Maverick85vr Inserita: 2 agosto 2019 Autore Segnala Share Inserita: 2 agosto 2019 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. Link al commento Condividi su altri siti More sharing options...
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