Vai al contenuto
PLC Forum


Indicizzazione Step7 - COME INDICIZZARE?


CLERSUD

Messaggi consigliati

Salve a tutti,

sono ad affrontare un problema che di concezione è semplice ma nel plc non riesco a farlo funzionare, il plc è un S7300:

devo salvare il valore della variabile db60.dbd0, quando m0.0 è attivo nella db1.dbd[x], dove [x] è una variabile (es. md20) che si incrementa con m0.1, il programma è realizzato nel seguente modo;

--SEGMENTO 1

u m0.1 \\ bit di incremento

fp m10.0

spbnb a001

l l#1

l md20 \\ variabile incrementata

t md20

a001: nop 0

-- SERGMENTO 2

u m0.0

fp m10.1

spbnb a002

l db60.dbd0 \\ valore da memorizzare

auf db1 \\ apro il DB1

t dbd[md20] \\ trasferisco in dbd[valore di md20]

a002: nop 0

il compilatore non da nessun errore, ma quando lo eseguo mi và in stop la CPU, comunque anche utilizzando l'OB121 l'istruzione non viene eseguita correttamente.

come posso realizzare questa funzione in modo corretto?

grazie in anticipo per l'aiuto.

Link al commento
Condividi su altri siti


Il link è valido per leggere dei valori precedentemente scritti all'interno delle variabili locali, ma non sono riuscito ad applicarlo nella mia funzione.

io devo memorizzare il mio valore in un db indicizzato.

ciao.

Link al commento
Condividi su altri siti

L'indirizzo si deve incrementare di 4 byte 0 bit. Prova col primo segmento cambiato cosi'

U M 0.1 // bit di incremento

FP M 10.0

SPBNB a001

L P#4.0

L MD 20 // variabile incrementata

+D

T MD 20

a001: NOP 0

Link al commento
Condividi su altri siti

Oppure puoi fare così:

Non ho con me un pezzo di codice già fatto e provo ad andare a memoria.

MD20 lo devi trasformare in formato puntatore:

Se vuoi scrivere in db1.dbd6, per esempio

L L#6

T MD20

L MD20

SLW 3

LAR1

L DB60.DBD0

AUF DB1

T DBW [AR1,P#0.0]

Così non sei obbligato a partire dal byte 0 di db1

Ciao

Link al commento
Condividi su altri siti

Vorrei fare solo una piccola precisazione, in una applicazione con uso pesante di puntatori ho avuto dei problemi con dati puntati a DB (sia di istanza che globali), allora rovistando nel ., alla ricerca di qualche suggerimento utile, sono venuto a sapere che è "meglio" +consigliato, penso, una volta caricato l'offset caricare anche la partenza della DB.

.....................

.....................

LAR1 MD 72 //Carico il puntatore

AUF DB 14

L P#DBX 0.0 //Carico il puntatore all'inizio della DB

+AR1 //Aggiorno il mio puntatore

......................

......................

Dopo questo piccolo accoegimento non ho avuto +prob con il ciclo :)

Link al commento
Condividi su altri siti

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