Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Richiamo Funzioni Fc - problema nel richiamo ripetuto di una stessa FC


Messaggi consigliati

Inserito:

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


Inserita:

Non puoi postare la tua FC, in modo che possiamo dare un'occhiata e rilevare eventuali errori?

Inserita:

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.

Inserita:

Questa è la versione iniziale più semplice del programma per l'asse X

Inserita:

Mi sono fermato con la lettura alle seguenti righe:

29 IF start_X=1 THEN
30 avvia_X:=1;
31 END

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

Inserita:

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!

Inserita:

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

Inserita:

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

Inserita:

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 qui

Se 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

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