Suabrina Inserito: 29 luglio 2009 Segnala Inserito: 29 luglio 2009 Sto cercando di capire cosa fa questa parte di programma funzionante su s7 400 per riutilizzarla su s7 300 dove mi da problemi (sembrerebbe che l'istruzione ENT crei problemi)...come posso sostituire questo comando e renderlo utilizzabile su s7 300? L #TMP_SRC_ADDR // Load source word pointer SLD 8 // Delete memory area type SSD 8 L #TMP_DEST_ADDR // Load destination word pointer SLD 8 // Delete memory area type SSD 8 >D // if source > destination JC DOWN // then jump to down L #IN_WORD_Length // else first word copied is the last (start copy from top) L 1 -I L 2 *I // convert into byte address SLW 3 // convert into pointer format L #TMP_SRC_ADDR // Load source word pointer ENT +D T #TMP_SRC_ADDR TAK L #TMP_DEST_ADDR // Load destination word pointer +D T #TMP_DEST_ADDR L -2 JU TOPDOWN: L 2 // DOWN: first word copied is the first (start copy from bottom)TOP: SLW 3 // convert into pointer format T #TMP_Scan_type // word stepGrazie
pigroplc Inserita: 30 luglio 2009 Segnala Inserita: 30 luglio 2009 prova a togliere semplicemente l'istruzione ENT.pigroplc
batta Inserita: 30 luglio 2009 Segnala Inserita: 30 luglio 2009 (modificato) Semplicemente tratto dal manuale in linea di Step7:FormatoENTDescrizione dell’operazione ENT (Immetti stack accumulatore) copia il contenuto di ACCU 3 in ACCU 4, ed il contenuto di ACCU 2 in ACCU 3. Se l’utente programma l’operazione ENT direttamente prima di una operazione di caricamento, si può salvare un risultato intermedio in ACCU 3.Esempio AWL SpiegazioneL DBD0 //Carica in ACCU 1 il valore della doppia parola dati DBD0. (Tale valore deve avere formato di numero in virgola mobile.)L DBD4 //Copia in ACCU 2 il valore di ACCU 1. Carica in ACCU 1 il valore della doppia parola dati DBD4. (Tale valore deve avere formato di numero in virgola mobile.)+R //Somma i contenuti di ACCU 1 e 2 come numeri in virgola mobile (IEEE 754, a 32 bit), e memorizza il risultato in ACCU 1.L DBD8 //Copia in ACCU 2 il valore di ACCU 1. Carica in ACCU 1 il valore della doppia parola dati DBD8.ENT //Copia il contenuto di ACCU 3 in ACCU 4. Copia il contenuto di ACCU 2 (risultato intermedio) in ACCU 3.L DBD12 //Carica in ACCU 1 il valore della doppia parola dati DBD12.-R //Sottrae il contenuto di ACCU 1 dal contenuto di ACCU 2, e memorizza il risultato in ACCU 1. Copia il contenuto di ACCU 3 in ACCU 2; ed il contenuto di ACCU 4 in ACCU 3./R //Divide il contenuto di ACCU 2 (DBD0 + DBD4) per il contenuto di ACCU 1 (DBD8 - DBD12), e memorizza il risultato in ACCU 1.T DBD16 //Transferisce il risultato (ACCU 1) nella doppia parola dati DBD16Nelle cpu S7-300 ci sono solo 2 accumulatori, quindi dovrai rivedere tutto il calcolo e togliere l'istruzione ENTComunque, non dovrebbe essere difficile. ENT copia il contenuto di ACCU3 in ACCU4 e di ACCU2 in ACCU3.Nel tuo caso, il richiamo di ENT serve per una memorizzazione temporanea del risultato dell'operazione "SLW 3" (che dopo l'istruzione "L #TMP_SRC_ADDR" si trova in ACCU2) in ACCU3.Il valore di ACCU3 viene ricaricato in ACCU2 dopo l'istruzione "+D" e riportato in ACCU1 con l'istruzione "TAK".Puoi quindi utilizzare una variabile locale per memorizzare e successivamente richiamare il risultato dell'operazione "SLW 3".Il tuo codice, mi pare, andrebbe riscritto così:L #TMP_SRC_ADDR // Load source word pointer SLD 8 // Delete memory area type SSD 8 L #TMP_DEST_ADDR // Load destination word pointer SLD 8 // Delete memory area type SSD 8 >D // if source > destination JC DOWN // then jump to down L #IN_WORD_Length // else first word copied is the last (start copy from top) L 1 -I L 2 *I // convert into byte address SLW 3 // convert into pointer format T #VarTemp L #TMP_SRC_ADDR // Load source word pointer +D T #TMP_SRC_ADDR L #VarTemp L #TMP_DEST_ADDR // Load destination word pointer +D T #TMP_DEST_ADDR L -2 JU TOP DOWN: L 2 // DOWN: first word copied is the first (start copy from bottom) TOP: SLW 3 // convert into pointer format T #TMP_Scan_type // word stepFacci sapere se funziona. Modificato: 30 luglio 2009 da batta
pigroplc Inserita: 30 luglio 2009 Segnala Inserita: 30 luglio 2009 Batta,sei un virtuoso del codice.... io con questo caldo riesco a malapena a risolvere le mie di magagne!... oppure hai un buon condizionatore.....pigroplc
batta Inserita: 30 luglio 2009 Segnala Inserita: 30 luglio 2009 ... oppure hai un buon condizionatore.....Oppure, lavorando a casa, posso permettermi di stare in bermuda e ciabatte
Suabrina Inserita: 1 agosto 2009 Autore Segnala Inserita: 1 agosto 2009 Grazie..Batta provo e vi faccio sapere.
Suabrina Inserita: 12 agosto 2009 Autore Segnala Inserita: 12 agosto 2009 OK!Grazie funziona che è una meraviglia.
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