Vai al contenuto
PLC Forum


Puntatore Db


Messaggi consigliati

David.Stefanutti
Inserito:

Buongiorno.

Devo realizzare la seguente applicazione:

Un FC che uso nel programma deve prendere da esterno il numero di un DB su cui scrivere

OB1:

call fc1:

numero_db:....

FC1:

L ...

T "numero_db".dbd0

..

Come devo impostare i dati??

Grazie


Matteo Montanari
Inserita:

il numero del blocco dati che vuoi aprire devi comunicarlo alla funzione sotto forma di ingresso parametrizzato, oppure come "variabile di programma" a seconda di quello che desisderi fare...

se dichiari come "ingresso" puoi dargli un solo valore, e per cambiarlo devi crearti le istruzioni "fuori" dal blocco che legge il blocco dati. nello stesso modo se utilizzi una "variabile di programma", ma in questo caso non sei "costretto" a parametrizzare il blocco...

un esempio banale:

// Apertura blocco dati
//;
      AUF   #DB_SOURCE
dove "#DB_SOURCE" è dichiarato come "Block_DB" nelle varibili di ingresso. altro esempio:
// Apertura blocco dati
//;
      L     #BloccoTabella
      T     #NumeroDb
//;
// Apertura blocco dati "puntato"
//;
      AUF   DB [#NumeroDb]

dove "#BloccoTabella" è dichiarato come "Int" nelle varibili di ingresso, "#NumeroDb" è dichiarato come "Word" nelle varibili temporanee

Inserita:

Ammesso che la DB che usi sia la 10, scrivi:

L P#DB10.DBX0.0
T MD 100

in MD 100 avrai l'indirizzo assoluto del DB 10. Per poterlo utilizzare devi conoscere la struttura POINTER del registro, guarda nell'. dello STEP7!

Ciao

Sergio

Matteo Montanari
Inserita:

elsabz la tua risposta prevede un numero di DB fisso, mentre David.Stefanutti richiede un sistema per

deve prendere da esterno il numero di un DB su cui scrivere

quindi una cosa totalmente diversa da quella che hai suggerito tu.

ed oltre tutto "conoscere la struttura POINTER del registro" non penso sia una cosa molto "facile da digerire" per un neofila della programmazione come penso sia David.Stefanutti.

Inserita:

Ciao Matteo,

sicuramente se David.Stefanutti è un neofita la soluzione da te indicata è più semplice e senz'altro il mo suggerimento si addice meno a quello che lui deve fare. In ogni modo è comunque fattibile da esterno soltanto un pò più macchinoso, per il motivo che bisogna conoscere la struttura POINTER.

Ciao

Sergio

Matteo Montanari
Inserita:

non ho detto che non è possible fare come hai indicato, è macchinoso (utilizzando le tue parole) e se vuoi anche "inutile" quando si hanno a disposizione altre soluzioni magari più semplici (già ci pensa "mamma" Siemens a complicare la vita, se poi vuoi aiutarla...).

------------------------------------------------------------------------------------

l'utilizzo dei dati "occulti" (come ad esempio la struttura POINTER, o i parametri ANY) viene utile se si vuole creare una condizione non troppo "semplice da interpretare" utilizzando questi dati (ed eventualmente le varibili locali quali l0.0 o lw0) si possono creare programmi (o parte di codice) il cui funzionamento è conosciuto solo dal programmatore stesso, o anche da altre persone ma solamente dopo un accurato DEBUG (neccessità di molto tempo per "decifrare la struttura = molti soldi "spesi")

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