paoloplc85 Inserito: 7 gennaio 2012 Segnala Inserito: 7 gennaio 2012 Ciao a tutti!!!Sono alle prime armi con il PLC, sto usando CodeSys e sto provando ad programmare un PLC Z-TWS3 della SENECA.La mia domanda è come fare ricavare un bit di una WORD.Esempio ho una WORD di nome Ingresso1, vorrei sapere se il BIT numero 2 sia 0 o 1. Setessa cosa se lo devo scrivere avete una funzioneche lo permetta di fare?Grazie in anticipo.
gianff Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 forse era meglio se scrivevi su---------New Posts PLC/CNC altre marche e info varie --------se usi esempio ( ingresso 1) word w200w200.00 bit 0w200.01 bit 1w200.02 bit 2----w200.15 bit 15almeno questo vale per omron
paoloplc85 Inserita: 8 gennaio 2012 Autore Segnala Inserita: 8 gennaio 2012 Ok ho provato a scrivere questoing_apertura:=ingressiMEM.0;e nella variabile ing_apertura mi scrive il valore in bool della word ingressiMEM nel bit 0.Però ho un'altro problema il numero 0 non lo posso associare a una variabile esempio:ing_apertura:=ingressiMEM.numerobit;dove la variabile "numerobit" c'è scritto il numero del bit da leggere, però quando lo compilo mi dice che 0 e una costantecome posso fare?
max81 Inserita: 8 gennaio 2012 Segnala Inserita: 8 gennaio 2012 Ciao,se conosci l'indirizzo dove è allocato Ingresso1, ad esempio %MW100, allora il bit 2 avra indirizzo %MX100.2 (bit cominciano da 0, quindi 2 è il terzo bit).
paoloplc85 Inserita: 9 gennaio 2012 Autore Segnala Inserita: 9 gennaio 2012 Grazie questo lo sapevo già!!!!Quello che vorrei sapere e come fare a puntare un bit di una WORD tramiteuna variabile al posto di scrivere il numero diretto.Ad es.: bIngresso0 := wIngressi.0; bIngresso1 := wIngressi.1; bIngresso2 := wIngressi.2; bIngresso3 := wIngressi.3; bIngresso4 := wIngressi.4; bIngresso5 := wIngressi.5; bIngresso6 := wIngressi.6; bIngresso7 := wIngressi.7;dove bIngressox e di tipo BOOL e wIngressi e di tipo WORD, quello che vorrei fareche al posto di ripere per 8 la stessa cosa vorrei associare l'indice a una variabilecosi posso utilizzare un ciclo for che occupa meno memoria ed è più veloce.Ad es.: FOR i=0 TO 7 DO bIngresso := wIngressi.i; END_DO;dove bIngresso[0..7] e un array di tipo BOOL e wIngressi e di tipo WORD.solo che quando compilo mi da errore e mi dice che wIngressi.i e di tipo costate (penso dove c'è i)Vorrei sapere se si riesce a fare una cosa del genere.
max81 Inserita: 9 gennaio 2012 Segnala Inserita: 9 gennaio 2012 (modificato) La cosa interessa anche a me, io ho provato così, e funziona:Variabili:VAR Ingresso: WORD := 16#A0F2; Temp : WORD; input: ARRAY [1..16] OF BOOL; index : INT; END_VAR Pezzo codice: Temp := Ingresso; FOR index := 1 TO 16 DO input[index] := WORD_TO_BOOL(Temp AND 16#0001); Temp := SHR(Temp, 1); END_FOR; Modificato: 9 gennaio 2012 da max81
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