04-28-2015 09:41 AM - modificato 04-28-2015 09:47 AM
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
in data 04-29-2015 02:54 AM
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.
in data 04-29-2015 04:07 AM
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
04-29-2015 09:09 AM - modificato 04-29-2015 09:25 AM
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".
in data 04-29-2015 09:14 AM
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.
in data 04-30-2015 12:58 AM
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.
04-30-2015 01:12 AM - modificato 04-30-2015 01:14 AM
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?!
in data 04-30-2015 02:05 AM
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.
in data 04-30-2015 02:53 AM
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