alberto rosso Inserito: 20 febbraio 2007 Segnala Inserito: 20 febbraio 2007 Gentili frequentatori del forum, vado a porvi un problema che mi trovo a risolvere, ma non sono molto sicuro della direzione presa.Attualmente ho una macchina operatrice a tavola rotante (sempre quella!) che lavora con intermittore a quattro stazioni ogni giro dell'albero motore. Fino a ieri la macchina funzionava con delle cammes meccaniche in fase con l'albero motore per cui ogni giro si potevano avere dei segnali su dei micro con una ampiezza variabile a seconda dello sviluppo della camma. Per rendere più flessibile il sistema ho collegato un encoder incrementale al mio PLC e ho realizzato un rudimentale quanto funzionante (nei limiti delle tolleranze imposte dal compito della macchina) programmatore di cammes da 0 a 359 gradi con passi di 1 grado.Adesso volevo implementare una sequenza di primo avvio della macchina: quando accendo la macchina e il PLC vorrei che alla pressione del comando di marcia, la macchina andasse a velocità minima e con tutte le uscite, che non siano la marcia e la bobina di rilascio del freno, inibite a cercare lo zero encoder (I0.2) e che si fermasse in attesa di una ulteriore pressione del pulsante per far partire la marcia normale.Io pensavo di creare una subroutine attiva solo al primo ciclo in maniera da non dover modificare troppo il programma principale che mi imposti l'uscita analogica della velocità al minimo e che resti in attesa della pressione del pulsante di marcia. Per far rimanere "imprigionato nella subroutine" il programma in attesa di tutta la sequenza di eventi del ciclo di zero (chiamiamolo così) è sufficiente richiamare una label come se fosse un ciclo REPEAT-UNTIL condizionato da un merker che cambia stato oppure una volta eseguita la subroutine questa comunque torna al programma principale?Grazie per la risposta.Saluti
ale1979 Inserita: 20 febbraio 2007 Segnala Inserita: 20 febbraio 2007 La soluzione è quella che hai detto tu.All'avvio della cpu io setterei un Mk che mi andrebbe a bloccare il richiamoalle varie Sbr di funzionamento normale e mi richiamerebbe solo quella di sinc.,questo Mk poi lo resetterwi alla fine del ciclo di Sinc.Ma perchè non reimposti il contatore all'accensione con il valore di spegnimento?
alberto rosso Inserita: 20 febbraio 2007 Autore Segnala Inserita: 20 febbraio 2007 Ma perchè non reimposti il contatore all'accensione con il valore di spegnimento?Ci avevo pensato, ma la macchina "storicamente" permette il funzionamento a macchina spenta per la messa a punto (basta mollare un limitatore di coppia) per cui è possibile che la macchina si trovi una posizione diversa dal momento dello spegnimento. E hai voglia a dire a un operatore che è 20 anni che mette a punto la macchina girando una manovella che deve usare una pulsantiera volante con il comando a colpi. Siccome so che lo farebbe comunque appena vado via, devo cautelarmi in questo senso. grazie della risposta.
batta Inserita: 21 febbraio 2007 Segnala Inserita: 21 febbraio 2007 ... è sufficiente richiamare una label come se fosse un ciclo REPEAT-UNTIL condizionato da un merker che cambia stato oppure una volta eseguita la subroutine questa comunque torna al programma principale?In un plc non puoi rimanere all'interno della stessa routine, ma devi comunque uscire e rientrare al ciclo successivo, altrimenti faresti intervenire il "watchdog" e la cpu andrebbe in stop.Puoi facilmente risolvere così: fino a quando non hai terminato la ricerca dello zero richiami la relativa subroutine, ma non richiami tutte le altre; a ricerca dello zero terminata fai l'esatto contrario.
alberto rosso Inserita: 23 aprile 2007 Autore Segnala Inserita: 23 aprile 2007 In un plc non puoi rimanere all'interno della stessa routine, ma devi comunque uscire e rientrare al ciclo successivo, altrimenti faresti intervenire il "watchdog" e la cpu andrebbe in stop.Puoi facilmente risolvere così: fino a quando non hai terminato la ricerca dello zero richiami la relativa subroutine, ma non richiami tutte le altre; a ricerca dello zero terminata fai l'esatto contrario.Diciamo che il programma è strutturato malissimo ed è tutto in una sequenza sola nel main program (OB1) a parte un PID per delle termocoppie. Come faccio a farlo stare dentro alla subroutine senza dover riscrivere tutto il codice? Una label per fare un ciclo tipo repeat-until è applicabile in questo caso?Grazie per la risposta.
DOMI60 Inserita: 24 aprile 2007 Segnala Inserita: 24 aprile 2007 Io userei un jump condizionato che mi "salta" la parte di programma che non mi serve quando voglio fare l'azzeramento ed allo stesso modo (meglio farlo in un blocco a parte) non richiamerei il blocco di azzeramento durante il ciclo della macchina.Spero di essere stato chiaroDomenico
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