Vai al contenuto
PLC Forum


Indirizzamento Bit Di Word Variabili Locali Fc


alexamod

Messaggi consigliati

Buongiorno a tutti!!

Volevo chiedere se qualcuno conosce come richiamare dentro un FC il bit di una word dichiarata localmente.

ad esempio IN=Valore tipo INT

Io vorrei per esempio il bit 2 della variabile Valore dichiarata come INT

grazie.

Link al commento
Condividi su altri siti


Se con bit 2 intendi il terzo bit da dx verso sx:

      LAR1  P##Valore
      U     L [AR1,P#1.2]
      =     .......

Questo perché in S7 l'allineamento dei byte è secondo lo standard "Motorola" (Big Endian), con il byte più significativo che prende l'indirizzo più basso.

Piccola curiosità: sapete da dove nascono le diciture Big Endian e Little Endian?

Dal libro "I viaggi di Gulliver", e indicano il lato da cui si dovevano aprire le uova.

Il re di Lilliput si tagliò aprendo un uovo dalla parte più piccola. Emanò quindi un editto che obbligava tutti ad aprire le uova dalla parte grande. I membri della comunità che vollero continuare ad aprire le uova dalla parte piccola furono costretti a fuggire e si rifugiarono sulla vicina isola di Blefuscu. Nacquero così i nomi delle due fazioni antagoniste, Big Endian per Lilliput e Little Endian per Blefuscu che, per questo banale motivo, diedero inizio ad una sanguinosa guerra.

Ancora più curioso sapere che, per l'autore "Jonathan Swift", questa guerra per futili motivi rappresentava l'assurda guerra religiosa scoppiata tra l'Inghilterra protestante e la Francia cattolica.

Link al commento
Condividi su altri siti

Se la tua variabile locale è una variabile di tipo TEMP, allora è allocata nell'area L della funzione e, nel contesto della medesima funzione, è gestibile come una area M. Attenzione però che: se un giorno manipoli le dichiarazioni delle variabili temporanee, tutto cosa nella funzione non è simbolico, non viene aggiornato ed il codice è tutto da rivedere.

Sarebbe più pulito fare i set/rest all'interno delle variabili complesse con degli OR/AND dei bit desiderati.

Se invece la variabile è di ingresso credo non si possa fare nulla. Dico credo perché per il varo qualcosina si può fare, utilizzando i registri AR1 ed AR2, ma siccome ho sempre e solo fatto su word o dword, non ho idea se funziona anche con i bit.

Link al commento
Condividi su altri siti

aneddoto interessante.. batta ne sa sempre una piu del diavolo

Comunque seguendo il codice di batta puoi interrogare qualsiasi bit spostando la posizione del puntatore con l'offset, che è appunto P#x.x

Link al commento
Condividi su altri siti

Comunque seguendo il codice di batta puoi interrogare qualsiasi bit spostando la posizione del puntatore con l'offset, che è appunto P#x.x

Non è proprio così.

Io ho postato quel codice perché nel post iniziale si parlava di "word dichiarata localmente" e il titolo della discussione è "Indirizzamento Bit Di Word Variabili Locali Fc".

Il termine "variabile locale" è riferito alle variabili dichiarate come "TEMP".

La lettera "L" nell'istruzione "U L[AR1,P#1.2]" sta ad indicare proprio LOCALE, ed è riferita unicamente all'area TEMP.

Se con "locale" c'era invece l'intenzione di indicare genericamente tutte le variabili dell'interfaccia della funzione, comprendendo anche "IN", "OUT" e "IN_OUT", la sintassi cambia leggermente:

      L     P##Valore
      LAR1  
      U      [AR1,P#1.2]
      =     ......

Omettendo la lettera "L" viene presa dal registro indirizzi anche l'area di memoria, e non solo l'indirizzo.

A dire il vero, la lettera "L" potrebbe essere omessa anche nel caso della variabile TEMP ma, quando lavoro in quest'area, per chiarezza io preferisco scriverla.

Altro sistema, è quello di creare delle maschere da mettere in AND con la variabile "Valore".

Link al commento
Condividi su altri siti

Non è possibile scrivere U L0.0?

Vado a memoria, non sono sicuro che la sintassi sia corretta, ma per un lavoro guardavo il segno della mia variabile interrogando un bit e scrivevo qualcosa del genere, senza andare ad utilizzare i puntatori.

Sempre come temp naturalmente.

Link al commento
Condividi su altri siti

Non è possibile scrivere U L0.0?

Si è possibile, chiaramente così vai a caricare il bit L0.0 della prima word locale, per cui devi essere certo che è proprio quello l'indirizzo che ti serve.

Volevo chiedere se qualcuno conosce come richiamare dentro un FC il bit di una word dichiarata localmente.Ad esempio IN=Valore tipo INT

Per andare a leggere un bit della word citata ad esempio, dovresti fare un Move della variabile Int , del campo IN, su una Word locale del campo Temp e poi andarti a leggere i singoli bit nei vari modi già citati.

Link al commento
Condividi su altri siti

Sono variabili "L" accessibili a bit, byte, word ,e doppie word. Bisogna avere l'indirizzo assoluto della tua varibile e poi accedi al terzo bit. ES: L4.3 che è il bit 3 del byte 4 di memoria locale L.

post-114428-0-84338500-1412190019_thumb.

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