Vai al contenuto
PLC Forum


Esecuzione Codice Sorgente In St


marcocarnevale

Messaggi consigliati

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


Gianmario Pedrani

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

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: da marcocarnevale
Link al commento
Condividi su altri siti

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