lucadp Inserito: 31 gennaio 2020 Segnala Share Inserito: 31 gennaio 2020 (modificato) Ciao a tutti. avrei una necessità che riassumo brevemente: Parliamo di somachine (codesys). Avrei bisogno di sapere il valore del bit di una word. Molto semplice se scrivo in questi termini: -------------------------------------------------- VAR var_word: WORD: bit0: BOOL; .. cnt:INT; END_VAR bit0:=var_word.0; bit1:=var_word.1; ecc ecc ---------------------------------------------------- Così devo scrivere 16 righe di programma. Se utilizzo un ciclo FOR risulta qualcosa del tipo: FOR cnt:=0 TO 15 DO ArrayBit[cnt] := var_word.(cnt); END_FOR; Ovviamente non funziona!! non è possibile puntare a un bit di una word con un puntatore variabile!! Qualcuno ha qualche idea?? Grazie in anticipo! Modificato: 31 gennaio 2020 da lucadp Link al commento Condividi su altri siti More sharing options...
smartpatrol Inserita: 1 febbraio 2020 Segnala Share Inserita: 1 febbraio 2020 14 ore fa, lucadp ha scritto: FOR cnt:=0 TO 15 DO ArrayBit[cnt] := var_word.(cnt); END_FOR; vai a testare la tua word in and con una maschera. Inizializzi la maschera ad 1 poi ad ogni loop shifti di una posizione a sinistra Link al commento Condividi su altri siti More sharing options...
lucadp Inserita: 1 febbraio 2020 Autore Segnala Share Inserita: 1 febbraio 2020 ok non so bene come fare ma provo a studiare la cosa eventualmente ti chiedo consiglio. Nel frattempo ti ringrazio!! Link al commento Condividi su altri siti More sharing options...
zanellatofabio Inserita: 21 febbraio 2020 Segnala Share Inserita: 21 febbraio 2020 Ciao, Il suggerimento di smartpatrol è corretto. Io farei così : dichiarazione: var_word : WORD; w_result : WORD; w_cmp : WORD; x : INT ; ArrayBit : ARRAY [0..15] OF BOOL; codice: w_cmp:=1; // preparo la maschera a 0000000000000001 FOR x:=0 TO 15 DO w_result := w_to_test AND w_cmp; w_cmp:=SHL( w_cmp,1); IF w_result <> 0 THEN ArrayBit [x] := TRUE ; END_IF; END_FOR; Link al commento Condividi su altri siti More sharing options...
Marco Mondin Inserita: 21 febbraio 2020 Segnala Share Inserita: 21 febbraio 2020 ELSE ArrayBit [x] := FALSE; Link al commento Condividi su altri siti More sharing options...
zanellatofabio Inserita: 21 febbraio 2020 Segnala Share Inserita: 21 febbraio 2020 8 minuti fa, Marco Mondin ha scritto: ELSE ArrayBit [x] := FALSE; giusto. è fine settimana... pardon. ciao. Link al commento Condividi su altri siti More sharing options...
lucadp Inserita: 24 febbraio 2020 Autore Segnala Share Inserita: 24 febbraio 2020 grazie delle risposte. Avevo dimenticato di aggiornare il post! 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