Jump to content
PLC Forum


Cesare Nicola

Copia da DB di BOOL a DB con array di BOOL

Recommended Posts

Cesare Nicola

Uno dei miei limiti e di non comprendere mai a sufficienza l'utilizzo dei blocchi MOVE_BLK, MOVE_BLK_VARIANT, ecc. Infatti ci sto ricascando.

Ho una DB, posso scegliere se ottimizzata o no, che contiene n variabili tutte BOOL; devo copiare il contenuto della DB, quindi lo stato di ogni BOOL in un'altra DB che però contiene un ARRAY di BOOL (la DB destinazione è sicuramente più grande di quella di origine). Cioè, se il bit 0.3 della prima DB è 1, voglio che l'indice 3 dell'array della seconda DB sia 1; se è 1 l'offset 1.4 voglio che sia 1 l'indice 12, ecc. E' possibile?
Se non si può trovo altre soluzioni ma ne ho un po' piene le scatole di non capirci mai un tubo e di vedere il Ret_val che non è mai a zero! 🙂

 

Share this post


Link to post
Share on other sites

batta

Potresti fare così:

image.png.8fc5ef6fae6371210232262c3106d8f5.png

 

Unico limite, è che le variabili BOOL nel DB sorgente devono essere in una struttura, e non direttamente nella "radice" del DB.
Nell'esempio, ho trasferito 5 byte (40 bit) dalla struttura del DB sorgente, partendo dal primo bit della struttura, a un array di byte di appoggio, e successivamente 5 byte dall'array di appoggio all'array di BOOL nel DB di destinazione, partendo dall'elemento [0].

 

In SCL diventa come segue:

GATHER_BLK(IN:="DB_Sorg".MyStruct.bool_0,
           COUNT_OUT:=5,
           OUT=>#tmpArray[0]);

SCATTER_BLK(IN:=#tmpArray[0],
            COUNT_IN:=5,
            OUT=>"DB_Dest".BoolArray[0]);

Rompe un po' meno le scatole, perché non ti chiede il tipo di dato che costituisce l'array (quello che ho usato come appoggio) e il tipo di dato del parametro COUNT.

 

Se la struttura è formata da 8, 16, 32 o 64 bit, al posto di GATHER_BLK e SCATTER_BLK si possono usare GATHER e SCATTER.

Share this post


Link to post
Share on other sites
Cesare Nicola

Perfetto, funziona, grazie. Nel frattempo, ho cambiato radicalmente soluzione al mio problema, quel trasferimento da una DB all'altra non mi serve più; l'FB che prima scriveva nella DB che doveva essere di origine, ora scrive direttamente in quella che doveva essere la destinazione. A scopo didattico, però, ci tenevo ad avere una soluzione.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...