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




Calcolo Bit Di Una Word


Messaggi consigliati

Inserito:

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


Inserita:

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

Claudio Monti
Inserita:

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*)

Inserita:

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

Inserita:

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

Inserita:

per claudio monti ..... grazie grazie e grazie

proprio quello che cercavo

saluti a tutti

Claudio Monti
Inserita:
;) di nulla... questo e' il forum
Stefano Sormanni
Inserita:

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

Inserita:

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!

Claudio Monti
Inserita:

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

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