Cesare Nicola Inserito: 11 ottobre 2019 Segnala Share Inserito: 11 ottobre 2019 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! 🙂 Link al commento Condividi su altri siti More sharing options...
batta Inserita: 11 ottobre 2019 Segnala Share Inserita: 11 ottobre 2019 Potresti fare così: 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. Link al commento Condividi su altri siti More sharing options...
Cesare Nicola Inserita: 11 ottobre 2019 Autore Segnala Share Inserita: 11 ottobre 2019 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. Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 28 febbraio 2020 Segnala Share Inserita: 28 febbraio 2020 Se abbiamo gli allarmi gestiti come UDT e poi volessimo rimapparli con i Bytes giusti in una Word (Usando l'UDT avremmo il vantaggio di utilizzare i nomi parlanti delle variabili) Potremmo creare una funzione che copia un qualsiasi tipo di dato su un altro tipo che possa contenerlo. Per fare questo dobbiamo creare la funzione NON OTTIMIZZATA seguente : Questa copierebbe per esempio l'UDT in una Word , solo che avrebbe i bytes invertiti Per risolvere il problema possiamo creare la seguente funzione NON OTTIMIZZATA A Questo punto possiamo fare una funzione che unisca le due procedure : E a questo punto possiamo fare l'unica funzione di libreria per rimappare i dati : Buon Week End 🙂 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