Jump to content
PLC Forum

step-80

Dubbio Su Richiamo Istanze-Somachine

Recommended Posts

step-80

Buonasera ragazzi

dubbio stupido che mi ha assalito:

Somachine,plc M258,linguaggio di programmazione ST. Mi sono sempre chiesto che differenza faccia la posizione in cui inserisco un blocco funzionale(poniamo il caso un banale temporizzatore ad impulsi TP,ma potrebbe essere qualunque altro blocco funzione). Dunque è mia abitudine richiamare tutte le istanze all'inizio dell'FC (temporizzatori,fronti di salita ecc) e poi usare un istruzione CASE per eseguire le mie cicliche...ad un certo punto avevo appunto l'istruzione case che ad esempio riporta:(copio-incollo esattamente il mio codice)

40:IF MOVEABS_PRINC.Busy THEN FASE_INIEZ:=45; END_IF //CONTROLLO MOVIMENTO PARTITO
45:IF MOVEABS_PRINC.Done THEN MOVEABS_PRINC.Execute:=FALSE;
FASE_INIEZ:=50; END_IF //MOVIMENTO FONDO TERMINATO
50:TON_P_FONDO.IN:=TRUE; TP_SEGN_POMPA.IN:=TRUE; FASE_INIEZ:=55; //SETTO UN TIMER CHE RITARDA LA RISALITA DEGLI AGHI
55:TP_SEGN_POMPA.IN:=FALSE; FASE_INIEZ:=60;

Questa naturalmente è una parte, se vedete alla quarta riga metto ad '1' il bit del timer 'TP_SEGN_POMPA.IN' ed alla riga successiva lo metto a zero. Così facendo mi sarei aspettato che il timer non partisse mai,in quanto l'istanza è richiamata all'inizio del codice e quindi in teoria non avrebbe mai visto che il bit 'IN' è andato ad uno. Invece il timer parte,e non capisco perchè...Qualcuno mi può illuminare per cortesia?

Grazie a tutti anticipatamente

Matteo

Link to post
Share on other sites

bigalex

Ciao Matteo.

E' giusto che il timer TP_SEGN_POMPA si attivi perchè TP_SEGN_POMPA.IN rimane a TRUE per un ciclo di scansione (cioè fino a quando non viene rielaborata l'istruzione CASE. Essendo un timer di tipo TP (Pulse) basta al minimo un ciclo di scansione di TP_SEGN_POMPA.IN = TRUE per fare eseguire l'istruzione generando un impulso.

bigalex :blink:

Link to post
Share on other sites
step-80

Ciao bigAlex

Allora l'istruzione CASE fa una specie di 'registro di immagine' prima di eseguire le istruzioni in essa contenute?

Credevo che le istruzioni fossero eseguite in sequenza, e cioè che nel mio caso l'istruzione 55 fosse eseguita subito dopo la 50...non il ciclo di scansione successivo...è cosi?

Edited by step-80
Link to post
Share on other sites
Giuseppe Signorella

Con l'istruzione case, (select case) in altri linguaggi, vengono eseguiti dei salti, quindi alcune istruzioni (righe di codice) vengono saltate e non eseguite. C'è però da tener conto "non conosco l' ST da te utilizzato, anche se comprensibile, ma la sintassi potrebbe essere differente da quella che conosco io", che in alcuni linguaggi dopo aver eseguito le istruzioni case, devi uscire dal select case, altrimenti vengono eseguite anche le istruzioni successive.

Edited by Giuseppe Signorella
Link to post
Share on other sites
step-80

Grazie BigAlex e Giuseppe, ora credo di aver capito

L'istruzione CASE (parlando di somachine) esegue la riga di codice corrispondente al valore della variabile (nel mio caso FASE_INIEZ) ma poi una volta elaborata l'istruzione esce dal costrutto . Ecco spiegato perchè il timer parte, perchè la fase 50 e la 55 vengono elaborate in due scansioni contigue e non di seguito in un unica scansione come pensavo io.

Grazie ancora

Matteo

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...