Vai al contenuto
PLC Forum


Puntatore Su Db


luca80

Messaggi consigliati

Ciao a tutti, i devo usare un puntatore su db , i modo da passare valori di una db.dbdxx su un'altra db.

Ho provato in questo modo ma in esecuzione il plc S7300 va in stop.

L "Costanti".Trazione.Spare_1

AUF "Costanti"

T DBD [MD 20]

Qualcuno ha un'idea???

Grazie

Link al commento
Condividi su altri siti


FattoreDiPotenza

Se fosse solo un errore di testo , il compilatore se ne accorgerebbe prima.

Per andare in stop , usando puntatori con DB la causa più plausibile é che vada a ascrivere o a leggere fuori dall'area consentita nelle DB.

Quindi bisgna fare attenzione agli indirizzi , anche se indiretti.

Quanto è lunga la DB "costanti"?

Cosa rappresenta il simbolo ""Costanti".Trazione.Spare_1" , che tipo di dato è ?

Vai anche nel registro errori , e ti dirà esattamente la causa dello stop ed il suo punto di interruzione oltre alla cronologia dell'errore avvenuto .

Modificato: da FattoreDiPotenza
Link al commento
Condividi su altri siti

Vorrei leggere il valore di db3.dbd 56 e trasferirlo alla db1.dbd 20

md20 = 20

L DB3.DBD 56

AUF DB 1

T DBD [MD 20]

cos'i forse è più chiaro...

Link al commento
Condividi su altri siti

Salve,

premesso che come postato da FattoreDiPotenza e gaserma le indicazioni da te fornite sono un pò scarse, vedo se riesco ad interpretare al meglio quello che vuoi fare.

Quella che chiami db.dbdxx o L "Costanti".Trazione.Spare_1

suppongo sia il valore in formato DINT che vuoi passare di volta in volta ad una Doppia word di indirizzo X che si trova nel DB il cui simbolico è "Costanti".

Ora l'indirizzo della Doppia word sul quale scrivere il valore è contenuto nel puntatore MD20.

Sè quello che ho pensato finora è esatto, allora l'errore nel codice che hai scritto si trova in MD20 perchè non è stato "preparato" in formato puntatore mediante l'istruzione SLD 3.

A seguire ti allego il codice che dovrebbe realizzare quanto da te richiesto:

L 4

SLD 3

T MD20 //contiene il puntatore all'indirizzo della word su cui scrivere, in questo caso la word sarà la DBD4 (MD20 è in formato DWORD)

L DB2.DBD0 // contiene il dato da scrivere corrispondente alla tua L "Costanti".Trazione.Spare_1

AUF DB 3

T DBD [MD20]

Ovviamente a seconda della word sul quale dovrai trasferire il dato, l'indirizzo al puntatore dovrà essere ricalcolato. Nell'esempio il valore è una costane nel tuo caso sarà un'altra variabile

Link al commento
Condividi su altri siti

Vorrei leggere il valore di db3.dbd 56 e trasferirlo alla db1.dbd 20

L 20

SLD 3

T MD20 //contiene il puntatore all'indirizzo della word su cui scrivere, in questo caso la word sarà la DBD4 (MD20 è in formato DWORD)

L DB3.DBD56

AUF DB 1

T DBD [MD20]

Link al commento
Condividi su altri siti

Se poi dovessi avere ancora dei problemi, oppure comportamenti "strani", io in ogni caso ti consiglierei quanto segue, quando usi i puntatori di preparare il tuo puntatore in base a cio che devi puntare.

Cerco di spiegarmi meglio, il semplice fatto di fare SLD 3 di una Dword, fa si di puntare ad una locazione, uguale al valore che vuoi puntare, cioè

L 20
SLD 3
T MD20
in MD20 trovi il tuo punatore alla locazione 20, ma questa locazione potrebbe essere riferita ad una locazione di memoria o come al tuo caso ad una DB, pertanto io se devo usare i puntatori faccio così
L DB3.DBD56
AUF DB 1

L P#DBX0.0
L 20
SLD 3
+D
T MD20

T DBD [MD20]

OPPURE

L P#M0.0
L 20
SLD 3
+D
T MD20

Così in tutti e due gli esempi punto alla locazione 20, ma nel primo alla DBxx.DBD20, il secondo alla M20.0.

Modificato: da TravelMen
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...