Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Siemens Step 7 - Ordinamento Vettore ordine Descrescente


Messaggi consigliati

Inserito:

Si vorrebbe poter ordinare un array in ordine descrescente.

Esiste una qualche funzione già integrata in Step 7 ?

Grazie.

Sam


Inserita:

temo che non esistano sfb standard che ti ordinano un array, il sistema piu' elegante è utilizzare un algoritmo di ordinamento in SCL , e se non hai l' SCL non è difficile farlo in AWL , ma ti consiglio di non fare loop troppo lunghi per motivi di scansione.

Ad ogni scan ordini solo i membri dell'aray contigui , quando sono tutti in ordine e quindi non effettui nessun scambio di membri setti un bit che significa array ordinato.

Matteo Montanari
Inserita:
Si vorrebbe poter ordinare un array in ordine descrescente

vorrai dire i dati presenti in un Array? o qualcosa di ancora diverso?

Esiste una qualche funzione già integrata in Step 7 ?

nelle librerie di sistema esistono varie funzioni per cercare dati, in base a specifiche richieste, dentro un area ben definita (tipo una tabella) (ho messo personalmente anche un esempio nella sezione up/download file).

potresti partire dall'utilizzo di queste funzioni e crearti quella che fà al caso tuo.

unica premessa necessaria, una buona conoscenza dei puntatori

Inserita:

Se cerchi sul forum "bubble sort" troverai questo :P

Prova questo in S7

Si scorre la lista dal primo DBW0 al penultimo e si confronta con la word sotto, se quella sotto e' minore si scambiano. Si devono fare tante passate quante sono le word meno 1 ad ogni passata la "bolla" leggera scavalca di un posto.

Dati in DB19 a word, prepara tre INT: cont_1, cont_2, mem.

AUF DB 19 // DB

L 100 // 100 word in db 19 dalla DBW0 alla DBW198

jum1: T #cont_1 // contatore esterno

LAR1 P#DBX 0.0

L 99 // le 99 word sotto

jum2: T #cont_2 // contatore interno

L DBW [AR1,P#0.0] // word sopra

L DBW [AR1,P#2.0] // word sotto

<=I // sopra <= sotto ?

SPB jum3

T #mem // scambia, word sotto in mem

L DBW [AR1,P#0.0] // word sopra...

T DBW [AR1,P#2.0] //...sotto

L #mem

T DBW [AR1,P#0.0] // ..e viceversa

jum3: L P#2.0

+AR1 // incrementa di una word

L #cont_2

LOOP jum2 // se non e' finita una passata..

L #cont_1

LOOP jum1 // finita una passata

Facci sapere se fa al caso tuo

:blink::D

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...