Vai al contenuto
PLC Forum


Primo Ciclo E Moduli Tm5- M258


step-80

Messaggi consigliati

Buonasera ragazzi

Ho una macchina composta da una cpu M258 TM258LF42DT e 6 moduli vari TM5 (in, out e acquisizione termocoppie). Tra questi c'è un modulo TM5SDI12D(12 ingressi digitali) al quale sono collegati i segnali di alcuni proximity PNP.

Nel programma ho tre task:

La task MAST che cicla a 5 ms con priorità 13;

Una task 'PIPPO' che cicla a 20 ms con priorità 14;

Una task 'PLUTO' che cicla a 200 ms con priorità 15.

Ovviamente tutto sotto Somachine 3.1.

Ora mi aspettavo che la cpu per prima cosa facesse un immagine di tutti gli ingressi(quindi compresi quelli su bus TM5) e che al primo ciclo di scansione potessi quindi già contare sullo stato reale di quegli ingressi. Da varie prove che ho eseguito però sembrerebbe proprio di no.. :(

Mi spiego: Ho dichiarato una variabile nelle Global di tipo BOOL che ho chiamato 'FIRST SCAN' che ho provveduto ad inizializzare come TRUE. Nella prima POU inserita nella task MAST (vi sono varie POU nelle varie TASK) ho scritto in ST qualcosa del genere:

IF FIRST SCAN AND (NOT PROXIMITY_HOMING_SICUREZZA_FORMATURA OR
NOT PROXIMITY_HOMING_SICUREZZA_PRERISCALDO OR
NOT PROXIMITY_HOMING_SICUREZZA_RISCALDO OR
NOT PROXIMITY_HOMING_SICUREZZA_TAGLIO OR
NOT PROXIMITY_TAVOLA_ROTANTE OR
NOT REED_RIPOSO_VASCHETTA) THEN ATTIVA_PR_EMERG:=TRUE; VAR_SCRIVI_PAG:=45; END_IF

Naturalmente la variabile 'FIRST_SCAN' la metto a zero nell'ultima POU richiamata dalla task 'PLUTO'. In questo modo mi aspetto di averla a TRUE per un intero (primo) ciclo e basta.

in pratica di tutti questi sensori voglio verificarne lo stato al primo ciclo, per verificare che tutti siano nella posizione di riposo. Se non lo fossero, significa che l'arresto precedente è avvenuto in modo anomalo(per esempio per un black out). Comunque a prescindere da questo il concetto che voglio spiegare è un altro. Garantisco che in condizioni normali tutti questi sensori sono ON all'accensione ...invece mi trovo che all'accensione 'ATTIVA_PR_EMERG' è TRUE e VAR_SCRIVI_PAG è 45 (quindi la condizione posta dentro l'IF si è verificata). Mi chiedo...perchè? L'unica cosa che può essere successa è che ha trovato uno o più di questi sensori a zero...ho pensato che fosse il modo errato di rilevare il primo ciclo e quindi ho utilizzato le istruzioni apposite " IsFirstMastCycle" di libreria ma non cambia nulla.

Sconsolato ho risolto creando una piccola routine che verifica lo stato dei sensori non al primo ciclo ma 100 ms dopo l'accensione..naturalmente inibendo ogni comando all'operatore prima di tale verifica per sicurezza. In questo modo tutto funziona a meraviglia ma vorrei capire se qualcuno di voi è incappato in questa cosa e come ne è uscito.

Vi ringrazio anticipatamente dell'aiuto

Matteo

Link al commento
Condividi su altri siti

  • 9 months later...

Ciao guarda non ti diche che disastri mi ha combinato questa cosa.

Utilizzavo il fronte di salita di alcuni Proximity per azzerare alcuni bit, allo spegnimento della macchina erano tutti a 1, quando riaccendevo il PLC vedeva andare a 1 gli ingressi e quindi mi azzerava i bit non ostante la macchina fosse ferma.

Ora utilizzo 2 variabili, plc_r.i_wIOStatus1 che deve essere uguale a 65535 che indica che gli IO a bordo del PLC sono stati inizialiazzati

mentre per gli IO di periferie decentrate tramite TM5 è plc_r.iIOStatus2 che deve essere sempre uguale a 65535

Marco

Link al commento
Condividi su altri siti

Grazie della risposta Marco, certo è una cosa strana, ancora adesso non capisco cosa possa essere.

Parlando di fronti di salita, pure io ho riscontrato il tuo problema: le varie lavorazioni dovrebbero cominciare con il fronte del proximity posizionato sull albero dell intermittore, che all accensione è sempre ad 1(quindi nessuna transizione off-on). Invece mi trovavo che all accensione la macchina partiva da sola!

Link al commento
Condividi su altri siti

....killer92 ha utilizzato le variabili di sistema giuste, tuttavia, posso darvi un consiglio:

lasciate perdere l'avvio ciclo da un fronte di salita di un proximity oppure di un finecorsa, potrebbe anche capitare che, causa il difetto del sensore, il plc interpreti questa cosa come un segnale di inizio ciclo.

Nella machine con intermittore, parliamo quindi di un angolo di 360°, quando possibile, si esegue un primo giro a vuoto, in maniera tale da avere un fronte di discesa ed un fronte di salita del sensore che controlla l'albero dell'intermittore. Dopo questa fase, generalmente,

si abilita l'esecuzione del ciclo automatico.

Link al commento
Condividi su altri siti

ciao Matteo,

io proverei al secondo ciclo cioè:

userei la funzione di sistema per rilevare il primo ciclo,

quando il bit di primo ciclo non è più a true cioè il secondo ciclo,

il plc dovrebbe aver sicuramente rinfrescato correttamente l'immagine degli I/o

prova e fammi sapere

saluti Valvolina

Link al commento
Condividi su altri siti

X biros66: ti ringrazio molto del consiglio, effettivamente il problema che riscontravo era ancora nella fase di start-up della macchina, quindi quando provavo a buttare dentro le prime parti di codice per vedere se tutti gli attuatori funzionavano correttamente. Per essere sicuro che non succeda un avviamento improvviso, ho effettuato proprio come dici tu, cioè faccio eseguire al intermittore un primo giro a vuoto dopo l'accensione della macchina inibendo prima il funzionamento in automatico.

Per Valvolina: ciao Fabio, avevo provato anche come dici tu, cioè eseguendo il controllo dopo il primo ciclo ma il problema persiste e quello che è più strano è fastidioso è che non succede sempre ma alcune volte. Alla fine ho risolto come dicevo nel primo post, eseguendo il controllo 100 ms dopo la messa in Run del Plc

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...