fiorezzz Inserito: 16 ottobre 2014 Segnala Inserito: 16 ottobre 2014 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
dan64100 Inserita: 16 ottobre 2014 Segnala Inserita: 16 ottobre 2014 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.
walterword Inserita: 20 ottobre 2014 Segnala Inserita: 20 ottobre 2014 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
JumpMan Inserita: 21 ottobre 2014 Segnala Inserita: 21 ottobre 2014 (modificato) 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: 21 ottobre 2014 da JumpMan
walterword Inserita: 22 ottobre 2014 Segnala Inserita: 22 ottobre 2014 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
bigalex Inserita: 22 ottobre 2014 Segnala Inserita: 22 ottobre 2014 (modificato) 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 Modificato: 22 ottobre 2014 da bigalex
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora