Vai al contenuto
PLC Forum


Accedere Ai Dati Di Un Db Di Istanza In Altro Fb/fc Non Richiamato Dall’Fb Che Genera Il Db Di Istanza


fiorezzz

Messaggi consigliati

Esempio : Call FB1 ,DB1 ..nel DB1 ho una var che si chiama Struttura1.DATO1 Ora per tutto il mio FB1 accedo a quel dato come #Struttura1.DATO1 Come posso fare se un domani creo un FC/FB che non sono richiamati da FB1 ad accedere alla var Struttura1.DATO1 usando la stessa sintassi usata in FB1 E non DB1.Struttura1.DATO1

Link al commento
Condividi su altri siti


Se ho ben capito quello che vuoi fare, la tua struttura1 deve essere definita da una UDT, in questo modo sarà "visibile" da entrambi.

TYPE UDT 1001
VERSION : 0.1
  STRUCT 	
   DATO1 : WORD ;	
   DATO2 : WORD ;	
  END_STRUCT ;	
END_TYPE

FUNCTION_BLOCK FB 1000
TITLE =
VERSION : 0.1
VAR
  STRUTTURA1 : UDT 1001;	
END_VAR
BEGIN
NETWORK
TITLE =
      L     #STRUTTURA1.DATO1; 
      T     #STRUTTURA1.DATO2; 
END_FUNCTION_BLOCK

FUNCTION FC 1000 : VOID
TITLE =
VERSION : 0.1

VAR_IN_OUT
  STRUTTURA1 : UDT 1001;	
END_VAR
BEGIN
NETWORK
TITLE =
      L     #STRUTTURA1.DATO1; 
      T     #STRUTTURA1.DATO2; 

END_FUNCTION

Nell'esempio (che puoi anche compilare) ho creato l' UDT1001 STRUTTURA.

Nelle variabili statiche dell'FB ho dichiarato la variabile STRUTTURA1 di tipo STRUTTURA.

Nell'FC ho dichiarato un parametro IN/OUT di tipo STRUTTURA.

Se noti, il corpo di entrambe è identico.

Se la DB d'istanza di FB1000 è DB1000 (per esempio), per accedere alla stessa variabile dovrai richiamare FC1000 passandogli come parametro DB1000.STRUTTURA1.

Link al commento
Condividi su altri siti

per definizione , i dati di un DB di istanza , cioe' creato su misura per un FB , devono essere utilizzati e visti dall'FB in questione

Se vuoi fare una cosa fatta bene , cioe visualizzarli altrove devi copiarli come out su variabili globali

DB globali valgono ovunque , DB istanza valgono ovunque ma e' norma e buona programmazione non usarli , non scriverli e non leggerli al di fuori del FB dal quale sono stati creati .Spesso sono variabili statiche cioe che mantengono il loro valore al ciclo di scansione successivo a differenza di quelle locali #stat che non mantengono il valore successivo .

I PID di regolazioni o blocchi che puoi fare anche tu come FB usano DB istanza per mantenere i loro dati , i dati dei db di istanza si potrebbero definire in modo improprio come una "cache" del FB che li usa , per cui non e' buona norma usarli al di fuori di esso

Se vuoi usare variabili globali valide ovunque devi creare DB globali e non di istanza

Link al commento
Condividi su altri siti

per cui non e' buona norma usarli al di fuori di esso

Non è buona norma, e si rischia di fare pasticci, ma se fatto con coscienza non ci vedo nulla di male...

In genere non leggo/scrivo in una STAT di una DB d'istanza da un altra FB, ma qualche volta uso le STAT come parametro stesso dell'FB impostato dal pannello HMI, nel senso che l'HMI va a scrivere o leggere direttamente in queste STAT. Di solito lo faccio quando sono tanti, p.es. se ho un FB che memorizza dati in una tabella (un array a una o più dimensioni), questa la faccio per comodità nella DB d'istanza e il pannello HMI va a leggere lì i dati.

Ci sono però delle controindicazioni, prima di queste variabili devo mettere un array dummy in modo da non spostare gli indirizzi in caso di aggiunta di parametri all'FB, altrimenti bisogna ogni volta rimappare le variabili nell'HMI.

Modificato: da JumpMan
Link al commento
Condividi su altri siti

si , tanti fanno cosi ,è sbrigativo e veloce .

Io preferisco appoggiare il tutto su un'area dati del plc per poter controllare le variabili hmi e modificarle se il caso e poi le passo agli FB o FC come parametri In o IN/OUT

Link al commento
Condividi su altri siti

Personalmente appoggio la soluzione di Davide (dan64100) .

Molto spesso per non creare FB (di cui dopo dovrei creare multistanze) creo FC che hanno come variabili IN/OUT una struttura oppure Variabili IN e OUT che riferiscono ad elementi di una struttura .

All'interno della FC le variabili TEMP che lo necessitano possono essere caricate con dati che fanno riferimento alla struttura in IN/OUT alla FC stessa .

Poi il fatto di "maneggiare con cura" i dati è sottointeso .

Concordo con quanto espresso da Walter (walterword) per quanto attiene all'accesso diretto di variabili STAT da esterno all'FB .

Preferisco tenere compartimentata la gestione dei dati .

bigalex :blink:

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