Paperin0 Inserito: 3 luglio 2017 Segnala Share Inserito: 3 luglio 2017 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 More sharing options...
Water Inserita: 1 settembre 2017 Segnala Share Inserita: 1 settembre 2017 .. beh di primo acchito ... non hai istanziato il timer! MioTimer ( Enable := ??, TIMELOW := ??, TIMEHIGH := ??) ; ciao Link al commento Condividi su altri siti More sharing options...
Water Inserita: 2 settembre 2017 Segnala Share Inserita: 2 settembre 2017 .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 More sharing options...
Paperin0 Inserita: 12 settembre 2017 Autore Segnala Share Inserita: 12 settembre 2017 Ormai avevo risolto in :D. Comunque sia grazie mille per la risposta 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