Vai al contenuto
PLC Forum


Help per Algoritmo di Ricerca in S5 - Ricerca tra 14 DW dei valori più alti


Voce

Messaggi consigliati

:( Aiuto Sono venuti alla luce tutti i miei limiti di programmatore.

Devo ricercare tra 14 DW le due o tre che hanno il valore maggiore per poi poterle ulteriormente elaborare, qualcuno mi può consigliare un algoritmo adatto a questa situazione?

Vi ringrazio anticipatamente.

Voce

Link al commento
Condividi su altri siti


ciao

in passato ho gia' fatto questo per i plc siemens (s7) per ordinale

delle quote che poi un posizionatore doveva seguire.

dovevo mettere i valori scritti in un certo numero di word in ordine crescente. questa funzione , tra l'altro e' gia' presente nei plc omron!!

io ho immaginato di confrontare fra di loro 2 word e di tenere la piu' alta , una volta giunto alla fine delle 14 word mettevo la rimanente in un altra area e la eliminavo da buffer originale. o

ripetevo cio' mettendo le word in successione nella nuova area di memoria.

per rendere piu' semplice la realizzazione di cio' io ho fatto il programmino in visual basic , poi l'ho tradotto in algebra di bool

ciao da dario

Link al commento
Condividi su altri siti

Quello sotto è un ordinamento per selezione. Si prende una posizione nel DB e si confronta il numero con tutti quelli sotto. Se il numero in posizione è maggiore o uguale lo si lascia, se è minore lo si scambia. Alla fine della prima passata nella posizione DW0 ci sarà il valore più grande, poi si incrementa la posizione.

(Corretto sabato 9, ore 22:00).

MW0 Puntatore della posizione

MW2 Puntatore per l’esame della lista sottostante

MW 6 temporaneo

:A DB 10 ; apri il blocco dati

:LKF +0

:T MW0 ; carica 0 nel puntatore della posizione

ZERO :L MW 0

:I 1

:T MW2 ; confronterà con il successivo

INIZ :B MW0

:L DW0 ; posizione in ACCU1

:B MW 2

:L DW0 ; posizione in ACCU2 e l’altro in ACCU1

:>F

:SPB=UNO ; vanno bene così

:B MW0

:L DW0 ; prepara lo scambio usando anche MW6

:T MW6 ;posizione in MW6

:B MW2

:L DW0

;B MW0

:T DW0 ; maggiore in posizione

:L MW6

:B MW2

:T DW0 ;e valore di posizione al suo posto

UNO :L MW2

:I 1

:T MW2 ;incrementa il puntatore dell’altro

:L KF+13 ; 0…13, 14 DW

:<=F

:SPB =INIZ ;e rifai fino alla fine della lista

:L MW0

:I 1

:T MW0 ; incrementa posizione

:L KF +11

:<=F

:SPB =ZERO

:BE

Alla fine nel blocco DB10 i valori dovrebbero essere ordinati dal maggiore al minore

Saluti

R.G.

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