lock Inserito: 27 novembre 2002 Segnala Inserito: 27 novembre 2002 Grazie in anticipo a tutti quanti vorrano rispondere.Vorrei sapere se e come è possibile fare questo in AWL:ho due WORD, diciamo1000000000000000 e 0000000000000001.Vorrei sapere se si può ottenere una DWORD (e se sì, come sia possibile farlo in AWL) che sia esattamente la risultante dell'accostamento delle due WORD precedenti, ossia:10000000000000000000000000000001.Grazie ancora.Lock.
Ivan Castellaro Inserita: 27 novembre 2002 Segnala Inserita: 27 novembre 2002 La doppia word è invertita, cioè w0,w1.Per fare cio' che dici te puoi trasferire la w1 nella doppia word, shiftarla di 16 posizione e fare l'OR con la w0L "W1"T DWxxSLD 16OD "W0"T DWxxQuesto se usi il 300
lock Inserita: 27 novembre 2002 Autore Segnala Inserita: 27 novembre 2002 Grazie per la risposta Ivan, ma purtroppo così non funziona e ti spiego perchè.Innanzitutto per poter fare l'OR ho necessità di trasformare ambedue le WORD in DWORD. Ora immagina che faccio lo shift su una delle due DWORD ed ottengo un valore che è -(2^31), ossia -2147483648, ossia 10000000000000000000000000000000, almeno così viene interpretato da S7.Adesso, quando faccio l'OR con la seconda DWORD, il valore risultante non viene aumentato, ma diminuito.Cioè, se la seconda DWORD è per esempio 00000000000000000000000100000000, io non ottengo 10000000000000000000000100000000, ma qualcos'altro, dato dalla differenza fra -(2^31), ossia la prima DWORD, e 256, ossia la seconda DWORD.Dunque, a me servirebbe invece che la DWORD risultante fosse 10000000000000000000000100000000 (cioè -256, almeno per come viene interpretato da S7).Come posso fare?Grazie ancora.Lock.
andrea.fa Inserita: 27 novembre 2002 Segnala Inserita: 27 novembre 2002 lock+Nov 27 2002, 11:44 AM-->CITAZIONE(lock @ Nov 27 2002, 11:44 AM)... mi sono perso ! .... ma non era esattamente quello che volevi ottenere?Andrea
Ivan Castellaro Inserita: 27 novembre 2002 Segnala Inserita: 27 novembre 2002 Mi sembra strano,Che numero risulta dopo l'or ?Sei sucuro di fare l'or con la doppia parola (OD)?Le doppie word che utilizzi come appoggio hanno il valore che ti aspettavi?Per fare le prove appoggiati su 3 doppie word distinte e controlla i risultatiFammi sapere.
lock Inserita: 27 novembre 2002 Autore Segnala Inserita: 27 novembre 2002 1) Dopo l'OR il valore risultante è questo:-2147483392, ossia 11111111111111111111111100000000....2) Sono sicuro di aver fatto l'OR con la doppia parola (utilizzando OD)3) Le doppie word che utilizzo hanno il valore che mi aspetto.Adesso riesco a farmi capire? S7 utilizza il bit di segno, dunque una DWORD può contenere valori compresi fra -2147483648 e 2147483647...Se faccio l'OR fra un numero negativo e uno positivo, ottengo che il numero negativo viene decrementato...Dunque quello che mi serve è realmente poter solo accostare le due WORD per ottenere una DWORD... se mi metto a fare calcoli non funziona nulla.10000000000000000000000000000000OR00000000000000000000000100000000dovrebbe essere uguale a:10000000000000000000000100000000e invece è uguale a:11111111111111111111111100000000.Spero di essere stato chiaro.Lock.
andrea.fa Inserita: 27 novembre 2002 Segnala Inserita: 27 novembre 2002 lock+Nov 27 2002, 01:27 PM-->CITAZIONE(lock @ Nov 27 2002, 01:27 PM)...per evitare di lasciare qualche bit per strada ti faccio un esempio in esadecimale....se MD0 = 80000000x e MD1=00000100xscrivendoL MD 0L MD 4OD T MD 8su MD8 ti troverai 80000100 che in decimale vale -2147483392!!spero di avere capito... e avere chiarito ciaoAndrea
Ivan Castellaro Inserita: 27 novembre 2002 Segnala Inserita: 27 novembre 2002 Quello che dici non ha gran che senso,Questo è l'. S7OD (OR doppia parola) combina il contenuto dell'accumulatore 1 con il contenuto dell'accumulatore 2, oppure con una costante (a 32 bit), bit per bit, in conformità all'operazione logica combinatoria OR. Il bit della doppia parola di risultato è "1" solamente se i corrispondenti bit delle doppie parole combinate sono entrambi "1". Il risultato viene memorizzato nell'accumulatore 1. ACCU 2 (per le CPU con quattro accumulatori anche ACCU 3 e ACCU 4) rimane inalterato. Il bit di stato A1 viene impostato conformemente all'esito dell'operazione (A1=1 se il risultato è diverso da zero). I bit di stato A0 e OV vengono resettati a "0".OD: combina il contenuto dell'accumulatore 1 con il contenuto dell'accumulatore 2.OD : combina il contenuto dell'accumulatore 1 con una costante (a 32 bit).Parola di stato BIE A1 A0 OV OS OR STA RLC /ERScrive: - x 0 0 - - - - -Esempi Bit 31 . . . . . . . . . . . . . . . . . 0ACCU 1 prima dell'esecuzione di OD 0101 0000 1111 1100 1000 0101 0011 1011ACCU 2 o costante (a 32 bit): 1111 0011 1000 0101 0111 0110 1011 0101Risultato (ACCU 1) dopo l'esecuzione di OD 1111 0011 1111 1101 1111 0111 1011 1111Esempio 1AWL SpiegazioneL ED20 Carica il contenuto di ED20 in ACCU 1.L ED24 Carica il contenuto di ACCU 1 in ACCU 2. Carica il contenuto di ED24 in ACCU 1.OD Combina i bit di ACCU 1 con i bit di ACCU 2 mediante OR, memorizza il risultato in ACCU 1.T MD8 Trasferisce il risultato a MD8.Come vedi dall'esempio non centra nulla il segno.A meno che non sia un bug.......
walterword Inserita: 28 novembre 2002 Segnala Inserita: 28 novembre 2002 fai un mascheramento seguito da uno scorri bit
OscarZ Inserita: 28 novembre 2002 Segnala Inserita: 28 novembre 2002 Questo dovrebbe funzionare! Domani comunque provoL DBWx // Word 1SLD 16 // Scorrimento a doppia parolaL DBWy // Word 2OD // Or a doppia parolaT DBDz // RisultatoNon penso che i bit di segno possano creare problemiCiao Oscar
lock Inserita: 29 novembre 2002 Autore Segnala Inserita: 29 novembre 2002 walterword+Nov 28 2002, 04:54 PM-->CITAZIONE(walterword @ Nov 28 2002, 04:54 PM)Mi puoi fare un esempio?
LaRocca Inserita: 29 novembre 2002 Segnala Inserita: 29 novembre 2002 Ciao..Cuello che dice Oscar funziona benne.. questo è cuello chi fá..L MW0 // Word 0 (1000000000000000)SLD 16 // Scorrimento a doppia parola 1000000000000000 + (16 bits in 0) MW1 // Word 1 (0000000000000001) Word bassoOD // Or a doppia parola ACCU2 OD ACCU1T MD0// Risultatorisultato: 1000000000000000 0000000000000001spero essere chiaro?
astroma Inserita: 30 novembre 2002 Segnala Inserita: 30 novembre 2002 Ciao a tutti.Sebbene la soluzione dell'OR a parola funzioni, puoi risolvere il problema semplicemente trasferendo le due word nella destinazione finale:i due dati da accoppiare sono MW6 e MW54 e il dato finale deve essere MD70:L MW6T MW70L MW54T MW72leggendo il dato MD70 avrai il risultato cercato.
OscarZ Inserita: 30 novembre 2002 Segnala Inserita: 30 novembre 2002 L MW6SLD 16L MW54ODT MD70Tutto quiCiao Oscar
lock Inserita: 2 dicembre 2002 Autore Segnala Inserita: 2 dicembre 2002 Grazie a tutti per le risposte.Lock.
Ivan Castellaro Inserita: 2 dicembre 2002 Segnala Inserita: 2 dicembre 2002 Sei riuscito a farlo alla fine o no?Se se che soluzione hai adottato?Saluti...
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