Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




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


Messaggi consigliati

Inserito:

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


Inserita:

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

Inserita:

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

Inserita:

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

Inserita: (modificato)

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
Inserita:

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

Inserita:

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

alessandro_marena
Inserita:

Ciao a tutti

hai provato a creare un udt nel db ? :)

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