Vai al contenuto
PLC Forum


Da 400 A 300


Messaggi consigliati

Inserito:

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 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 step

Grazie


Inserita:

prova a togliere semplicemente l'istruzione ENT.

pigroplc

Inserita: (modificato)

Semplicemente tratto dal manuale in linea di Step7:

Formato

ENT

Descrizione 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 Spiegazione

L 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 DBD16

Nelle cpu S7-300 ci sono solo 2 accumulatori, quindi dovrai rivedere tutto il calcolo e togliere l'istruzione ENT

Comunque, 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 step

Facci sapere se funziona.

Modificato: da batta
Inserita:

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

Inserita:
... oppure hai un buon condizionatore.....

Oppure, lavorando a casa, posso permettermi di stare in bermuda e ciabatte ;)

Inserita:

Grazie..

Batta provo e vi faccio sapere.

  • 2 weeks later...
Inserita:

OK!

Grazie funziona che è una meraviglia.

Inserita:

Mi fa molto piacere :)

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...