prog_jlaw Inserito: 3 agosto 2006 Segnala Inserito: 3 agosto 2006 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 3ciao e grazie a chiunque mi rispondera
trentaluca Inserita: 3 agosto 2006 Segnala Inserita: 3 agosto 2006 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: 3 agosto 2006 Segnala Inserita: 3 agosto 2006 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*)
RDA Inserita: 3 agosto 2006 Segnala Inserita: 3 agosto 2006 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-1Saluti
batta Inserita: 3 agosto 2006 Segnala Inserita: 3 agosto 2006 Se interessa anche per S7-300/400... L MW 20 T #TempVal L 0 T #N_Bit_ON L 16NEXT: T #ID L #TempVal SRW 1 T #TempVal SPZ M000 L #N_Bit_ON + 1 T #N_Bit_ONM000: L #ID LOOP NEXT L #N_Bit_ON T MW 22Dove:MW20 = variabile della quale si desidara leggere il numero di bit ONMW22 = variabile dove scrivo risultato conteggio#TempVal, #N_BIT_ON, #ID variabili locali
prog_jlaw Inserita: 7 agosto 2006 Autore Segnala Inserita: 7 agosto 2006 per claudio monti ..... grazie grazie e grazieproprio quello che cercavosaluti a tutti
Stefano Sormanni Inserita: 8 agosto 2006 Segnala Inserita: 8 agosto 2006 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
lukbrg Inserita: 8 agosto 2006 Segnala Inserita: 8 agosto 2006 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: 8 agosto 2006 Segnala Inserita: 8 agosto 2006 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...
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