Vai al contenuto
PLC Forum


Puntatori


Brancaleone_2000

Messaggi consigliati

Brancaleone_2000

Salve a tutti,

inserisco una discussione in questo forum iniziato, visto che verteva già sui puntatori,

per chiedere se qualcuno ha una risposta per me.

Voglio realizzare il richiamo multiplo mediante LOOP di un FB, che all'interno lavora sui dati di un DB ma che

ad ogni suo richiamo agisca su un DB diverso.

All'interno dell'FC ho dichiarato un parametro formale "Blocco_dati" di tipo Block_DB e poi

nel codice inizio con :

// apri blocco dati
AUF #Blocco_dati

Al richiamo dell'FC in questione però mi riesce solamente di puntare un DB fisso:

CALL FC 35
Blocco_dati:=DB35

anzicché poter puntare il DB dinamicamente.

Cioé se scrivo :

CALL FC 35
Blocco_dati:=[DB_Bit_passo_veneziana] (con "DB_Bit_passo_veneziana" variabile tipo Word)

mi dà errore di sintassi. Ho provato a riscrivere in varie maniere ma senza risultato.

So che potrei scavalcare il problema entrando nell'FC in questione con una variabile numerica e poi dinamizzando

il numero di DB all'interno, ma mi chiedo se la sctrada da me scelta all'inizio sia veramente così riduttiva oppure

se invece sto sbagliando qualcosa.

Spero di essermi espresso in modo comprensibile

Grazie

Link al commento
Condividi su altri siti


Per aprire un DB indicato in una variabile ci sono due modi:

1) dichiarare una variabile di tipo "Block_DB" e scrivere: AUF "MiaVarBlockDB"

2) dichiarare una variabile di tipo INT e scrivere AUF DB[MiaVarNrDB]

Considerando che:

1) non è possibile dichiarare una variabile di tipo Block_DB nell'area TEMP

2) il compilatore (non ne conosco proprio il motivo) accetta la scrittura AUF DB[MiaVarNrDB] se la variabile è dichiarata nell'area TEMP ma non se è dichiarata nell'area IN

Si può aggirare il problema dichiarando nelle variabili IN una variabile di tipo INT (es. ID_DB) alla quale si passa il numero del db quando si richiama la funzione.

Si dichiara una variabile di tipo INT (es. NrDB) nell'area TEMP.

E poi basta scrivere:

L ID_DB

T NrDB

AUF DB[NrDB]

Link al commento
Condividi su altri siti

il compilatore (non ne conosco proprio il motivo)

Questa è la risposta dell'aiuto in linea : Tali comandi non sono consentiti per motivi tecnici.
C'è un altro modo, non molto ortodosso forse; se lavori con una sola DB puoi aprirla prima di richiamare l'FC
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...