Ghisla Inserito: 18 febbraio 2020 Segnala Share Inserito: 18 febbraio 2020 Ciao ragazzi, mi trovo davanti a questa parte di programma fatta da un mio ex collega. Quello che fa è guardare il numero pnt (che corrisponde ad una stazione), e trovare il bit corrispondente all'interno di una word. non capisco come fa a calcolare il bit. perchè fa un UW con 7? L "t_ciclo_st_nastro".pnt L 1 -I L 8 /I SLW 3 T #W_APP_ST_ESC L 32 L "t_ciclo_st_nastro".pnt -I UW w#16#7 L #W_APP_ST_ESC OW LAR1 AUF "GEN" UN DBX [ AR1 , P#14.0 ] s M30.0 Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 18 febbraio 2020 Segnala Share Inserita: 18 febbraio 2020 Ciao, visto così serve per identificare la posizione in bit di un numero 0-31 data dword. Ipotizza di avere un .pnt = 28, il quale diviene 27 (immagino pnt parta da 1 e non da 0, per questo la sottrazione, per rimanere "coerente" con i bit 0-7 invece di 1-8) il risultato dopo uw7 è 4 il 27esimo bit di una dword corrisponde al quinto bit (4 partendo dal bit 0, quindi quinto bit) del quarto byte della dword. se .pnt fosse 13, avresti il risultato dopo uw di 3, poichè il 12esimo (13-1) bit della dword è il quarto bit (quindi 3 partendo da 0) del secondo byte della dword Spero di esser riuscito a spiegarmi! Ciao! Link al commento Condividi su altri siti More sharing options...
Ghisla Inserita: 18 febbraio 2020 Autore Segnala Share Inserita: 18 febbraio 2020 Non ho capito perché fa proprio uw7. Perché 7? Da dove lo ha determinato? E poi perché esegue l'Or? Grazie Link al commento Condividi su altri siti More sharing options...
DesmoGiec Inserita: 18 febbraio 2020 Segnala Share Inserita: 18 febbraio 2020 (modificato) il 7 in hex->bin è 0000 0000 0000 0111 28 in dec->bin è 0000 0000 0001 1100 (ho usato 28 per ricollegarmi al mio esempio) facendo un andword ti trovi 0000 0000 0000 0100 = 4 E' un modo per fare un and tenendo buoni solo i primi 3 bit, in modo da avere sempre un numero da 0 a 7 quando esegui l'operazione, numero che indica la posizione del bit che ti interessa trovare. l'or successivo serve comunque per creare l'indice di partenza da quale il software va a fare il confronto sul bit 14.0. Se =0, allora setta m30.0 (edit, non mi ero reso conto che #W_APP_ST_ESC era dichiarato nel codice ) Modificato: 18 febbraio 2020 da DesmoGiec Link al commento Condividi su altri siti More sharing options...
Ghisla Inserita: 19 febbraio 2020 Autore Segnala Share Inserita: 19 febbraio 2020 Non mi è ancora chiaro, credo dovrò fare prove con un simulatore per riuscire a capirci qualcosa 😵 Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 19 febbraio 2020 Segnala Share Inserita: 19 febbraio 2020 1 ora fa, Ghisla ha scritto: Non mi è ancora chiaro Per capire a fondo il codice ti consiglio di studiarti bene la composizione di un puntatore ANY. Trovi a tal scopo le informazioni sul manuale di Step 7 oppure anche in questo forum, cercando la parola chiave ANY ho trovato queste 3 discussioni: Link al commento Condividi su altri siti More sharing options...
Ghisla Inserita: 20 febbraio 2020 Autore Segnala Share Inserita: 20 febbraio 2020 Ciao Pigro, so come è composto un puntatore any, ma con l'esempio che ho postato io non ha nulla a che vedere o sbaglio?🤒 Grazie Link al commento Condividi su altri siti More sharing options...
batta Inserita: 20 febbraio 2020 Segnala Share Inserita: 20 febbraio 2020 11 minuti fa, Ghisla ha scritto: ma con l'esempio che ho postato io non ha nulla a che vedere Sembra anche a me. Dal codice si capisce cosa fa, ma non si capisce perché lo fa. La prima parte è comprensibile: azzera i 3 bit a destra e, parlando di puntatori, significa puntare al primo bit di un byte. Capire, invece, il perché delle operazioni della seconda parte, non saprei che dire. Questo è il classico modo di programmare che io considero demenziale, non tanto per come è scritto il codice (comunque migliorabile), ma per la totale assenza di commenti. Link al commento Condividi su altri siti More sharing options...
Ghisla Inserita: 20 febbraio 2020 Autore Segnala Share Inserita: 20 febbraio 2020 Ciao Batta. praticamente da pannello ci sono 32 bit messi una una dword che indicano stazione esclusa se = 0 e stazione inclusa se = 1. stazione 1 = bit 0.7 stazione 8 = bit 0.0 ecc. Quello che fa è guardare il puntatore, che corrisponde ad una stazione (impostato in un'altra parte del programma), e tramite il puntatore andare a vedere se quella stazione è esclusa oppure inclusa. Quindi se il puntatore vale 10 ( cioè stazione 10) fa tutto il casino per vedere se il bit della stazione 10 è on. il 32 - puntatore lo fa perchè la stazione 1 corrisponde all'ultimo bit e viceversa. altrimenti se la stazione 1 fosse su bit 0.0 poteva fare puntatore - 1 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 20 febbraio 2020 Segnala Share Inserita: 20 febbraio 2020 Ora è un po' più chiaro, ma il quesito che pongo è sempre lo stesso: perché non scriverlo come commento nel codice? Nei miei programmi ci sono forse più righe di commento che di codice. E non lo faccio per gli altri, ma per me stesso. Nel momento in cui scrivi il programma i commenti ti servono a poco (aiutano comunque a fissare meglio il concetto), ma ti immagini, rimettere le mani, dopo anni, su un programma senza commenti? Link al commento Condividi su altri siti More sharing options...
Ghisla Inserita: 20 febbraio 2020 Autore Segnala Share Inserita: 20 febbraio 2020 Si hai ragione, ma il programma non l'ho scritto io Link al commento Condividi su altri siti More sharing options...
batta Inserita: 20 febbraio 2020 Segnala Share Inserita: 20 febbraio 2020 2 ore fa, Ghisla ha scritto: ma il programma non l'ho scritto io Sì, l'avevo letto. Link al commento Condividi su altri siti More sharing options...
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