TMlm Inserito: 9 dicembre 2004 Segnala Share Inserito: 9 dicembre 2004 ciao a tutti, ho il seguente problema:dovrei copiare una gran quantità di dati in un lungo archivio (abbastanza da scoraggiarmi ad usare le istruzioni L, T ripetute n volte). Per fare questo ho creato un UDT per definire tutti i campi di una ricetta.Nella chiamata alla SFC 20 che vedete sotto, "DBricette".BUFFER è un UDT e "DBricette".ARCHIVIO_RECORDS[]è un array dello stesso tipo. CALL "BLKMOV" SRCBLK :="DBricette".BUFFER RET_VAL:="Err_sfc20" DSTBLK :="DBricette".ARCHIVIO_RECORDS[1]il mio problema, come potete immaginare, è che non devo copiare il BUFFER sempre nella posizione 1 del vettore ma dovrei parametrizzarla. se metto una variabile di tipo BYTE, WORD o INT al posto dell'indice, ricevo errori di sintassi.qualcun altro ha avuto in passato lo stesso problema? Link al commento Condividi su altri siti More sharing options...
STEU Inserita: 9 dicembre 2004 Segnala Share Inserita: 9 dicembre 2004 Guarda questo linkdiscussione su block movecomunque devi dare il bit di partenza e il numero di word byte o double word che devi spostaredeve essere coincidente con la lunghezza di destinazione. Link al commento Condividi su altri siti More sharing options...
TMlm Inserita: 9 dicembre 2004 Autore Segnala Share Inserita: 9 dicembre 2004 Grazie STEU ma così come l'ho scritto sul post il blocco già funziona, il fatto è che dovrei mettere una variabile al posto dell'1 sull'indice dell'array o comunque dovrei trovare un modo per copiare blocchi con un offset variabile... Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 9 dicembre 2004 Segnala Share Inserita: 9 dicembre 2004 Prova con questo codice:FUNCTION "FC_COPY_BLOCK" : VOID TITLE =COPY BLOCK AUTHOR : NAME : Copy_Bk VERSION : 0.1 VAR_INPUT DB_SORGENTE : WORD; //Nr.DB Sorgente DB_DESTINAZIONE : WORD; //Nr.DB Destinazione BYTE_SORGENTE : DWORD; //Nr.BYTE Sorgente BYTE_DESTINAZIONE : DWORD; //Nr.BYTE Destinazione NR_BYTE : WORD; //NR.BYTE da trasferire END_VAR VAR_TEMP SORGENTE : ANY; //Parametro ANY sorgente DESTINAZIONE : ANY; //Parametro ANY Destinazione RETVAL : INT; //Valore ritorno SFC END_VAR BEGIN NETWORK TITLE =COMPILAZIONE AREA ANY SORGENTE LAR1 P##SORGENTE; // Indirizzo sorgente area ANY L W#16#1002; // Codice ID e tipo dati T LW [AR1,P#0.0]; L #NR_BYTE; // Nr.byte da trasferire T LW [AR1,P#2.0]; L #DB_SORGENTE; // Nr.DB T LW [AR1,P#4.0]; L #BYTE_SORGENTE; SLD 3; OD DW#16#84000000; T LD [AR1,P#6.0]; NETWORK TITLE =COMPILAZIONE AREA ANY DESTINAZIONE LAR1 P##DESTINAZIONE; // Indirizzo destinazione area ANY L W#16#1002; // Codice ID e tipo dati T LW [AR1,P#0.0]; L #NR_BYTE; // Nr.byte da trasferire T LW [AR1,P#2.0]; L #DB_DESTINAZIONE; // Nr.DB T LW [AR1,P#4.0]; L #BYTE_DESTINAZIONE; SLD 3; OD DW#16#84000000; T LD [AR1,P#6.0]; NETWORK TITLE =TRASFERIMENTO BLOCCO CALL "MOVE_BLOCK" (// SFC20 DATA BLOCK_MOVE SRCBLK := #SORGENTE, RET_VAL := #RETVAL, DSTBLK := #DESTINAZIONE); END_FUNCTIONche comunque è nel manuale Siemens, sia cartaceo che elettronico, non che trovarlo sia semplice ma ... Link al commento Condividi su altri siti More sharing options...
TMlm Inserita: 9 dicembre 2004 Autore Segnala Share Inserita: 9 dicembre 2004 sto ancora cercando nella documentazione, ma proprio non riesco a trovare...comunque è proprio ciò di cui avevo bisogno. Graziequalcuno può darmi qualche riferimento per la documentazione citata? Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 9 dicembre 2004 Segnala Share Inserita: 9 dicembre 2004 manuale in linea -> sottocartella "cerca" -> Impiego del tipo di parametri ANYed hai esempio della funzione .da quella presentata nel manuale sono stati aggiunti i parametri per renderla "più" utile.eventualmente puoi modificare gli indirizzamenti e da copia DB -> DB può diventare qualsiasi cosa...(controlla per questo anche articolo "Formato del tipo di parametri ANY") 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