Cesare Nicola Inserito: 3 giugno 2015 Segnala Inserito: 3 giugno 2015 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
bigalex Inserita: 3 giugno 2015 Segnala Inserita: 3 giugno 2015 Anzichè come INPUT dichiara la struttura INPUT/OUTPUT. bigalex
Cesare Nicola Inserita: 3 giugno 2015 Autore Segnala Inserita: 3 giugno 2015 Fatto, ma non riesco a notare alcuna differenza, non so cosa mettere al richiamo dell'FB. Cesare
Cesare Nicola Inserita: 3 giugno 2015 Autore Segnala Inserita: 3 giugno 2015 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
bigalex Inserita: 3 giugno 2015 Segnala Inserita: 3 giugno 2015 Dovresti mettere il puntatore alla struttura che vuoi utilizzare. bigalex
Cesare Nicola Inserita: 3 giugno 2015 Autore Segnala Inserita: 3 giugno 2015 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
Frank681 Inserita: 3 giugno 2015 Segnala Inserita: 3 giugno 2015 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.
batta Inserita: 3 giugno 2015 Segnala Inserita: 3 giugno 2015 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: 3 giugno 2015 Segnala Inserita: 3 giugno 2015 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: 4 giugno 2015 Autore Segnala Inserita: 4 giugno 2015 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.
batta Inserita: 4 giugno 2015 Segnala Inserita: 4 giugno 2015 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: 8 giugno 2015 Autore Segnala Inserita: 8 giugno 2015 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
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