Vai al contenuto
PLC Forum


Dubbio Su Richiamo Istanze-Somachine


Messaggi consigliati

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 al commento
Condividi su altri siti


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 al commento
Condividi su altri siti

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?

Modificato: da step-80
Link al commento
Condividi su altri siti

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.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

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