step-80 Inserito: 20 ottobre 2014 Segnala Share Inserito: 20 ottobre 2014 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 More sharing options...
Azzokiller92 Inserita: 30 luglio 2015 Segnala Share Inserita: 30 luglio 2015 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 More sharing options...
step-80 Inserita: 30 luglio 2015 Autore Segnala Share Inserita: 30 luglio 2015 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 More sharing options...
biros66 Inserita: 30 luglio 2015 Segnala Share Inserita: 30 luglio 2015 ....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 More sharing options...
valvolina Inserita: 31 luglio 2015 Segnala Share Inserita: 31 luglio 2015 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 More sharing options...
step-80 Inserita: 31 luglio 2015 Autore Segnala Share Inserita: 31 luglio 2015 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 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