Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Problema con il blocco To Variant

Un saluto a tutti,
vi spiego il mio problema. Da un PLC della casa B&R riesco ad avere accesso alle variabili che vengono elaborate dal PLC, riesco a prenderle e ad importarle all'interno del mio SW labview.
Per creare la comunicazione tra il PLC e labview ho utilizzato una apposita libreria .NET.
I dati però sono accessibili solo come variabile stringa. E questo non mi è utile perchè vorrei che una variabile di tipo booleano mi venga gestita come tale anche in labview. E così via anche per gli altri tipi di variabile.
La libreria che ho utilizzato mi permette di sapere anche che tipo di dato viene preso dal PLC, quindi in labview, utilizzando una struttura case posso gestire le varie situazioni.
Vi metto uno screen del mio progetto in allegato.

Purtroppo sono totalmente nuovo in labview e sto facendo molta fatica a fare le cose. Per usare il blocco to variant dice che bisogna usare i reference. Io so (credo) cosa sono i reference ma non capisco in questo caso come vadano usati. Ho fatto tutto un pò a casaccio scopiazzando più qua più la dal lavoro di altri colleghi che ci sono passati prima di me.
Qualcuno mi sa aiutare?!

Grazie mille

Un saluto
Giovanni

0 Kudos
Messaggio 1 di 9
6.038Visualizzazioni

Ciao,

da dove arriva la reference "Variable"?

Non si capisce cosa c'entra la libreria .NET. Per accedere alle variabili del PLC da LabVIEW normalmente si usa il DSC Toolkit, che permette di creare delle shared variable collegate alle TAG del PLC.

0 Kudos
Messaggio 2 di 9
6.028Visualizzazioni

Grazie mille per la risposta... speriamo di arrivarci in fondo.

 

In allegato ti metto tutto il vi con la libreria utilizzata.

Per parlare con il PLC ho utilizzato una libreria .NET fornitami dalla casa costruttrice del PLC. Tutto funziona bene. Il problema e il bello viene ora.

Tutte le variabili che io vado a leggere dal plc mi vengono passate come stringhe. Fortunatamente la libreria mi passa anche il tipo di dato della variabile. Quindi io riesco, tramite la variabile DataType a capire di che tipo di variabili si tratta. Poi tramite il case vorrei separare le varie situazioni. Per quanto riguarda variabili booleane è facile. Ma quanto il plc mi passa variabili di tipo intero?!

E quando, ancora peggio, mi passa strutture?!?!?!??!

Mi è stato detto di utilizzare il blocco to variant. Ma non lo so usare e non capisco come fare. Sto andando totalmente a caso, anche perchè sono nuovo in labview... 

Sai come aiutarmi?!

Spero di avere spiegato bene il problema.

Grazie mille e scusami per il disturbo.

Giovanni

0 Kudos
Messaggio 3 di 9
6.024Visualizzazioni

Quando la stringa è un tipo di dato numerico standard puoi usare i blocchi di conversione presenti nella palette "String-->Number/String Conversion". Quando si tratta di un booleano, va benissimo la struttura case che hai usato.

Per quanto riguarda le strutture devi trasformare la stringa in variant e poi usare il blocco "Variant to data", collegando come tipo di dato un cluster appropriato; oppure puoi usare il blocco "Unflatten from String".

0 Kudos
Messaggio 4 di 9
6.021Visualizzazioni

Grazie mille.

Hai esattamente centrato l'obiettivo.

Si, per quanto riguarda il numeric avevo già risolto. Ho usato il blocchettino apposta e buona notte.

Stavo lavorando sulle variant per quanto riguarda la conversione di una struttura. Ma non ci salto fuori. Domani ci riprovo. Magari è facile, il problema è che sto usando labview da pochissimo e quindi faccio parecchia fatica. 

0 Kudos
Messaggio 5 di 9
6.019Visualizzazioni

Il blocco unflatten non fa al caso mio... La via migliore credo sia sicuramente quella di utilizzare il variant. Il problema è che quando lo converto da string a variant, il variant non riconosce la mia stringa come un cluster ovviamente... E quindi il blocco variant to data mi da un errore.

Posto un allegato che fa spiegare meglio il problema.

 

Scarica tutti
0 Kudos
Messaggio 6 di 9
6.003Visualizzazioni

Forse ho risolto... Ho fatto in un altro modo. Anche se non mi convince. Ma vorrei una tua opinione in quanot mi sembri piu esperto.

Utilizzando il blocco spreedsheet string to array, sono riuscito a separare la mia stringa in tante piccole stringhe.

Mi spiego... In ingresso ho la stringa "FALSE;FALSE;0"... Grazie a questo blocco sono riuscito ad ottenere un array di tipo FALSE FALSE 0 che posso gestire separatamente... Il problema ora mi si ricondurrà a far capire al mio sw quando la singola variabile è un bool, un intero, o qualunque altra cosa... Ci devo pensare...

Magari però utilizzando il variant ci si riesce meglio. Questo non lo so... Pensi possa essere corretto anche il mio modo?! o è impossibile cercare di far riconoscere le mie stringhe al software?!

0 Kudos
Messaggio 7 di 9
6.000Visualizzazioni

va bene anche come hai fatto tu. Una volta che hai l'array di stringhe, lo converti in altri tipi di dato condizionando con una struttura case.

0 Kudos
Messaggio 8 di 9
5.992Visualizzazioni

Perfetto...

Ma nel caso che dicevi tu con il variant, come mai non mi funziona?!

Scusa se ti tempesto di quesiti... Ma almeno riesco a capire anche io qualcosa.

Grazie ciao

 

 

0 Kudos
Messaggio 9 di 9
5.987Visualizzazioni