Vai al contenuto
PLC Forum


Prime prove con Codesys ^ST^ ~ .~


Paperin0

Messaggi consigliati

Salve a tutti.
Premetto che sono alle prime armi con il linguaggio st e mi sto trovando in difficolta con un esercizio di cui non riesco a trovare la soluzione, ne ragionandoci ne in rete.

Praticamente ho bisogno di gestire un'unità di traffico fittizia, ovvero.. ho un semaforo e dopo aver ricevuto uno START devo far alternare le fasi...verde ^10 sec^... giallo ^10 sec^... rosso ^10 sec^ per poi tornare al verde e via dicendo in loop con uno STOP per far fermare il tutto.

Alcuni dei problemi riscontrati sono:
-non riesco a far partire e a resettare il timer 
-non riesco a farlo mettere in loop 
-non riesco a inserire una fase ^giallo^

Grazie a tutti per la lettura, spero che tra voi ci sia qualcuno che sappia aiutarmi.

 

FUNCTION_BLOCK POU
VAR_INPUT
    Start : BOOL;            //Avvio
    Stop : BOOL;            //Fermata
END_VAR
VAR_OUTPUT
    uscita : BOOL;
    StatoAttuale : INT;        //Stato attuale
    StatoSuccessivo : INT;     //Stato successivo
    
    Tempo: TON;        //timer
    TempoTrascorso: TIME;     //tempo trascorso
    Variabile : BOOL;    
    Verde : BOOL;             //Verde 
    Giallo : BOOL;            //Giallo
    Rosso : BOOL;             //Rosso
END_VAR
VAR
END_VAR

////////////////////////////////////////////////////

IF Start <> 0  THEN
    StatoAttuale := 1;
    Stop := FALSE;
        ELSE
            Stop:=TRUE;
            StatoAttuale :=0;                        
END_IF

CASE StatoAttuale OF
    1:         //IF NOT (Tempo.Q) THEN 
            IF StatoAttuale =1 THEN
                Verde := TRUE;
                Rosso := FALSE;
                Tempo.IN := TRUE ;             // timer input
                Tempo.PT := T#10S;                 // timer periodo 
                TempoTrascorso := Tempo.ET;        // tempo trascorso
                uscita := Tempo.Q;        
            END_IF 
                    IF (Tempo.Q)THEN
                        StatoAttuale :=2;
                        tempo.IN:= FALSE;                            
                    END_IF
                
    2:         IF StatoAttuale =2 THEN
                Verde := FALSE;
                Rosso := TRUE;
                Tempo.IN := TRUE ;             // timer input
                Tempo.PT := T#10S;                 // timer periodo 
                TempoTrascorso := Tempo.ET;        // tempo trascorso
                uscita := Tempo.Q;
            END_IF    
                    IF (Tempo.Q)THEN
                            StatoAttuale :=1;
                            tempo.IN:= FALSE;
                    END_IF
END_CASE

 

Link al commento
Condividi su altri siti

  • 1 month later...

.scusa ti ho fatto l'esempio di un blinker, per il TON TOF è questo:

MioTON    (IN := "abilita_timer", PT:= "Tempo_timer")    ;

 

dopodiche puoi usare MioTON.Q e MioTON.PT per il tempo trascorso,

sulla logica di funzionamento non ti posso aiutare però prova ad usare un contatore da incrementare con i timers,

usando poi il valore nel Case ... ma non prenderla per buona

ciao

Link al commento
Condividi su altri siti

  • 2 weeks later...

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