Vai al contenuto
PLC Forum


Cross reference


drn5

Messaggi consigliati

Salve a tutti,

Supponiamo di avere un db nel quale alcune Word dichiarate al suo interno vengono utilizzate a livello di bit.

 

Esempio..

Db_esempio.prima_word.%X5

 

Come fare il cross reference di questo bit? A me sembra non si possa. Mi sbaglio? 

 

Grazie e buon ferragosto.

 

 

Link al commento
Condividi su altri siti


DavideDaSerra

Non conosco la sintassi del linguaggio che usi, ad ogni modo questo è il l'algoritmo spiegato (in C ma puoi tradurlo posto che il linguaggio che usi abbia la moltiplicazione per due e l'and bit-a-bit)

leggere bit a bit:

 uint16_t word = 0xF0F0 ; //11110000 11110000

//stabilisco una maschera grande quanto la word da leggere
uint16_t mask = 1;   //00000000 00000001
//metto un 1 nella posizione che voglio leggere, voglio leggere il 5° bit  da destra -- occhio all'endianness della macchina
mask = mask << 4;  //00000000 00010000, se il linguaggio non ha lo shift puoi moltiplicare per 2 quattro volte

//00000000 00010000

//AND

//11110000 11110000

//=

//00000000 0001000 //=16 (bit settato)

uint8_t bit = ((word & mask) > 0); //se è zero il bit cercato è a 0 altrimenti è a 1 

 

Link al commento
Condividi su altri siti

4 ore fa, drn5 ha scritto:

Esempio..

Db_esempio.prima_word.%X5

 

Come fare il cross reference di questo bit? A me sembra non si possa. Mi sbaglio?

Buongiorno e buon ferragosto! 

Immagino ti riferisci al TIA portal, che versioni usi? V16? 

Dopo la v15 il cross reference è stato migliorato. 

Adesso dovrei provare, ma in teoria se punti a prima_word nel cross reference dovrebbero venirti fuori anche l'utilizzo di tutti i singoli bit! E sempre in teoria il DB deve essere ottimizzato. Ti dico in teoria perché utilizzo raramente lo slice access, di solito solo sulle word degli oggetti tecnologici e mi pare di ricordare che i bit del tipo axis_x. Status_word.%x3 sono presenti nel cross reference. 

Link al commento
Condividi su altri siti

Comunque se vuoi un consiglio per evitare questo problema, sposta la word tramite la funzione gather in una struttura di 16 bit dove puoi dare un nome ai singoli bit e poi usi quelli! 

Link al commento
Condividi su altri siti

Si scusate parlavo del Tia. Indipendentemente dal linguaggio quando chiedo il cross reference di Db_esempio.prima_word.%X5 ottengo la lista delle occorrenze di Db_esempio.prima_word.

Questo significa che vengono mostrate tutte le occorrenze oltre che della Word anche dei vari bit senza però specificare quale. Questo accade anche nel Tia16.1....

Onestamente l'utilizzo dei bit di una Word quando gli stessi non hanno un naming lo trovo anacronistico, ma purtroppo non sempre metto le mani su codice scritto da me.

E il Tia, mi sembra, da proprio un avviso su questo quando si chiede il cross reference....

Modificato: da drn5
Link al commento
Condividi su altri siti

6 minuti fa, drn5 ha scritto:

Si scusate parlavo del Tia. Indipendentemente dal linguaggio quando chiedo il cross reference di Db_esempio.prima_word.%X5 ottengo la lista delle occorrenze di Db_esempio.prima_word.

Questo significa che vengono mostrate tutte le occorrenze oltre che della Word anche dei vari bit senza però specificare quale.

Esatto! Però mi pare di ricordare che specifichi anche a quale bit si riferisce della word. Tipo se tu clicchi sopra, dovrebbe portarti nel punto dove viene letto/scritto il bit. 

Sì in teoria questo non si dovrebbe fare perché diventa illeggibile, ma tanti per risparmiare tempo lo fanno.. Ti capisco 

Link al commento
Condividi su altri siti

  • 2 weeks later...

io i bit li dichiaro come bit e non li uso mai come bit di una word. Non capisco i frutti del discorso .

Modificato: da walterword
Link al commento
Condividi su altri siti

Il 24/8/2021 alle 17:04 , walterword ha scritto:

. Non capisco i frutti del discorso

Ogni tanto mi capita di mettere le mani su codice scritto da altri in cui un db strutturato a Word viene poi usato a bit... Vedi i miei post sopra. Ora se voglio fare il cross reference di uno di questi bit non ottengo la lista per quel singolo bit ma la lista delle occorrenze della Word nel quale è contenuto il bit interessato. E quindi potrei ottenere una lista molto lunga che va analizzata un elemento alla volta fino a trovare (forse) quello che mi interessa....

Una bella perdita di tempo!

Tutto qui. :)

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