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




Puntatori


Messaggi consigliati

Inserito:

Ciao a tutti,

premetto che sono molto a digiuno nell'uso dei puntatori , ma credo che utilizzandoli renderei molto più efficiente la soluzione del seguente problema.

In un Data Block per esempio DB10 al suo interno ci sono 5 word in formato int.

Dw0

Dw2

Dw4

Dw6

Dw8

Ciascuna di queste word contiene un valore, che deve essere scritto sempre nella stessa destinazione per esempio Mw100.

ovvero vorrei utilizzando una funzione di puntatore dire prendi il dato scritto in Dw0 e scrivilo su Mw100, oppure prendi il dato in Dw8 e scrivilo in Mw100. Qualcuno mi saprebbe indicare con qualche esempio come potre fare???.

Grazie ancora per la vostra preziosa collaborazione

Cagliostro


Matteo Montanari
Inserita:

utilizzando i puntatori, (cè un bellisimo scritto del Sig. Milan nella zona didattica (qui) che ne descirve il funzionamento e l'utilizzo)

utilizzi un numero (da 0 a 4 nel tuo caso) e punti alla word che ti interessa:

0 -> dw0

1 -> dw2

2 -> dw4

3 -> dw6

4 -> dw8

se leggiamo il primo "bit" di ogni word risulta essere:

0 -> 0.0

1 -> 2.0

2 -> 4.0

3 -> 6.0

4 -> 8.0

in questo modo dobbiamo solamente moltiplicare per "2" il nostro numero:

io di solito faccio così:

L #numero della word

L 2

*I

( L 10 questo mi serve per creare un offset se devo puntare una )

( +I word differente )

SLW 3

LAR1

in questo modo mi sono creato il puntatore, per terminare il tuo programma deci solamente aggiungere:

L DBW [AR1,P#0.0]

T MW100

Inserita:

io farei così..

LAR1 P#0.0 // inizializzo puntatore

OPN DB10

CHK0 : nop 0 // etichetta per loop

L DBW[AR1,P#0.0]

T MW100

+AR1 P#2.0 // VADO PROX WORD DB10

TAR1 // CARICA VALORE AR1 SU ACCU1

L P#10.0 // CARICO INDIRIZZO ULTIMA WORD DB10

>D // CONTINUA LOOP FINO ALL'ULTIMA WORD, QUINDI ESCI

JCN CHK0

ciao

Matteo Montanari
Inserita: (modificato)

con la tua soluzione, h.chi, nel canale MW100, hai sempre il valore dell'ultima word, in quanto in un unica "passata" prelevi i valori dalla word "0" alla word "8".

con la "mia" soluzione prelevi solamente il dato della word che ti interessa.

occorre verificare cosa vuole fare cagliostro.

con il tuo codice, h.chi, è molto più semplice fare:

L DB10.DBW8

T MW100

Modificato: da keosmm
  • 2 months later...
Inserita:

Per il tuo problema la soluzione più corretta credo sia fare un salto indicizzato (credo sia questo il nome giusto) SPL e aggiungere puntamenti fissi (se sono giusto 5 e non sono consecutivi o non sono nello stesso DB.

Se sono molti e nello stesso DB il metodo più corretto è quello di KEOSMM, anche se io non moltiplicherei per 2 ma farei SLW 4.

ciao.

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