Vai al contenuto
PLC Forum


Caricare l'indirizzo di una Word dentro a un puntatore


acquaman

Messaggi consigliati

Come descritto nell'oggetto, sto cercando di caricare nel puntatore AR1 non il valore contenuto dentro dentro una word, ma l'indirizzo di questa.

es: la mia word è la DB1.DBW2, caricare il valore 16 in AR1.

 

Secondo voi è possibile?

 

Grazie

Link al commento
Condividi su altri siti


Semplicissimo:

L 16
LAR1

Oppure, sempre per caricare l'indirizzo della seconda word di diverse aree dati:

LAR1 P#DBX2.0	// Area DB
LAR1 P#DIX2.0	// Area DB di istanza
LAR1 P#L2.0		// Area dati locali
LAR1 P#E2.0		// Area ingressi
LAR1 P#A2.0		// Area uscite

 

Il metodo con P# è più corretto, perché così imposti anche il codice dell'area dati (byte più significativo del puntatore).

Se nelle istruzioni che fanno riferimento alle variabili indicate dal puntatore specifichi l'area dati, non è importante che l'area dati sia definita all'interno del puntatore.

Ma per un pignolo come me...

Link al commento
Condividi su altri siti

Cosi è facile:superlol:, ma se come parametro in ingresso ad un FC ti do la Word DB1.DBW2 si riesce a a caricare il 16 dal dato DBW2.

 

Mi spiego meglio, voglio passare come parametro di ingresso da un FC la prima word di un array di 10 usate dentro l'FC.

 

In questo progetto questo FC devo usarlo circa 30 volte con array diversi poi diventerà un blocco della mia libreria.

Se inserisco come parametro di ingresso l'indirizzo, ogni volta che uso questo FC devo trovare l'indirizzo dell'array, mentre se metto il primo elemento dell'array, con un simbolico ben fatto, quando uso più volte l'FC faccio il primo richiamo, poi copia incollo n volte il richiamo e con il TROVA SOSTITUISCI cambio il numero della stazione e voilà il gioco è fatto.

Link al commento
Condividi su altri siti

L miaVar

LAR1

 

Oppure, potresti passare alla variabile al posto dell'indirizzo del bit il numero della variabile da puntare.

Potresti fare così:

 

L miaVar

ITD

SLD 4

LAR1

 

Potresti anche passare alla funzione l'intero array (utilizzando il simbolico) come parametro IN/OUT.

Oppure un puntatore con l'indirizzo dell'inizio dell'array (sempre con il simbolico).

Da non dimenticare, visto che stai parlando di array, che potrebbe essere una buona idea creare una funzione in SCL.

 

Le soluzioni possibili sono parecchie. Per indicarti la strada migliore dovrei capire meglio cosa devi fare.

Link al commento
Condividi su altri siti

  • 2 weeks later...

Tutto questo è chiaro, è il normale utilizzo dei puntatori, la mia domanda, e sicuramente mi spiego male, è se si può caricare nel puntatore non il valore contenuto dentro dentro alla variabile, ma direttamente l'indirizzo della mia variabile.

 

Comunque ho fatto un po di ricerche,ma non ho trovato nulla e non credo si possa fare.

 

Grazie lo stesso.

Link al commento
Condividi su altri siti

Ciao,

crea un fc dedicato così:

      L     P##POINT
      LAR1  
      L     W#16#0
      L     W [AR1,P#0.0]
      ==I   
      SPB   m000
      T     #NUMDB
      AUF   DB [#NUMDB]
m000: L     W [AR1,P#4.0]
      T     #ADDRESS

la var #point è di tipo pointer nelle in dell'interfaccia

la var #address è un int nelle out di interfaccia

numdb è una int nell'area temp

 

Richiami il blocco e in point ci "entri" tramite puntatore, tipo p#db1.dbx2.0

 

Il risultato sarà questo:

Cattura.JPG

 

 

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