Linotix Inserito: 14 ottobre 2018 Segnala Share Inserito: 14 ottobre 2018 Salve a tutti Innanzitutto devo precisare che non ho molta esperienza nella programmazione plc. Comunque stavo facendo delle prove perché volevo inserire l’istruzio Loop in un progetto. Dopo aver letto manuale e tutto quello trovato in rete non sono riuscito a venirne a capo. Sto utilizzando step 7 5.5 con sp4 e s7plcsim. Ho fatto moltissime prove , ma sembra che l’istruziine Loop decrementi di 1 la mw ma poi non esegua il salto all’etichetta “next”. Per essere chiari posto qualche esempio: L L#10 T md10 L 10 next : T mw20 L L#2 L md10 +D T md30 L mw20 Loop next L md30 Ora quello che succede è che una volta avviato il ciclo se si controllano i valori di accu1 su L mw20 sono a 10 e sull’istruzione Loop a 9 , cioè decrementa di 1 e poi si ferma lì. Sembra non faccia il salto a next o non decrementi la mw20. Il simulatore non va in stop ma continua all’infinito. Nemmeno mw 30 sembra aggiornarsi. Inoltre le prime instruzioni , i cui valori nel caso in cui non venissero lette con un salto dovrebbero essere grigio chiaro , rimangono nere. Cosa sbaglio? grazie Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 15 ottobre 2018 Segnala Share Inserita: 15 ottobre 2018 Ciao andare on-line con un loop significa vedere solo il primo dei N° loop, per vede se funziona basta che vai su una VAT (Controlla e comanda variabili) e metti il valore di mw20 e dalla MD10 Saluti Link al commento Condividi su altri siti More sharing options...
batta Inserita: 15 ottobre 2018 Segnala Share Inserita: 15 ottobre 2018 Ma come hai fatto tu non vedrai mai l'effetto del loop: in MD30 troverai sempre due, anche dopo 1000 cicli. Poi stai anche pasticciando con MW e MD. Link al commento Condividi su altri siti More sharing options...
Linotix Inserita: 15 ottobre 2018 Autore Segnala Share Inserita: 15 ottobre 2018 Vi ringrazio per l’aiuto, come detto non sono esperto come voi, per questo vi sto chiedendo dei consigli. Mi ero accorto di aver scritto mw da una parte e md dall’altra , ho messo giù di fretta per farvi capire cosa intendevo. Grazie ancora Link al commento Condividi su altri siti More sharing options...
Linotix Inserita: 16 ottobre 2018 Autore Segnala Share Inserita: 16 ottobre 2018 Già che ci sono vorrei chiedervi un’altra cosa. Qual’e Il miglio modo per far sì che la somma si esegua ad ogni ciclo del loop, in modo che io possa cambiare il valore della mw per decidere quanti cicli loop fare ed avere il risultato che mi serve. Grazie. Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 16 ottobre 2018 Segnala Share Inserita: 16 ottobre 2018 Non ho capito cosa desideri, ma posso fare due ipotesi, in base a condizioni carichi il valore di loop che ti serve e poi esegui il loop, oppure all'interno del loop metti una condizione per quale viene eseguito un jump all'istruzione dopo il loop. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 ottobre 2018 Segnala Share Inserita: 16 ottobre 2018 La domanda è tutt'altro che chiara. Se vuoi decidere quanti cicli deve fare il loop, devi caricare il valore desiderato nella variabile che viene usata dal loop (MW20, nell'esempio). Sempre per seguire l'esempio, ti trovi queste istruzioni: L 10 NEXT: T MW20 ... ... ... ... L MW20 LOOP NEXT Quindi, viene caricato 10 in MW20. Poi fai le operazioni che desideri e, alla fine, leggi il valore di MW20 (che viene caricato nell'accumulatore) e richiami l'istruzione LOOP. L'istruzione LOOP, se il valore caricato è > 0, decrementa di una unità il contenuto dell'accumulatore e salta all'etichetta indicata, altrimenti non fa nulla. Se viene fatto il salto, viene memorizzato in MW20 il nuovo valore (se siamo partiti da 10, ora sarà 9), e si ripete tutto daccapo. Se, all'interno del loop, tanto per verificare cosa succede, vuoi incrementare una variabile, potresti scrivere: L MW30 + 1 T MW30 All'interno del loop poi, nessuno vieta di inserire altre operazioni che facciano compiere un salto ad un'etichetta esterna al loop. un loop lo si può anche costruire semplicemente incrementando (o decrementando, a piacere) una variabile, ed usando le istruzioni di salto. Link al commento Condividi su altri siti More sharing options...
Linotix Inserita: 16 ottobre 2018 Autore Segnala Share Inserita: 16 ottobre 2018 UGià che ci sono vorrei chiedervi un’altra cosa. Qual’e Il miglio modo per far sì che la somma si esegua ad ogni ciclo del loop, in modo che io possa cambiare il valore della mw per decidere quanti cicli loop fare ed avere il risultato che mi serve. Grazie. Link al commento Condividi su altri siti More sharing options...
Linotix Inserita: 16 ottobre 2018 Autore Segnala Share Inserita: 16 ottobre 2018 Si, avete ragione , rileggendola non sono stati chiaro Ora io ho inserito come suggerito da Travelmen i valori delle mw su variabile, e vedo i risultati. Però bensì io inserisca qualsiasi numero di cicli loop il calcolo 2 + ma 10 viene eseguito una volta sola, o almeno questo è quanti vedo dalla variabile, anche se i cicli del loop sono stati decrementati sino a 1. Io vi chiedo come fare affinché il calcolo 2 + mw 10 venga eseguito ad ogni ciclo loop. Forse è perché rlc rimane sempre a 1 ? Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 16 ottobre 2018 Segnala Share Inserita: 16 ottobre 2018 Se non hai sistemato il codice, rimane 2 semplicemente perchè mw10 è sempre 0. tu carichi L#20 in md20. mw20 è quindi 0. Sommi L#2 alla mw20, trasferendo in mw30 il risultato Al successivo ciclo di loop, avrai sempre L#2 sommato a mw20, che sarà sempre 0, e trasferirai sempre 2 a mw30. Stai facendo parecchia confusione! Link al commento Condividi su altri siti More sharing options...
Linotix Inserita: 16 ottobre 2018 Autore Segnala Share Inserita: 16 ottobre 2018 No. Io carico 20 in mw 10 e poi sommo 2 e trasferisco in mw30. Infatti il risultato di mw 30 è 22 e non 0 come dici tu. Quello che vorrei fare è eseguire la somma ad ogni ciclo del loop e cioè dovrebbe risultare 20 + (2x10) = 30 e non 22. Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 16 ottobre 2018 Segnala Share Inserita: 16 ottobre 2018 Pardon, ho sbagliato a scrivere, invece di mw10 ho scritto mw20. Nella prima foto tu: carichi 20 in MD10 carichi 10 in MW20 (e da qui parte il loop) sommi 2 a MW10, trasferendo in MW30 carichi MW20 e vai in loop. Come vedi, non vai mai ad aggiornare mw10, che usi per fare la somma. Quindi farai sempre, ad ogni loop, L#2 + mw10, che però ha sempre lo stesso valore (che è 0, perlomeno con il codice scritto come in prima foto) Sta di fatto, finchè non vari il contenuto di mw 10, avrai sempre la stessa somma Inoltre hai scritto: dovrebbe risultate 20 + (2x10) = 30 e non 22. 20 + (2x10) = 20 + (20) = 40 E nel codice usi una sola addizione.. qualquadra non cosa! Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 ottobre 2018 Segnala Share Inserita: 16 ottobre 2018 Nel loop esegui sempre lo stesso calcolo, non incrementi una variabile. Se ad una calcolatrice chiedi 10 volte quanto fa 20 + 2, ti dirà sempre 22. Per fare un incremento devi prendere una variabile, sommare un valore e mettere il risultato ancora nella stessa variabile, non in un'altra variabile. Eppure, mi pareva che l'esempio del mio precedente post fosse abbastanza chiaro. Link al commento Condividi su altri siti More sharing options...
Linotix Inserita: 16 ottobre 2018 Autore Segnala Share Inserita: 16 ottobre 2018 Allora, cerco di spiegarmi meglio. Il discorso della mw10 l’ho sistemato. Quello che intendo, è che essendo la somma dentro ad un loop di 10 cicli, io vorrei eseguire mw10 + 2 ad ogni ciclo e cioè per dieci volte. Quindi verrebbe mw10 +2 eseguito ad ogni ciclo. In pratica [mw10+(2+2+2+2+2+2+2+2+2+2)dovrebbe venire 30. Spero di essermi spiegato bene. Qual’è il metodo giusto per eseguire la somma ad ogni ciclo del loop? Non avevo letto la tua risposta Batta. Ok ho capito. Grazie Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 16 ottobre 2018 Segnala Share Inserita: 16 ottobre 2018 inizio loop: l mw10 + 2 t mw10 l mw20 loop next però se non condizioni il loop non ti fermerai mai, andrai all'infinito. Tu ricarichi il valore del loop ad ogni ciclo. Quindi, finito il primo ciclo da 10 loop, al prossimo richiamo del blocco, reinizializzi mw20 ed esegui un altro ciclo di 10 loop. E così via Link al commento Condividi su altri siti More sharing options...
Linotix Inserita: 16 ottobre 2018 Autore Segnala Share Inserita: 16 ottobre 2018 ok Grazie a tutti per il vostro aiuto Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 17 ottobre 2018 Segnala Share Inserita: 17 ottobre 2018 Non serve che scrivi grande, sembra che stai gridano ed indisponi la gente a risponderti, inoltre ti hanno rilevato l'errore ma senza darti risposta perchè evidentemente non avevi spiegato bene cosa volevi visto che dopo la tua seconda spiegazione è arrivata subito 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