BRUNO_regg Inserito: 26 maggio 2006 Segnala Inserito: 26 maggio 2006 Salve a tutti,devo controllare una serie di byte e verificare se il valore dei singoli bit sono a 0 o a 1;piu' precisamente ho bisogno di verificare se almeno un bit di X byte ha un valore diverso rispetto tutti gli altri.Ho scritto queste poche righe di programma in un FB, ho appoggiato alcuni dati all'area interfaccia perpoter richiamare il blocco piu' volte abbinato a diverse DB e il tutto funziona:// incremento per creare indice puntatore U #Bit_MANU_forced // BOOL AREA TEMP SPB M203 L #APP_scansione_MANU // INT AREA TEMP appoggio scansione + 1 T #APP_scansione_MANU L #Max_bit // INT AREA IN interfaccia "numero di bit da controllare" <I SPB M203 L 0 T #APP_scansione_MANUM203: NOP 0 L #APP_scansione_MANU LAR1 AUF #DB_number // AREA IN BLOCK_DB interfaccia "DB da controllare" U DBX [AR1,P#100.0] // Offset inizio il controllo dal byte 100 bit 0 = #Bit_MANU_forced // AREA OUT interfaccia "almeno un bit con valore 1"// Vista del blocco richiamato in un FC CALL "Compare dbx-AUTO_MANU" , DB115 DB_number :=DB11 Max_bit :=64 Bit_MANU_forced:=FORCED_MANUOra volevo appoggiare il dato Offset ad una variabile per potermodificare all'occorrenza l'area da controllare e ho modificato il blocco in questo modo:// incremento per creare indice puntatore U #Bit_MANU_forced // BOOL AREA TEMP SPB M203 L #APP_scansione_MANU // INT AREA TEMP appoggio scansione + 1 T #APP_scansione_MANU L #Max_bit // INT AREA IN interfaccia "numero di bit da controllare" <I SPB M203 L 0 T #APP_scansione_MANUM203: NOP 0 L #APP_scansione_MANU LAR1 L P##Primo_Byte_MANU // AREA IN POINTER interfaccia "primo byte/bit da controllare" +AR1 // Offset inizio il controllo dal byte xxx bit x AUF #DB_number // AREA IN BLOCK_DB interfaccia "DB da controllare" U DBX [AR1,P#0.0] = #Bit_MANU_forced // AREA OUT interfaccia "almeno un bit con valore 1"// Vista del blocco richiamato in un FC CALL "Compare dbx-AUTO_MANU" , DB115 DB_number :=DB11 Max_bit :=64 Primo_Byte_MANU:=P#76.0 // Inizio controllo dal byte 76 Bit_MANU_forced:=FORCED_MANU CALL "Compare dbx-AUTO_MANU" , DB116 DB_number :=DB12 Max_bit :=64 Primo_Byte_MANU:=P#100.0 // Inizio controllo dal byte 100 Bit_MANU_forced:=FORCED_MANULa sintassi sembra corretta, non ho errori e il blocco viene compilato correttamente; pero' in questo modo non funziona. Se qualcuno riesce a darmi una mano... Grazie e ciaoBruno
Luca Bab Inserita: 26 maggio 2006 Segnala Inserita: 26 maggio 2006 Non ho capito bene come lo hai realizzato .........ma ho fatto una cosa simile ( a mio parere piu' semplice )mi faccio una DB dove vado a scrivere per ogni DBW l'indirizzo dei bit da testare ( M40.5 = 40x8+5 )con un semplice puntatore vado a testare ( io l'ho fatto a ogni scansione ) la M con l'indirizzo contenuto nella DBWnon so' se ti sono stato di aiutoCiaoLuca
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