marcocarnevale Inserito: 18 febbraio 2013 Segnala Share Inserito: 18 febbraio 2013 Ciao, Ho iniziato da poco a programmare sui PLC e ho alcuni dubbi per quanto riguarda lì'esecuzione dei sorgenti. Il linguaggio strutturato è sequenziale, cioè le istruzioni sono eseguite una dopo l'altra?? se ad esempio all'interno di un PRG program1 richiamo una function block blocco funzionale : PROGRAM program1 ..... VAR istanza_blocco_funzionale: blocco_funzionale; END_VAR istruzione1 istruzione2 blocco_funzionale(parametri...) ... istruzione n ; Nell'esecuzione del PRG le istruzioni sono eseguite una dopo l'altra, ma quando richiamo la FB cosa succede?? aspetto che questa sia completata per andare avanti con le istruzioni o l'esecuzione passa oltre ed i valori interni alla funzione sono sono memorizzati in un area di memoria assegnata alla FB?? cioè se il tempo di ciclo del task assegnato al PRG è di 20ms e la FB impiega un tempo maggiore per essere eseguita cosa succede?? se al posto della function block avessi una semplice "function"?? queste domande possono sembrare banali ma devo chiarire assolutamente questi concetti di base!! grazie per l'attenzione!! Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 18 febbraio 2013 Segnala Share Inserita: 18 febbraio 2013 Non so come funziona su plc non Siemens, quello che ti posso spiegare io per siemens le istruzioni vengono eseguite una dietro l'altra, questo determina il tempo di ciclo del tuo plc il tempo ciclo di un plc è dato dalla scansione del blocco OB1 che è il main, tutte le funzioni vengono richiamate all'interno del main se scrivi una fb, questa viene eseguita completamente, quello che puo accadere è che se devo fare un qualcosa che sposta per esempio dei dati, questa per arrivare al risultato richiesto ha bisogno di più cicli di scansione quindi di solito queste fb hanno una db che è una memoria di appoggio, dove salva i dati temporaneamente per poi riprenderli al prossimo ciclo, di solito anno anche un uscita di busy che dice che il job di lavoro è attivo. ed un done che identifica la fine dell'operazione. quindi se devi scrivere una fb che deve fare delle operazioni che non possono finire in un ciclo plc devi essere tu ha creare un segnale di busy ed un done a fine operazione, appoggiando i dati nella db di appoggio che si crea fb la cosa è un po diversa per gli fc ho inserito dei filmati su step7 dove spiega la differenza tra fb ed fc prova a dagli un occhiata ciao. Link al commento Condividi su altri siti More sharing options...
marcocarnevale Inserita: 19 febbraio 2013 Autore Segnala Share Inserita: 19 febbraio 2013 (modificato) ciao, per cominciare grazie per la risposta penso di aver capito. vorrei fare una domanda che va un po più nello specifico. ho un main(PRG) che ha la seguente struttura CASE state OF 0: (*Stato IDLE*) returnState := 0; state := 100; 1: FB(in:=.......); (*function block *) IF NOT FB.busy THEN state := 0; END_IF 100: TON(IN:=TRUE, PT:=T#500ms); IF TON.Q THEN TON (IN:=FALSE); returnState := returnState +1; IF (returnState > 1) THEN returnState := 0; END_IF state := returnState; END_IF END_CASE dallo state 0 passo allo state 100 e dal 100 passo allo state 1. una volta entrato nell'uno viene richiamata una FB(l'istanza della funzione è dichiarata nelle variabili non riportate in questo codice) .Ora cosa succede: Rimango nello state 1 finchè la FB non ritorna NOT busy ??terminato il tempo di scansione del PLC pero' anche se la FB non ha terminato la sua esecuzione ricomincio il CASE con lo stato 0??? Modificato: 19 febbraio 2013 da marcocarnevale 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