andyfab Inserito: 13 dicembre 2007 Segnala Inserito: 13 dicembre 2007 Ciao a tutti! E' la prima volta che scrivo sul forum ed è da poco che utilizzo il PLC, quindi scusate per le eventuali imprecisioni.Io devo comandare due attuatori Robo-Cylinder RCP2 della SINTA (2 assi che lavorano in una stazione di riempimento di capsule). Ho scritto per ogni asse una funzione FC che, ricevuto l'input da un ingresso del PLC, fa muovere gli attuatori nella posizione che viene data, sempre come input.Il problema è che non riesco a scrivere una funzione in cui richiamare più volte di seguito queste 2 funzioni che ho creato per i due assi perchè, dopo il secondo richiamo, gli attuatori non si muovono più e rimangono accesi. In pratica dovrei fare uno spostamento sull'asse Y e, una volta eseguito questo, più spostamenti lungo l'asse X in successione (con temporizzatori) con la stessa funzione.Se qualcuno saprebbe darmi qualche consiglio per risolvere questo problema gliene sarei moto grato!P.S.: se mancano delle informazioni chiedetemi pure, è la prima olta che scrivo su forum..Grazie,Andrea
batta Inserita: 13 dicembre 2007 Segnala Inserita: 13 dicembre 2007 Non puoi postare la tua FC, in modo che possiamo dare un'occhiata e rilevare eventuali errori?
andyfab Inserita: 13 dicembre 2007 Autore Segnala Inserita: 13 dicembre 2007 Allego il pdf del programma, non ci sono i commenti ai passi, in caso chiedimi pure.I "comanda_robot" sono i comandi in uscita dal PLC, "stato_dei_robot" sono quelli in ingresso dagli attuatori.
andyfab Inserita: 13 dicembre 2007 Autore Segnala Inserita: 13 dicembre 2007 Questa è la versione iniziale più semplice del programma per l'asse X
batta Inserita: 13 dicembre 2007 Segnala Inserita: 13 dicembre 2007 Mi sono fermato con la lettura alle seguenti righe:29 IF start_X=1 THEN 30 avvia_X:=1; 31 ENDSiamo all'inizio del programma vero e proprio e c'è già un problema.La variabile "avvia_X" è una variabile di tipo TEMP. Se "start_X" è =1, ad "avvia_X" viene assegnato il valore 1; ma se "start_X"è =0, "avvia_X" assume un valore indefinito.Tutte le variabili TEMP hanno vita solo all'interno del blocco e si appoggiano ad un'area di memoria che quando si esce dal blocco viene liberata e che potrebbe (il condizionale si può anche togliere) essere utilizzata da altre funzioni. Quando richiami nuovamente la tua FC quindi tutte le variabili TEMP potrebbero non contenere più il valore precedentemente assegnato. Anzi, diciamo pure che se succede è per puro caso.Un altro problema poi deriva dall'utilizzo di variabili comuni, che dovrebbero invece avere funzioni diverse.Se nella FC richiamata con i parametri per l'asse X assegni un valore alla variabile, per esempio, "Dati.inizio_movimento_X_r", e poi richiami l'FC con i parametri per la gestione dell'asse Y e vai a leggere/scrivere sempre la stessa variabile, è chiaro che questo genera un conflitto.Altro problema potrebbe derivare poi dall'utilizzo di IF senza ELSE. Voglio dire, esegui un'operazione se la condizione è vera, ma cosa fai se la condizione è falsa? Sei sicuro che sia corretto non eseguire operazioni?Per finire, il linguaggio strutturato è molto comodo per fare calcoli e manipolare dati, ma è mia opinione che non sia il più adatto per gestire questo tipo di sequenze.
andyfab Inserita: 13 dicembre 2007 Autore Segnala Inserita: 13 dicembre 2007 Nel programma iniziale, il secondo fle che ho allegato, l' "avvia_X" non c'era.Per l'ELSE avevo provato a metterlo ma probabilmente avevo sbagliato qualche passaggio e il programma non andava alla fine come volevo.Per il problema delle variabili proverò a fare dei cambiamenti.Grazie comunque per i consigli molto utili!
TravelMen Inserita: 14 dicembre 2007 Segnala Inserita: 14 dicembre 2007 Ciao "andyfab" a tutto cio che ha detto "batta" vorrei aggiungere una piccola considerazione, visto l'applicazione che devi fare non era meglio partire a fare un FB piuttosto di un FC?? Considera che per ogni asse hai bisogno di vari dati da appoggiare sulle memorie del PLC, e creando un FB crei le memorie necessarie hai due assi, e ogni volta che la riutilizzi automaticamente allochi lo spazio per le nuove variabili.Saluti e buon lavoro
andyfab Inserita: 14 dicembre 2007 Autore Segnala Inserita: 14 dicembre 2007 Grazie Gianluca per il consiglio, proverò a cambiare le FC in FB e a creare i relativi DB. Avevo già provato questa soluzione rapidamente una volta, ma il problema dei richiami successivi restava e così sono tornato subito alle FC senza cercare gli errori che potevo aver fatto.Cercherò di sfruttare questo consiglio!Grazie
JumpMan Inserita: 14 dicembre 2007 Segnala Inserita: 14 dicembre 2007 A parte i vari errori possibili nel tuo codice, i parametri OUT possono avere dei problemi (a meno che la Siemens non habbia sistemato la faccenda) se non vengono elaborati (causa salti o altro) all'interno di un FC/FB.Per ulteriori info vedi quiSe il problema è questo, probabilmente l'FC singolo funziona ma richiamato + volte non va neanche se tutto il resto è giusto...Ripeto, non so se hanno sistemato la faccenda ma prima di usare un OUT bisogna essere sicuri di scriverlo sempre... io nel dubbio uso IN/OUT Ciao
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