frussosw Inserito: 23 febbraio 2022 Segnala Share Inserito: 23 febbraio 2022 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 More sharing options...
drn5 Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 Per esempio: IF Status.%X2 = TRUE THEN END_IF testa il 2° bit della word Status Ciao Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 5 ore fa, drn5 ha scritto: 2 Scusami intendevo il bit 2... Link al commento Condividi su altri siti More sharing options...
batta Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 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 More sharing options...
frussosw Inserita: 23 febbraio 2022 Autore Segnala Share Inserita: 23 febbraio 2022 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 More sharing options...
leleviola Inserita: 23 febbraio 2022 Segnala Share Inserita: 23 febbraio 2022 (modificato) 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: 23 febbraio 2022 da leleviola Link al commento Condividi su altri siti More sharing options...
batta Inserita: 24 febbraio 2022 Segnala Share Inserita: 24 febbraio 2022 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 More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora