Vai al contenuto
PLC Forum


Spostamento Dati Da Una Db A Un'area M


treemezzo

Messaggi consigliati

Ciao .. ho un piccolo quesito

devo spostare da una db 4 byte tipo array of byte in un'area di memoria (es md400).

Con l'istruzione Move BLK posso prendere consecutivamente i 4 byte ma sono costretto a muoverli in un'altra area di tipo array!!! per risolvere il problema ho fatto lo spostamento dati con 4 move byte per byte nelle aree mb400 mb401 mb402 mb403

Ho usato quindi 4 move... avete idea se si possa fare in qualche altro modo?? magari con un'unica istruzione?

grazie

Link al commento
Condividi su altri siti


Mi sembra che con "Move BLK" la destinazione può essere solo in DB e in varibili locali "L" quindi non puoi usarla. Con un'unica istruzione di Move doppia word puoi trasferire in una doppia word destinazione di Merker (es: MD40) i 4 byte sorgente (es: DB1.DBD0). Ciao

Link al commento
Condividi su altri siti

Infatti, ma correggimi se sbaglio, questo se parliamo di una db dove ogni variabile è una DWORD.... quindi posso spostare a piacimento la DB1.DBD0 nella MD40 e viceversa!! se io ho un array di byte es. DB1.DBB0 per essere piu' precisi "data_db".buffer[0] - "data_db".buffer[1] - "data_db".buffer[2] - "data_db".buffer[3] , in una DB, come li sposto questi 4 in sequenza contemporaneamente con una singola istruzione ...nella MD40???

Link al commento
Condividi su altri siti

Non è vero che nelle DB ogni variabile è un doppia word. Le variabili possono essere bYte (DB1.DBB1), word (DB1.DBW4 che è formata dai byte 4, 5), doppie word (DB1.DBD10 formata dai bite 10, 11, 12, 13) forse ci sono anche le doppie word lunghe, formate cioè da 8 byte). Alle altre domande non so risponderti. Ciao

Link al commento
Condividi su altri siti

Sicuramente mi sono espresso male... sicuramente in una db si possono avere variabili di diverso tipo, ma io sto facendo riferimento alle variabili di tipo array dove devi necessariamente definire di che tipo devono essere.. tutto qui ... comunque grazie x (=per) avermi risposto..

Modificato: da Livio Migliaresi
Link al commento
Condividi su altri siti

Hai provato a muovere i dati in blocchi dati, funzioni, organizzativi ecc che non siano indirizzabili soltanto simbolicamente?

Il soft controlla che i dati che (muovi) da una parte all'altra siano sempre dello stesso tipo. Infatti se vuoi muovere una variabile di tipo string in un array di tipo byte, non lo puoi fare (almeno credo, non ho provato) se hai l'indirizzamento simbolico attivo in quel blocco. Al contrario se hai tolto la spunta su indirizzabile solo simbolicamente.

Ciao

Modificato: da baltimora
Link al commento
Condividi su altri siti

  • 9 months later...

scusate se riesumo questo topic, mi ritrovo però con lo stesso problema...

sto utilizzando la comunicazione via ISO-on-TCP tra 300 e 1200, che mi obbliga ad utilizzare nei db di tx e rx, la stessa identica struttura, e cioè un array di byte, nel mio caso circa 150 o giù di li.

Il problema dal lato 300 non sussiste, perchè come ho sempre fatto, indipendentemente da come è strutturato il db, utilizzo a piacimento le variabili al suo interno, indipendentemente se sono state dichiarate come byte, word...

Purtroppo nel 1200 le cose si complicano, l'accesso alle variabili del db non utilizzando rigidamente la struttura, mi porta ad avere degli avvisi in fase di compilazione, e cioè:"L'indirizzo nel blocco dati non viene occupato da una variabile", anche se in realtà non è vero, perchè se dichiaro .DBW10 sarà ovviamente (credo) .DBB10 e .DBB11.

Se scrivo invece semplicemente un byte in un byte, tutto va bene.

Ovviamente non posso cambiare la struttura dei db di comunicazione, qualcuno per caso sa consigliarmi un altro sistema per aggirare questa rogna?

p.s. ho già fatto i seguenti tentativi:

1) copiare il blocco con Move_blk su un altro blocco ma con struttura differente (word) ma stessa lunghezza, e non me lo permette

2) ho provato a disabilitare l'indirizzamento simbolico ma senza successo

...il blocco non è neppure ottimizzato

grazie

Claudio

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...