Ospite drei Inserito: 5 agosto 2005 Segnala Inserito: 5 agosto 2005 Ciao a tutti,ho iniziato da pochi giorni a programmare con plc Siemens e inizio ad avere delle difficoltà. Ho bisogno di copiare i valori dei dati presenti in db6 dentro a delle altre db (dalla 120 alla 139) che hanno la stessa struttura della db sorgente. Per farlo avevo pensato ad aprire la db destinazione con un puntatore e copiare i dati che mi servono, il tutto con un codice tipo il seguente: // In MW95 c'è il valore INT con il numero della DB da aprire (120 -139)AUF DB [MW 95]L DB6.DBW24T DBW24Se non ho capito male questo pezzo di porgramma dovrebbe copiare il valore contenuto in DB6.DBW24 in DB120.DBW24 (ponendo che MW95 sia 120), ma non funziona. Non ricevo errore di nessun tipo dalla CPU, ma il valore non lo copia dove voglio io.Grazie per eventuali aiuti..
Matteo Montanari Inserita: 5 agosto 2005 Segnala Inserita: 5 agosto 2005 seguendo le istruzioni che hai scritto, il plc esegue le seguenti operazioni:AUF DB [MW 95] apre il blocco dati puntato. (DB120 ponendo che MW95 sia 120)L DB6.DBW24 carica nell'accumulatore il valore presente nel blocco dati 6 (DB6) all indirizzo 24, in questo modo il blocco dati 120 aperto in precedenza viene chiuso.T DBW24 trasferisce il valore presente nell'accumulatore (db6.dbw24) nell'indirizzo 24 del blocco dati aperto (in questo caso il 6 e quindi trasferisce DB6.DBW24 in DB6.DBW24)per risolvere il tuo problema puoi scrivere in questo modo:L DB6.DBW24AUF DB [MW 95]T DBW24oppure, se sei in un FC e non in un FB con DB di instanzaL DB6.DBW24AUF DI [MW 95]T DIW24oppureAUF DI [MW 95]L DB6.DBW24T DIW24
Ospite drei Inserita: 5 agosto 2005 Segnala Inserita: 5 agosto 2005 Grazie keosmm è quello di cui avevo bisognoCiao e grazie ancora
LaRocca Inserita: 12 agosto 2005 Segnala Inserita: 12 agosto 2005 Ciao, ti do una piccola informazione affinché ti rischiari meglio il tema, tenterò di informarti lo più chiaramente possibileDireccionamiento indiretto per memoria La direzione dell'operando viene indicata per un tiratore. Formato di istruzione con direccionamiento indiretto per memoria: L T[MW2] Operazione Operando Tiratore che mira alla direzione (tra automatici) In questo esempio l'istruzione è un carico in ACU1 del valore del temporizzatore il cui numero è contenuto in MW2. Secondo l'identificatore dell'operando, l'operazione valuta i dati depositati nella direzione come tiratore in formato parola o doppia parola. Tiratore in formato parola, indica il numero in formato decimale di: • Temporizadores (T) • Contadores (Z) • Blocchi di dati (DB, diedi) • Blocchi logici (FC, FB) L 5 / /Carga 5 in ACU1 T MW2 / /TRANSFIERO 5 A MW2 L T[MW2] / /Carga il valore attuale del temporizzatore T5 in ACU1 Tiratore in formato doppia parola, indica la direzione di: • Bit • Byte • Palabra • Doppia parola Versione 22/01/2002 Pag. 105 di 154 Un tiratore ha il seguente formato come doppia parola: P#Byte.Bit Es.: L P#4.1 / /Carga il tiratore in ACU1 T MD2 / /Transfiero il risultato ad una doppia parola O E[MD2] / /Consulta lo stato del segno nell'avanzato E4.1 = A[MD2] / /y assegna quello stato di segno all'uscita A4.1 Per indirizzare byte, parola e doppia parola il bit di tiratore deve essere sempre 0. Es.: L P#4.0 / /Carga il tiratore in ACU1 T MD2 / /Transfiero il risultato ad una doppia parola L EB[MD2] / /Cargo l'ACU1 il byte di avanzate 3 Osservazioni: • Il tiratore dovrà immagazzinarsi in: Marche (M) Blocchi di dati (DB) Dati locali (L) • Direccionamiento indiretto di blocchi di dati: Es.: L 1 / /Cargo 1 in ACU1 T MW10 / /TRANSFIERO 1 A MW10 L P#4.0 / /Cargo il tiratore in ACU1 T MD2 / /Transfiero il tiratore a MD2 AUF DB[MW10] / /Abro il DB1 L DBD[MD2] / /En ACU1 carico DBD4 (Il doppio parola 4 del DB) Non si potrebbe fare così: L DB[MW10] .DBD[MD2] Inoltre, nell'esempio dovrà esistere previamente il DB1, se no, dà sfinito. • I tiratori possono sommarsi. Es.: L P#124.2 / /Cargo leader L P#0.7 / /Cargo leader +D / /Los sommo: 124.2 + 0.7 = P#125.1 Es.: L P#124.2 / /Cargo leader L 3 / /SUMO 3 BITS +D / /RESULTADO: P#124.5 • può osservarsi il tiratore con “Observar/Forzar Variabile.” Es.: Operando Formato di stato ------------------------------------------- MD4 LeaderSpero che ti serva e ti chiarisca meglio Scusa per alcuno mancanza di ortografia ma il mio Italiano non è molto buono
kroccodile Inserita: 30 agosto 2005 Segnala Inserita: 30 agosto 2005 Scusate ma non c'era un bel SFC chiamato Block Move ? tanto la zona di dati è uguale ..... sbaglio ?
ken Inserita: 31 agosto 2005 Segnala Inserita: 31 agosto 2005 (modificato) mi hai tolto le parole di bocca.Modifico il messaggio per aggiungere:SFC20 Block Move Modificato: 31 agosto 2005 da ken
Matteo Montanari Inserita: 15 settembre 2005 Segnala Inserita: 15 settembre 2005 Scusate ma non c'era un bel SFC chiamato Block Move ? tanto la zona di dati è uguale ..... sbaglio ?----mi hai tolto le parole di bocca.Modifico il messaggio per aggiungere:SFC20 Block Movevolendo creare un blocco da utilizzare e parametrizzare come si vuole, si può utilizzare questo codice:FUNCTION FC 125 : VOID TITLE =COPY BLOCK AUTHOR : Keos NAME : Copy_Bk VERSION : 0.1 VAR_INPUT DB_SORGENTE : INT; //Nr.DB Sorgente DB_DESTINAZIONE : INT; //Nr.DB Destinazione BYTE_SORGENTE : DINT; //Nr.BYTE Sorgente BYTE_DESTINAZIONE : DINT; //Nr.BYTE Destinazione NR_BYTE : INT; //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 =COPY BLOCK // 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]; //; // 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]; //; // Trasferimento Blocco Dati //; CALL SFC 20 (// SFC20 DATA BLOCK_MOVE SRCBLK := #SORGENTE, RET_VAL := #RETVAL, DSTBLK := #DESTINAZIONE); END_FUNCTION
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