RAVRAV Inserito: 13 agosto Segnala Share Inserito: 13 agosto Ciao a tutti, per un gioco per una festa volevo realizzare con s7-1200 una sorta di qualifica tipo F1 memorizzando su hmi il miglior tempo e nome. Volevo fare i primi dieci posti e che la classifica si aggiornasse dal tempo migliore al peggiore abbinato al nome del giocatore. Praticamente volevo chiedere nome ad inizio gioco poi registrare il tempo Che fa w di conseguenza la top ten se rientra. Naturalmente gioca uno alla volta. Avete suggerimenti per come procedere o esempi da farmi vedere? Grazie per ogni info. Il tempo lo faccio partire da uno start e Lo stop mi arriva da una fotocellula. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 13 agosto Segnala Share Inserita: 13 agosto Ma il tuo problema è misurare il tempo, o riordinare la classifica? Se è riordinare la classifica, cerca "algoritmo bubble sort". Probabilmente troverai esempio in C, in Python ed altri linguaggi "da PC", ma è comunque facile trasportarli in testo strutturato. Link al commento Condividi su altri siti More sharing options...
RAVRAV Inserita: 25 agosto Autore Segnala Share Inserita: 25 agosto Si il problema è riordinare la classifica, ma con s7-1200 che comandi posso usare Link al commento Condividi su altri siti More sharing options...
max.bocca Inserita: 25 agosto Segnala Share Inserita: 25 agosto Direi che con i move, confronti il primo con il secondo se non sono in ordine li scambi, poi il secondo con il terzo e via dicendo. Hai bisogno una temporanea perché se devi invertire il secondo con il primo devo memorizzare esempio il primo e fare il move del secondo nel primo e scrivere il temporaneo nel secondo. Su alcuni sistemi esiste anche lo swap tra memorie. Questo è il sistema suggerito da @batta. Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 25 agosto Segnala Share Inserita: 25 agosto Prendi questo e lo riscrivi in scl.... Sub BubbleSort(MyArray() As Variant) 'Sorts a one-dimensional VBA array from smallest to largest 'using the bubble sort algorithm. Dim i As Long, j As Long Dim Temp As Variant For i = LBound(MyArray) To UBound(MyArray) - 1 For j = i + 1 To UBound(MyArray) If MyArray(i) > MyArray(j) Then Temp = MyArray(j) MyArray(j) = MyArray(i) MyArray(i) = Temp End If Next j Next i End Sub Link al commento Condividi su altri siti More sharing options...
RAVRAV Inserita: 26 agosto Autore Segnala Share Inserita: 26 agosto Ciao e grazie per tutte le info, ma penso che siamo lontani da quello che voglio realizzare. In pratica avete presente tipo le qualifiche di formula1, ecco abbiamo il nome abbinato al tempo che ha realizzato. Il gioco consisteste a turno in un percorso da fare e poi i 10 tempi migliori vengono memorizzati in ordine. Mentre per tutti i tempi oltre il 10imo posto vengono ignorati Il nome del giocatore viene chiesto prima di ogni start e se il tempo è meritevole della classifica viene memorizzato col nome e riordinata la classifica. Poi tutte queste info le farò vedere su un pannello, quindi non mi basta riordinare i tempi ma tenerli agganciati al nome. I giocatori possono essere tantissimi, ma solo chi entra in classifica resta conteggiato. Poi dovrei anche capire all'inizio come gestire la cosa quando non ci sono ancora tempi memorizzati. grazie per ogni vs info. Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: 26 agosto Segnala Share Inserita: 26 agosto 1 ora fa, RAVRAV ha scritto: Ciao e grazie per tutte le info, ma penso che siamo lontani da quello che voglio realizzare. Non credo, quello che ti serve lo fai con un bubblesort come ti hanno già detto... 1 ora fa, RAVRAV ha scritto: quindi non mi basta riordinare i tempi ma tenerli agganciati al nome. Avrai un DB con n strutture, ogni struttura sarà composta da una variabile che contiene il tempo e una che contiene il nome. DB "Classifica" Struttura "Pilota1" Nome Tempo Struttura "Pilota2" Nome Tempo Struttura "Pilota n" Nome Tempo 1 ora fa, RAVRAV ha scritto: Mentre per tutti i tempi oltre il 10imo posto vengono ignorati Il nome del giocatore viene chiesto prima di ogni start e se il tempo è meritevole della classifica viene memorizzato col nome e riordinata la classifica. 1 ora fa, RAVRAV ha scritto: Poi dovrei anche capire all'inizio come gestire la cosa quando non ci sono ancora tempi memorizzati. Ad ogni immissione di un nuovo tempo, per farla facile: ogni volta che un pilota immette nome e tempo preme un pulsante di "conferma registrazione" Sul fronte di quel pulsante fai il bubblesort e poi sull'HMI visualizzi solo le prime 10 strutture. Nel tuo DB puoi avere anche duemila strutture, ma tanto tu su all'HMI linkerai solo le prime 10. Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 26 agosto Segnala Share Inserita: 26 agosto Alcune domande: - hai buttato giù un flow chart di quello che vuoi fare ? - quale è il tuo livello di preparazione in ambito di programmazione (plc/pc/android) ? - perchè scegliere un plc e non un qualsiasi device windows/android ? Link al commento Condividi su altri siti More sharing options...
batta Inserita: 28 agosto Segnala Share Inserita: 28 agosto (modificato) Il 26/8/2024 alle 07:00 , RAVRAV ha scritto: Ciao e grazie per tutte le info, ma penso che siamo lontani da quello che voglio realizzare.... No, direi che ti sono state date proprio le informazioni corrette. Già nella mia prima risposta ti ho parlato di "Bubble Sort", poi @drn5 ti ha pubblicato un esempio di una subroutine chiamata, guarda caso, BubbleSort. Se hai pratica di Testo Strutturato, convertire l'esempio è molto facile. Se lo vuoi fare in ladder, lascia perdere. Ci sono anche metodi, sempre Bubble Sort, leggermente diversi e leggermente più performanti ma, per 10 elementi, non vale assolutamente la pena. Va benissimo quello dell'esempio. Modificato: 28 agosto da batta 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