Vai al contenuto
PLC Forum


Siemens Step 7 - Ordinamento Vettore ordine Descrescente


sam15

Messaggi consigliati


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.

Link al commento
Condividi su altri siti

Matteo Montanari
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

Link al commento
Condividi su altri siti

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

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