Vai al contenuto
PLC Forum


Accesso Ai Singoli Bit Di Una Word - E' possibile?


pablo.mrg

Messaggi consigliati

Ciao a tutti,

vorrei sapere se è possibile dichiarare una variabile in un DB con INT o WORD e poi accedere ai suoi bit, magari assegnando anche ad essi un nome simbolico.

Faccio un esempio: vorrei creare una parola di stato a 16 bit da usare come indicatore dello stato del sistema, appunto, ed usarne i singoli bit per attivare i componenti coinvolti nel funzionamento legato a quello stato.

Ciao

Paolo

Link al commento
Condividi su altri siti


Aggiungo qualche dettaglio per spiegare meglio cosa intendo.

Quello che voglio fare io è creare una cosa del genere:

Simbolo         |   Indirizzo
StatoSistema        MW0
Stato0              M0.0
Stato1              M0.1
Stato2              M0.2
...

in modo da poter accedere alla word intera attraverso il simbolo StatoSistema oppure ai singoli bit attraverso i simboli Stato0, Stato1, Stato2 e così via.

Sono riuscito a realizzare questa struttura dati attraverso l'editor dei simboli, volevo sapere se è possibile ottenerla anche con un DB... perché non ci son riuscito. :huh:

Il fatto di voler usare un DB è legato fondamentalmente a 2 questioni (sulle quali si accettano obiezioni):

1 - ho bisogno che i dati siano ritentivi e, anche se con le opportune impostazioni hw lo sono anche le memorie M, mi hanno fortemente consigliato di usare i DB x i dati ritentivi

2 - usare i DB mi consente di tenere le variabili relative alle diverse a "sezioni" del sw raggruppate ed organizzare meglio la struttura, invece di usare un unico calderone per tutti i simboli

Ciao

Paolo

Link al commento
Condividi su altri siti

Metti che hai la db20

per accedere alla word indichi db20.dbw0

per accedere alla parte alta e bassa della word db20.dbb0 e db20.dbb1

per accedere ai singoli bit basta fare db20.dbx0.0 ... db20.dbx0.7 e da db20.dbx1.0 a db20.dbx1.7

per il simbolico dichiara la db nel seguente modo

Indirizzo Nome Tipo Valore iniziale Commento

+0.0 bit00 bool False

+0.1 bit01 bool False

se poi nel simbolico inserisci il nome della db nel codice avrai una cosa del tipo

"DbControllo".bit00 per indicare ovviamente db20.dbx0.0

Bye

Link al commento
Condividi su altri siti

Grazie mille.

Quello che però non riesco a fare nella dichiarazione è assegnare un nome simbolico sia ai bit, sia al byte (o word che sia).

Ciao

Paolo

Link al commento
Condividi su altri siti

Per quello che ne so, è una cosa che non si possa fare, mentre con AB lo si può fare.

ATTENZIONE: mi riferisco al semplice fatto di dare un nome alla word ed hai sui bit/byte, mentre se si parla di scrivere/leggere una word ed i suoi singoli bit o byte ed viceversa, lo si può fare senza limiti, sta alla fantasia di chi programma :D . :rolleyes:

Modificato: da TravelMen
Link al commento
Condividi su altri siti

Ok grazie, credo sia chiaro.

Vorrà dire che per quella manovra userò direttamente le memorie specificando di renderle ritentive nella configurazione HW.

Grazie a tutti

Paolo

Link al commento
Condividi su altri siti

Un'altra soluzione ci sarebbe, ma non so se è quello che ti serve:

all'interno del DB crei una struttura (che magari chiami WORD_xx) di variabili contenente 16 variabili di tipo BOOL (che puoi chiamare BIT_0-BIT_15); se richiami un singolo bit nel codice ti apparirà NomeDelDB.NomeVariabileStruttura.NomeVariabileBit

esempio

U "DB_01".Word_00.bit_000

ecco che se la tua esigenza è distingure chiaramente le appartenenze alle "word" questa soluzione può andar bene.

Di contro nenanche in questo caso puoi richiamare nel codice la variabile struttura (solo denominata "word").

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