Vai al contenuto
PLC Forum


Uso Dei Puntatori Ar1/2


Messaggi consigliati

Inserito:

Avendo un FC con un dato Temp che si chiama #Pippo

Che differenza c'è tra il fare:

L ##Pippo
LAR1
e:
LAR1 ##Pippo

?

Perchè ho notato che il 1° metodo funziona anche con parametri IN/OUT/ON-OUT mentre il 2° funziona solo con i dati Temp.

Ciao

  • 1 month later...

Inserita:

Possibile che con tutti i cervelloni che bazzicano in questo forum non ci sia nessuno che lo sa? :unsure:

Inserita:

Nel primo caso carichi il valore scritto in Pippo nel registro AR1, nel secodo caso sommi al valore di AR1 il valore scritto in pippo. Spero di essere stato chiaro!

Ciao

Inserita:

Il primo ed il secondo caso fanno la STESSA COSA. La differenza è che nel primo caso è possibile caricare anche un valore a 16 bit, nel secondo è possibile solo scrivere valori a 32 bit.

L'indirizzo di un qualsiasi oggetto di memoria è sempre un numero a doppia precisione.

Quando nel primo caso carichi "pippo", questo viene copiato nell'accumulatore (a 32 bit) e con l'operazione LAR1 viene caricato l'accumulatore nel registro 1.

Nel secondo caso nel registro 1 viene direttamente caricato la doppia parola "pippo" (deve essere però una doppia parola).

Compreso?

Inserita:

Ha ragione rddiego, ho interpretato male la cosa, confermo tutto.

Inserita:

Basta chiamarli e i cervelloni arrivano subito . :P

Inserita:

Rimane la domanda :Perchè il secondo caso funziona solo su tipo di dati TEMP??

Inserita: (modificato)

Come già correttamente sottolineato il secondo metodo accetta oltre a costanti in formato P#, dati a 32 bit ma solo MD, LD, DBD o DID (come dice l'. dell'editor andando sopra l'istruzione evidenziata in rosso in quanto non accettata).

Quindi accetta solo variabili dichiarate TEMP perchè fanno parte dell'area L a differenza delle dichiarazioni INPUT/OUTPUT

Modificato: da FabioS
Inserita: (modificato)

Scusate se sono prolisso, ma faccio un esempio:

In un FB (supponiamo FB1) ho un parametro di ingresso double word di nome #Pippo (che risiede nella DB d’istanza , supponiamo "DB1").

Perché all’interno di FB1 mi accetta:

LAR1 "DB1".Pippo
, e non accetta invece:
LAR1 #Pippo

?

Ho capito che si aggira il problema usando la doppia istruzione (L #Pippo ….LAR1), ma mi chiedo se c'è una motivazione valida della non elasticità del 2° metodo (quello "monoriga").

Ciao

Modificato: da JumpMan
  • 3 months later...
Inserita:

I parametri di ingresso di FB e FC non possono essere usati direttamente per indicizzare.

Ad esempio:

-------------------------------

FB1,DB1

input: #N_DB

AUF DB[#N_DB] <-----SBAGLIATO

-------------------------------

Se tu invece definisci anche una temporanea, passi per quella, e poi puoi usarla per indicizzare:

-------------------------------

FB1,DB1

input: #N_DB

temp: #N_DB_TEMP

L #N_DB

T #N_DB_TEMP

AUF DB[#N_DB_TEMP] <-----CORRETTO

-------------------------------

Gli esempi sopra si riferivano all'apertura di un DB; volendo indicizzare ad esempio una word, usando AR1, la sintassì è:

L DBW[AR1,p#0.0]

dove il contenuto di AR1 deve essere stato trasferito a priori, ma non direttamente: l'unica soluzione è appunto passare per le 2 righe di istruzione del tipo

L P##INDIR_ING

LAR 1

perchè in questo modo c'è un passaggio per l'accumulatore ACCU1 a 32bit.

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