Vai al contenuto
PLC Forum


Classifica


RAVRAV

Messaggi consigliati

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


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

  • 2 weeks later...

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

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

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

dina_supertramp
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

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

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: da batta
Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...