Vai al contenuto
PLC Forum


Blkmov_w - Non capisco bene


mubeta

Messaggi consigliati

Il 200 non è il mio ambiente preferito, anzi...

mi trovo di fronte questa instruzione, (per semplicità riporto solo i parametri):

BLKMOV_W

IN = C100;

N = 30;

OUT = C101;

Ora: dall'. in linea il dubbio non mi è del tutto chiarito. Mi pare di capire che:

1) a partire dal contatore C100, per 30 word, (quindi fino al C129), vengano copiati, a WORD, sul C101 e fino al C130.

E' corretta questa interpretazione?

Oppure devo pensare che:

2) C100, per 30 volte, venga quindi copiato da C101 fino a C130?

Sono più propenso per la 1), (e qui entro in confusione perché non ne comprendo l'utilità. Intendo che non capisco cosa volesse fare il programmatore, non cosa fa la funzione, che a parte il come si comporta, capisco benissimo.)

Link al commento
Condividi su altri siti


Si, il perché usarlo, per farne cosa, non mi preoccupa.

Mi preoccupa il cosa fa nello specifico il caso che ho riportato:

la tabella word di ingresso parte da C100; mentre la tabella word di uscita parte da C101.

A rogor di logica, se BLKMOV_W fa cosa penso io; parte copiando C100 in C101; quindi copia C101 in C102, inrementando fino a copiare C129 in C130.

Il risultato finale dovrebbe essere che da C101 fino a C130 hanno il valore di C100.

Più che un reset, sarebbe una assegnazione multipla.

Tutto questo ammesso, appunto, se si comporta così il BLKMOV_W; ma, se, invece partisse dal fondo e tornasse alla cima, allora non capisco più cosa fa nel mio caso. (Sarebbe uno shift di word).

La domanda voleva essere: A parte l'ambiguità dell'. in linea, chi sa spiegarmi meglio come lavora BLKMOV_W?

Link al commento
Condividi su altri siti

La domanda voleva essere: A parte l'ambiguità dell'. in linea, chi sa spiegarmi meglio come lavora BLKMOV_W?

L' H.E.L.P in linea non è poi così ambiguo. Semplicemente è sintetico , per ovvi motivi di dimensione del programma ,se leggi un manuale PDF sicuramente l'argomento sarà trattato leggermente meglio.

In ogni caso questa operazione trasferisce un blocco di dati , copiandolo da un'indirizzo iniziale specificato nel parametro IN.

La dimensione dell'area di memoria a partire da tale indirizzo di tale area è specificato nel parametro N , minimo 1 massimo 255.

I dati contenuti in tale blocco , vengono sovrascritti in un'altra area di memoria a aprtire dall'inidirzzo specificato nel parametro OUT , per la medesima dimensione specificata in N.

Nel tuo caso il programmatore ha fatto una cosa molto strana , perchè l'offset è maggiore dell'indirizzo destinazione - inidirizzo sorgente , quindi molto probabilmente ha ottenuto come risultato , il fatto di prelevare il valore di caricamento di C101 e impostare lo stesso valore in tutti i C fino al 131.

Per saperne il vero motivo, dovresti chiederglielo.

Nel mio lavoro uso spesso questa operazione per:

Azzerare aree di memoria , quando devo cancellare i buffer di segnalazioni o trasmissione dati , o buffer di tracking prodotto ,quando tali buffer superano la dimensione di una doppia parola (solo per amore di sintesi).

Invece di usare le classiche ricette, in alcune mie applicazioni, suddivido una area di memoria specifica in area lettura/scrittura ed area memorizzazione.

attraverso un gioco perverso di inidirizzamento indiretto e grazie alla flunzione BLOCK_MOV , sposto tali dati alla bisogna dall'area di memorizzazione all'area scrittura lettura, risparmiando lunghi blocchi di codice.

Ciao

Ivan

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...