boba3aggiusta Report Share Posted February 24, 2013 salve a tutti mi sono bloccato in una parte di programma che stò tentando di fare, ora vi spiego cosa dovrei fare: Alla presnza di un ingresso (%I1.0) mi si deve attivare un ciclo in cui si deve attivare uscita (%Q.1.0) di tempo (x) e subito dopo altro tempo (y) dove l'uscita (Q.1.0) deve rimanere a 0! quindi: sia che %I1.0 per un istante è attivo, sia che rimanga sempre attivo (nell'arco del ciclo) il ciclo deve essere sempre Tempo X on e tempo Y off, poi se terminato il ciclo ancore è presente l'ingresso allora il ciclo ricomincia. Non sò se è chiaro ciò che ho scritto, ho provato con un flip flop ma non ci sono riuscito. Ringrazio anticipatamente Quote Link to post Share on other sites
elettrificato Report Share Posted February 26, 2013 ciao potresti provare usando due timer di tipo TP il primo attivato dal fronte di salita del %I1.0 o dal termine del conteggio del secondo timer + I1.0, il secondo attivato dalla fine conteggio del primo timer. L'uscita Q1.0 sarà uguale allo stato dell'uscita del primo TP. Il codice in ST potrebbe essere: IF RE (%I1.0) or (FE (%TM2.Q) and %I1.0 then start %TM1;end_if; IF FE (%TM1) then start %TM2;end_if; %Q1.0:=%TM1.Q; considera che non l'ho testato e non ricordo se il fronte di salita/discesa è utilizzabile sull'out dei timer, se così non fosse devi appoggiare gli out dei timer a variabili di tipo EBOOL. Quote Link to post Share on other sites
boba3aggiusta Author Report Share Posted February 27, 2013 ciao non riesco a farlo funzionare... come faccio ad attivare il secondo temporizzatore alla fine del conteggio del primo?? che riferimento ho, della fine del temporizzatore?? Quote Link to post Share on other sites
elettrificato Report Share Posted February 28, 2013 ciao ho ricontrollato quanto scritto, nella seconda riga c'è un errore, devi utilizzare il %TM1.Q, se non funziona fai così, visto che non sono sicuro del funzionamento del controllo dei fronti di salita/discesa sull'out del timer IF RE (%I1.0) or (FE (%M1) and %I1.0 then start %TM1;end_if; IF FE (%Q1.0) then start %TM2;end_if; %Q1.0:=%TM1.Q; %M1:=%TM2.Q Quote Link to post Share on other sites
boba3aggiusta Author Report Share Posted March 1, 2013 (edited) Questa sera provo, e' sempre meglio utilizzare i fronti di salita e di discesa? Edited March 1, 2013 by boba3aggiusta Quote Link to post Share on other sites
elettrificato Report Share Posted March 4, 2013 i fronti di salita e discesa servono per valutare la variazione di stato di un segnale digitale, non esiste una regola che dice se meglio o peggio è necessario valutare di volta in volta ciò che serve, ad esempio se voglio incrementare un valore intero al passaggio di un pezzo, senza utilizzare un contatore, dovrò utilizzare il fronte altrimenti ad ogni ciclo di programma il mio intero verrebbe incrementato. ciao Quote Link to post Share on other sites
boba3aggiusta Author Report Share Posted March 5, 2013 ciao non riesco a capire dove sbaglio... non riesco a far funzionare sto benedeto fronte!!! teoricamente se scrivessi: test_1 := fe (pippo) , in teoria test_1 diventa 1 solo dopo che pippo da 1 va a 0 e rimane ad 1 solo per il tempo ciclo del plc giusto? Invece a me accade questo: al primo ciclo, pippo è a 0 e test_1 è a 0, ora porto pippo a 1 e test_1 rimane a 0, poi riporto pippo a 0 e test_1 va ad 1, però poi ci rimane fino a quando non riporto pippo a 1. dove sbaglio? Quote Link to post Share on other sites
elettrificato Report Share Posted March 6, 2013 test_1 := fe (pippo) , in teoria test_1 diventa 1 solo dopo che pippo da 1 va a 0 e rimane ad 1 solo per il tempo ciclo del plc giusto? giusto se pippo è dichiarato come variabile di tipo EBOOL, ciao Quote Link to post Share on other sites
boba3aggiusta Author Report Share Posted March 8, 2013 non risco a capire dove è l'inghippo ma non mi funziona!! si è impostata come ebool ma nulla da fare!! Quote Link to post Share on other sites