Vai al contenuto
PLC Forum


SCL, testare un bit di una word


frussosw

Messaggi consigliati

Buongiorno,

ho difficoltà in SCL a verificare il valore di un bit (true o false) all' interno di una variabile word.

Mi spiego meglio:

 1°) ho una funzione SCL alla quale passo una variabile di input dichiarata come word (es. Status),

2°) di questa variabile "Status" ho bisogno di testare uno qualsiasi dei 16 bit per conoscerne appunto lo stato True o False

 

ho provato a scrivere il seguente codice per verificare (per esempio) il 2° bit da destra della mia variabile tralasciando per ora la disposizione dei byte LSB e MSB:

 

if (#Status AND w#16#FD) THEN

  ...

 ....

END_IF;

 

TIA Portal non accetta questa modalità di scrivere le istruzioni e mi sottolinea in rosso il codice:

 

Nei vari manuali SCL non riesco a trovare nulla oppure mi è sfuggito.

 

Qualcuno ha risolto questo tipo di problemi  ?

Grazie del vostro contributo..

 

 

Link al commento
Condividi su altri siti


6 ore fa, frussosw ha scritto:

TIA Portal non accetta questa modalità di scrivere le istruzioni e mi sottolinea in rosso il codice

Non è TIA Portal che non accetta questa sintassim ma il testo strutturato.

In C qualsiasi valore diverso da zero viene interpretato come vero, mentre in testo strutturato devi fare una comparazione:

 

if (#Status AND w#16#FD) <> 0 THEN

;

END_IF;

 

Solo con le variabile booleane viene testato direttamente lo stato TRUE o FALSE senza bisogno di comparazioni.

 

Comunque, come ti ha indicato @drn5, c'è un modo più semplice per leggere lo stato di un bit di una word.

miaWord.%Xnnn

dove nnn, ovviamente, è il numero del bit, da destra verso sinistra.

 

La stessa sintassi si può usare per leggere un byte all'interno di una word (o DWord), o una word in una DWord

miaWord.%Bnnn

miaDWord.%Wnnn

 

Ovviamente, si può anche scrivere, non solo leggere.

Unica pecca, è che "nnn" non si può indicizzare.
Per indicizzare il bit da leggere si potrebbe trasferire la word in un array di bit con l'istruzione SCATTER.
In caso di scrittura, usi GATHER per trasferire l'array di bit nella word.
 

 


 

Link al commento
Condividi su altri siti

Grazie drn5, grazie Batta,

era proprio ciò che desideravo.

Funziona.

Devo ammettere che non conoscevo questa sintassi.

Non sono riuscito a trovarla sui manuali SCL letti che mi ritrovo,

forse perchè come dici tu Batta, fa parte della sintassi del testo strutturato e magari è li che avrei dovuto cercare.

Sono istruzioni molto utili queste.

 

Comunque grazie ancora

 

 

 

Link al commento
Condividi su altri siti

4 ore fa, batta ha scritto:

dove nnn, ovviamente, è il numero del bit, da destra verso sinistra.

scusami batta ma tale espressione mi fa un po' storcere il naso, diciamola meglio dal bit meno significativo a quello più significativo mi piace di più, o se necessario viceversa 😜

Modificato: da leleviola
Link al commento
Condividi su altri siti

12 ore fa, leleviola ha scritto:

scusami batta ma tale espressione mi fa un po' storcere il naso, diciamola meglio dal bit meno significativo a quello più significativo mi piace di più

Hai ragione ma, il bit meno significativo, è sempre quello a destra.

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