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




Test Bit - Test bit "1" in una word


Messaggi consigliati

Inserito:

Devo visualizzare su un display i numeri dei messaggi

diagnostici presenti in un impianto.

I messaggi sono circa un centinaio e sono stati appoggiati su MW

Il mio problema è ricercare i bit che nelle varie MW che sono a 1, ed abbinare

a questo in numero da passare poi al display.

Faccio un esempio per chiarire meglio il concetto

MW50 00000101 01000100

MW52 00000000 00100100

MW54

MW56

MW58

ecc...

nella MW50 ho ad 1 i bit che corrispondono ai messaggi 2-6-8-10

nella MW52 ho ad 1 i bit che corrispondono ai messaggi 19-22

Dovrei testare la MW50 vedere che il bit 2 è a "1"

lanciare una FC che si occupa della visualizzazione

con un parametro di input nel quale scrivo il numero del

mesaaggio presente(2) e cosi via fino alla fine della word per poi passare

alla word successiva

Ovviamente questo controllo potrei farlo bit a bit ma questo test

dovei riperlo più di 100 volte.

Grazie a tutti per l'aiuto


ifachsoftware
Inserita:

Naturalmente hai questo problema perchè vuoi utilizzare un display invece di un pannellino o di un supervisore.

Per fare cio' devi fare un bel loop in cui spulci i vari bit ed invii i messaggi.

for WORD = 1 to MAX _WORD

if WORD > 0 then

bit = 1

while Bit <> 0xFF // Se ad 8 Bit oppure 0xFFFF se a 16 Bit

if WORD and Bit then

allarme

endif

bit = bit << 1; // Shift Left di 1 Bit

next

endif

next

Personalmente ti consiglio di usare un pannellino con gestione degli allarmi oppure un supervisore.

Ciao :)

Inserita:

Quseto tipo di programmazione in STEP7 non è possibile non si possono fare cicli For o While.

Nella domanda non avevo specificato il linguaggio di progtammazione.

Cristina Fantoni
Inserita: (modificato)
Quseto tipo di programmazione in STEP7 non è possibile non si possono fare cicli For o While

Pero' puoi creare un loop che fa la stessa funzione, è un po' macchinoso, ma si riesce! B)

Io l'ho fatto proprio con Step 7!

:wub:

Modificato: da Cristina Fantoni
Inserita: (modificato)

ciao

si che si possono fare i cicli for

ma le regole sono diverse da duelle del mondo pc.

cioe' devi gestire tutto tu !!

devi avere padronanza del metodo booleiano.!!

nel mondo pc l'interprete o il compilatore fanno questo lavoro in questi linguaggi no!

se scrivi qualcosa in assembler ti troverai nella stessa situazione!!!

per quanto concerne il problema tuo .... devi usare uno shift register e controllare il bit che esce dalla

word (il flag di carry) se esso e' a 1 il bit uscito era a uno ogni e volta che fai shiftare incrementi un contatore (lo incrementi di una unita')...nel contatore ci sara' il numero del messaggio e se il carrY e' a uno fai saltare il programma alla routin di visualizzazione del messaggio puntato dal famigerato contator.!

ho usato decine di volte questo metodo e devo dire che e' di difficile debuggaggio.

ciao

dario

Modificato: da Dario Valeri
Inserita:

ho' avuto anche io la stessa esigenza di associare un numero di allarme partendo da una matrice di bit ; ho' utilizzato un indirizzamento indiretto di registro , poi e' necessario anche eseguire dei controlli sul conteggio e sulla sua abilitazione , in pratica ho' fatto cosi' :

L MB10 //è la variabile che contiene il contatore di controllo

LAR1 //utilizzo la MB10 come indirizzo di registro

U [AR1,P#20.0] //eseguo il test del bit indirizzato da AR1 a partire da M20.0

S M11.0 //set bit di allarme presente

in pratica Mb10 è un contatore che incremento ad ogni test e blocco con M11.0 = 1 :

con Mb10 = 0 viene eseguito il test su M20.0

con Mb10 = 1 viene eseguito il test su M20.1

con Mb10 = 7 viene eseguito il test su M20.7

con Mb10 = 8 viene eseguito il test su M21.0 ..... e cosi via

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