Vai al contenuto
PLC Forum


Utilizzo Di Un Parametro Di Tipo Struct In Un Fb


Messaggi consigliati

Cesare Nicola
Inserito:

Ho provato a dichiarare in un FB un parametro di ingresso di tipo STRUCT; all'interno della struttura ci sono una decina di variabili in formato REAL.

Lo scopo di ciò è solo per migliorare la leggibilità dell'FB nel quale devo utilizzare una decina di quote fornite come parametro di ingresso; mi sembrava più leggibile accedere alle variabili scrivendo #Quote.CentroRulli_FineCinghia, dove "quote" è il nome della struttura e "CentroRulli_FineCinghia" la variabile all'interno della struttura. Altrimenti dovrei avere una variabile, se non uso la struttura, che chiamerei "Quota_CentroRulli_FineCinghia", più lunga. A parte che si può opinare se sia davvero più leggibile, a parte che studiando un nome più "furbo" sopperirei al problema (per modo di dire) della lunghezza, comunque la mia difficoltà è al richiamo dell'FB: cosa devo mettere come parametro attuale della struttura "Quote"? Non riesco a trovare nulla che Step7 digerisca.

Grazie

Cesare


Inserita:

Anzichè come INPUT dichiara la struttura INPUT/OUTPUT.

bigalex :blink:

Cesare Nicola
Inserita:

Fatto, ma non riesco a notare alcuna differenza, non so cosa mettere al richiamo dell'FB.
:toobad:

Cesare

Cesare Nicola
Inserita:

Piccolo aggiornamento.

Come parametro attuale del parametro formale STRUCT, riesco ad assegnare un parametro TEMP del blocco richiamante, anch'esso definito come STRUCT e ovviamente contenente le stesse variabili della STRUCT richiamata.

Nel richiamo del blocco avrò quindi:

Quote := #AuxQuote //Quote è il parametro formale e AuxQuote il parametro attuale definito come variabile TEMP

Per assegnare infine dei valori alle variabili della STRUCT posso fare:

L 100.0 //valore

T #AuxQuote.Var1 // Var1 ìè la variabile al'interno della struttura.

Piuttosto laborioso, non mi piace.

Cesare

Inserita:

Dovresti mettere il puntatore alla struttura che vuoi utilizzare.

bigalex :blink:

Cesare Nicola
Inserita:

Ho provato, ma non accetta alcun parametro attuale in formato P#... ecc .

Ho creato, per esempio, una DByyy con all'interno gli stessi dati presenti nel parametro formale STRUCT e cerco di passare come parametro attuale P#DByyy.DBX0.0 REAL 12 (la STRUCT è lunga 12 DWORD); non lo accetta.

Non sono sicuro se è ciò che suggerivi, Bigalex.

Cesare

Inserita:

Ciao

Forse ho capito male , non riesci a passare il parametro al FB , dove hai dichiarato il tipo Real ...

Se il tipoè REAL dovrai penso passare una MDxxx , Double Word.

Inserita:

Non ho capito bene.

Dunque, all'interno della FB hai dichiarato come ingresso una STRUCT di nome "Quote" con all'interno una sola variabile di nome "CentroRulli_FineCinghia".

Sinceramente non mi pare una grande pensata. Le strutture sono fatte per contenere più variabili. Una struttura con una variabile non ha molto senso.

Per passare il valore coma parametro alla FB dovresti avere come origine una struttura uguale.

Se invece la tua struttura "Quote" contiene più variabili, allora avrebbe un senso.

Come appena detto però per passare i valori devi definire una struttura identica (per esempio "MioDB".Quote") e alla funzione passi in un colpo solo l'intera struttura.

francesco-ottosei
Inserita:

Prova a dicharare un udt strutturata come dici.(10 real le quote)

Poi crei un dato in out di tipo udt che hai appena creato.

Crei una db con un area di tipo udt appena creta.

al richiamo del fb devi associare l area della db con l area udt del fb...

Ho capito cosa vuoi fare o sono fuori strada??

Cesare Nicola
Inserita:

Dunque, all'interno della FB hai dichiarato come ingresso una STRUCT di nome "Quote" con all'interno una sola variabile di nome "CentroRulli_FineCinghia".

Sinceramente non mi pare una grande pensata. Le strutture sono fatte per contenere più variabili

Infatti, ho dodici variabili REAL nella STRUCT; non sono tante, come dicevo non è un gran problema anche se le tengo fuori dalla STRUCT, ma a questo punto volevo capire come funziona.

per passare i valori devi definire una struttura identica (per esempio "MioDB".Quote") e alla funzione passi in un colpo solo l'intera struttura.

E' proprio questo che non riesco a fare: io pensavo che potevo passare come parametro attuale una DB contenente una STRUCT identica a quella definita nell'FB, ma non riesco, non l'accetta. Riesco a farlo, come dicevo, se nell'FB o OB richiamante definisco una struttura nella tabella di dichiarazione delle variabili, come TEMP, ma è inutilmente laboriosa: io pensavo di passare come parametro una DB con la struttura richiesta.

Prova a dicharare un udt strutturata come dici.(10 real le quote)

Poi crei un dato in out di tipo udt che hai appena creato.

Crei una db con un area di tipo udt appena creta.

al richiamo del fb devi associare l area della db con l area udt del fb...

Ho capito cosa vuoi fare o sono fuori strada??

Hai capito benissimo, ma ho provato anche così e non funziona.

Inserita:

E' proprio questo che non riesco a fare: io pensavo che potevo passare come parametro attuale una DB contenente una STRUCT identica a quella definita nell'FB, ma non riesco, non l'accetta.

Appena provato. Funziona.

Spiega nel dettaglio cosa hai fatto e cosa non accetta.

Oppure mandami via mail il progetto.

Cesare Nicola
Inserita:

Ci sono riuscito. Non avevo ben interpretato quando Batta mi diceva:

per passare i valori devi definire una struttura identica (per esempio "MioDB".Quote") e alla funzione passi in un colpo solo l'intera struttura.

Io passavo solo "MioDB", che conteneva sì la STRUCT (e nient'altro), ma non lo specificavo: con "MioDB.Quote", dove "Quote" è la struttura, ovviamente funziona.

Grazie a tutti.

Cesare

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