Vai al contenuto
PLC Forum


Calcolo Bit Di Una Word


prog_jlaw

Messaggi consigliati

ho la necessita di sapere quanti bit allo stato on sono presenti in una doppia word....

esiste una funzione che lo fa??altrimenti come fare?

es: 00001100001000000000 risultato 3

ciao e grazie a chiunque mi rispondera

Link al commento
Condividi su altri siti


Se usi un plc omron della serie CJ..l'istruzione è BIT COUNTER......praticamente da il risultato dei bit posti ad on in un range di world....ciao....

Link al commento
Condividi su altri siti

Claudio Monti

Questo e' un esempio scritto in ST:

App_indw:=In_dword;    (*prendi la tua DWORD e l'appoggi su una di servizio*)
IF Condizione THEN    (*dove Condizione e' il bit di esecuzione del conteggio*)
    WHILE App_indw <>0 DO
        Resto:=App_indw REM 2;
        App_indw:=App_indw/2;
        N_bit:=N_bit+Resto;
    END_WHILE;    (*dove N_bit e Resto sono 2 WORD*)
END_IF;
N_bit:= ABS (N_bit);    (*prendo il valore assoluto del calcolo*)

Link al commento
Condividi su altri siti

Trasferisci il i singoli bit della boppia word nei mercher "%Mxx%,

Sul fronte di salita di ogni singolo bit "P" incrementi di 1 una word che sara la stessa per tutti i bit,

sul fronte di discesa "N" decrementi di 1 la stessa word di prima, metti in blocco che al di sotto di 0 la word non decrementa, e leggi direttamente nella word il numero dei bit a 1 logico.

Da me funziona.

OPEN_CONTACT(%MW1174:X0)COIL(%M130);

P_CONTACT(%M130)OPERATE %MW500:=%MW500+1

N_CONTACT(%M130),H_LINK,H_COMPARE %MW500>=0OPERATE %MW500:=%MW500-1

Saluti

Link al commento
Condividi su altri siti

Se interessa anche per S7-300/400...

L MW 20

T #TempVal

L 0

T #N_Bit_ON

L 16

NEXT: T #ID

L #TempVal

SRW 1

T #TempVal

SPZ M000

L #N_Bit_ON

+ 1

T #N_Bit_ON

M000: L #ID

LOOP NEXT

L #N_Bit_ON

T MW 22

Dove:

MW20 = variabile della quale si desidara leggere il numero di bit ON

MW22 = variabile dove scrivo risultato conteggio

#TempVal, #N_BIT_ON, #ID variabili locali

Link al commento
Condividi su altri siti

Stefano Sormanni

solo per dare un ulteriore contributo, in IL sarebbe:

!

LD TRUE

[%M100:32:=%MD200]

[%MW100:2:=0]

!

%L1:

LD %M100[%MW100]

[%MW101:=%MW101+1]

LD TRUE

[%MW100:=%MW100+1]

LD [%MW100<32]

JMPC %L1

Link al commento
Condividi su altri siti

Poco tempo fa ho avuto anche io la stessa necessità con un S7-200.......non trovando nessuna istruzione ho testato ogni singolo bit della doppia word andando ad incrementare un'altra word tutte le volte che si trovava un bit a 1........dopo aver controllato tutti i 32 bit avevo a disposizione quanti bit erano a 1.

Secondo voi potevo far diversamente? Esiste un'istruzione anche in S7-200 che non conosco??

Grazie a tutti!

Link al commento
Condividi su altri siti

Claudio Monti

E' inutile cercare di arrampicarsi sugli specchi... quella che ho proposto e' semplicemente matematica, la funzione REM nei PLC Schneider da' il resto... penso che anche Siemens abbia una funzione analoga!

Tutto qui, poi le strade possono essere mille, piu' o meno incasinate, ed alla fine arrivi allo stesso risultato.

Devi anche valutare la velocita' di esecuzione e l'ingombro di memoria...

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