nonsferatum Inserito: 22 novembre 2012 Segnala Inserito: 22 novembre 2012 Salve a tutti con il mio s5 dovrei comandare un motore che si accende 3 secondi fa una pausa di 7 secondi e riparte continuando così all'infinito fino a che io non gli dia un comando di stop. Il comando di start stop alla sequenza la posso fare tranquillamente con un interruttore posizionato in E 0.X solo che non trovo proprio il modo di fare la sequenza ciclica. Attualmente lavoro solo in OB1, è forse il caso di estendere la programmazione e creare FB e DB? Grazie a tutti
JumpMan Inserita: 24 novembre 2012 Segnala Inserita: 24 novembre 2012 (modificato) Abituati subito a strutturare il programma in vari PB/FB (per mantenere un certo ordine) e metti già i dati in una DB (in futuro potrai leggerli/scriverli con un pannello operatore). In S5 i PB sono più stupidi degli FB, nel senso che non puoi passargli dei parametri nella riga di lancio e non puoi usare certe istruzioni complesse all'interno, per questo sono da usarsi solo per logica booleana. Poi devi scegliere un linguaggio di programmazione che ti è più congeniale, io di solito facevo i PB in KOP e gli OB/FB in AWL, ma se hai più dimestichezza con le porte logiche puoi usare anche il FUP. Il programma che vuoi fare tu è molto semplice, ci sono vari modi per farlo, te ne descrivo uno (non guadare troppo la sintassi che vado a memoria): DB100: DW0 = KT 30.1 DW2 = KT 70.1 OB1: SPA PB1 PB1: ADB 100 *** (interruzione di segmento) U E0.X UN M100.1 L DW0 SE T1 NOP 0 NOP 0 NOP 0 U T1 = M100.0 *** U M 100.0 L DW2 SE T2 NOP 0 NOP 0 NOP 0 U T2 = M100.1 *** U E0.X UN M 100.0 = A 1.x Modificato: 24 novembre 2012 da JumpMan
nonsferatum Inserita: 25 novembre 2012 Autore Segnala Inserita: 25 novembre 2012 Ciao JumpMan grazie per la risposta. Allora agendo da autentico profano e prendendo in esempio un progetto su simulatore ha fatto nel seguente modo e funziona. Vedete voi se ci sono imperfezioni o come migliorare: OB1: SPA PB1 PB1: : U E0.1 : UN T1 : L KT 20.1 : SV T0 : UN T0 : L KT 30.1 : SV T1 : U T0 : ZR Z5 : UN Z5 : L KZ 4 : S Z5 : L Z5 : T MW100 : U T0 : = A2.2 : BE Ora volevo creare il db100 inserendo i timer ma se poi modifico in PB1 come da tua guida ottengo un errore. Il comando ADB100 cosa fa? Grazie ciao
nonsferatum Inserita: 25 novembre 2012 Autore Segnala Inserita: 25 novembre 2012 Provando è molto più semplice fare questa operazione usando un generatore di onda quadra e riportando gli stessi valori delle prove precedenti ho fatto così: : UN T2 : L KT 20.1 : SA T1 : U T1 : U E0.1 : L KT 30.1 : SA T2 : UN T1 : = A2.3 : BE
JumpMan Inserita: 26 novembre 2012 Segnala Inserita: 26 novembre 2012 come ho detto prima, ci sono molti modi per farlo, si possono usare timers SE, SV o SA, funziona comunque. nel messaggio #3 le seguenti istruzioni sono superflue, quel contatore probabilmente serviva a qualcos'altro.... U T0 : ZR Z5 : UN Z5 : L KZ 4 : S Z5 : L Z5 : T MW100 ADB forse il tuo simulatore non lo accetta, prova a scrivere A DB (con lo spazio), questo comando serve per aprire una DB, questa DB rimane aperta finchè non ne apri un altra, dopo di questo comando tutte le operazioni L e T (DW, DL, DR) leggono/scrivono dati da/verso quella DB. p.s. vedo che prediligi l'AWL, nel mio esempio avevo messo le istruzioni NOP 0 e *** per far si che premendo l'apposito tasto il segmento fosse visualizzato anche negli altri linguaggi (KOP/FUP).
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