Vai al contenuto
PLC Forum


Puntatori S7 - Sono in crisi


Messaggi consigliati

Inserito:

Scusate la mia ignoranza ma non riesco a gestire i puntatori per quello che dovrei fare.

Ho usato la funzione cerca ma non ho trovato la soluzione.

Spiego meglio il mio problema:

Ho una variabili (MW0) che può assumere il valore da 1 a 10

A seconda del valore di (MW0) devo prendere 10 BYTE da una DB che contengono un testo

e trasferirli su una altra DB.

Per questa funzione pensavo di usare la funzione BLOCK MOVE (SFC20) che conosco

avendola già utilizzata ma solo con idirizzi costanti.

Esempio : Prendo 10 BYTE da DB1.DBX12.0

Trasferisco in DB41.DBX12.0

Il DB da dove prelevo i dati dovrebbe essere puntato da MW2 mentre il DB di arrivo e fisso.

Spero che qualcuno possa aiutarmi e ringrazio tutti quanti vorranno farlo.

G.FABRIZIO


Inserita:

Ciao,

scusa non ho capito cosa non riesci a fare e non conosco bene SFC20.

Comunque prova a dirti quacosa io, per utilizzare i puntatori con un blocco dati, non si puo utilizzare l'indirizzo completo come hai riportato tu, ma bisogna prima aprire il DB con l'istruzione AUF e dopo leggere la variabile. Esempio

L 1
T MW100

AUF DB [MW100]
L DBW 12
T DB41.DBW12
Ricordati solo che quando apri il DB41, chiudi il DB aperto con il puntatore, quindi per leggerlo nuovamente devi riaprirlo. In alternativa puoi aprire il DB puntato come DB di istanza. Esempio:
AUF DI [MW100]

In questo modo puoi aprire una sola volta il Db puntato. Questo sistema non funziona se lo utilizzi all'interno di un FB che ha già il suo blocco dati di istanza.

Spero di essere stato chiaro

Ciao

Gianluca

Inserita: (modificato)

Per gluca2.

Ti ringrazio della risposta, ma l' esempio che mi hai suggerito funziona solo se devo trasferire

delle word, cioè 2 byte o anche delle dword cioè 4 byte.

Io devo trasferire 10 BYTE che trovo ad esempio in DB1 a partire dal byte 12.

Utilizzando la funzione SC20 BLOCK_MOVE con l' indirizzamento con costanti scrivo

una cosa di questo genere e funziona:

CALL SFC20

SRCBLK: P#DB1.DBX12.0 BYTE 10 (sorgente)

DSTBLK: P#DB41.DBX12.0 BYTE 10 (destinazione)

Io vorrei che l' indirizzo sorgente fosse puntato da MW0 che contiene un numero da 1 a 10

Una cosa così : P#(MW0).DBX12.0 BYTE 10

Non so come fare e spero in un aiuto.

Grazie, gfabrizio

Modificato: da gfabrizio
Inserita:

Per tutti.

EUREKA !!!!!

Ho proprio voluto urlarlo. Sono riuscito ad ottenere quello che volevo grazie ad un suggerimento

di PIGROPLC del 28/10/2003 che ho trovato con la funzione cerca.

Il tutto funziona splendidamente.

Ringrazio ancora tutti ed in particolare pigroplc che ha messo a disposizione il suggerimento.

Forum a dir poco eccezionale

Saluto tutti.

Inserita:

Grazie STEU

Spiegazione molto chiara e completa.

Ne farò buon uso.

gfabrizio

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