Vai al contenuto
PLC Forum


Chiarimenti Su Puntatori Step7


fiorezzz

Messaggi consigliati

Salve a tutti

Siccome sono poco poco pratico nella gestione dei puntatori ho un paio di domande :

1) La notazione

L P#E 600.1 come si "trasforma" se 600.1 deve essere "parametrizzata" ovvero se devo sosttuirla con il contenuto di una variabile
tipo ...L 600.1

Var1

L P#Var1

2)Come faccio a passare un "puntatore" ad una zona di memoria di una DB (Tipo DB300.DBW10) ad un FC in modo tale

da lavorare all'interno dell'FC senza aver bisogno di sapere a quale DB si fa riferimento (non vorrei neanche passare il numero della DB... e poi determinare il relativo puntatore )

Link al commento
Condividi su altri siti


Se ho capito bene tu vorresti avere acceso all'ingresso E 600.1 dove però l'indirizzo 600.1 è contenuto in una variabile.

Se è così, puoi scrivere:

U E[VarIndice]

dove la variabile VarIndice è una DINT e deve contenere il valore 600 * 8 + 1 = 4801 in decimale (0000 12C1 Hex)

Per essere più corretti si dovrebbe impostare anche l'area di memoria (ma non è obbligatorio visto che nell'istruzione si specifica già l'area di memoria E).

Un modo per creare un indirizzo completo di area di memoria è il seguente:

L P#E0.0

L DW#16#000012C1

OD

T VarIndice

Come già detto però, se indichi l'area di memoria nell'istruzione questa operazione non è indispensabile.

Potrebbe diventare utile nel caso tu volessi indicizzare il numero del bit a partire da un offset.

Per esempio, se vuoi puntare al bit E600.1 creando un indice a partire da E600.0, potresti scrivere così:

L P#E600.0

L NumeroBit

+ D

T VarIndice

In questo modo se NumeroBit = 0 punti a E600.0, se NumeroBit = 1 punti a E600.1, se NumeroBit = 10 punti a E601.2

Un altro metodo consiste invece nel lavorare con il registro degli indirizzi AR1.

Potresti per esempio scrivere:

LAR1 P#E600.0

L NumeroBit

+AR1

U E[AR1,P#0.0]

In questo caso, potresti anche omettere nell'istruzione l'area di memoria e scrivere:

U [AR1,P#0.0]

Questo può tornare utile se l'area di memoria può variare. Nel caso l'area di memoria sia definita, inserirla nell'istruzione rende il codice più chiaro.

Per la seconda domanda, ti consiglio come prima cosa di cercare nella guida in linea come è fatta la variabile di tipo POINTER (6 byte), e poi di dare un'occhiata a questa discussione:

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