in data 01-19-2010 02:29 AM
Buonasera a tutti
ho il seguente problema. Sto studiando il funzionamento dei vi presenti negli esempi di labview 8.2 e in particolare simple data client. vi e il simple data server.vi .
Il mio problema è che dovrei fare dialogare una applicazione per acquisire dati scritta in labview 8.2 con una applicazione scrittta in c++ esterna da me programmata.
Ho l'esigenza di far comunicare le due applicazioni utilizzando il protocollo tcp/ip anche se sono sullo stesso pc locale.
L'applicazione in labview deve acquisire i dati durante un dato tempo (funzione principale di acquisizione del flusso dati durante un esperimento) ma anche poter passare dei dati numerici quando l'applicazione in c++ lo richiede. Nello stesso tempo l'applicazione in labview deve attendere un dato numerico dalla applicazione in c++ per poter poi eseguire delle altre operazioni (ad esempio il controllo della apparecchiatura durante l'esperimento).
Volevo capire se potevo utilizzare per questa interazione i vi di cui sopra e del perchè vi sia nell'esempio simple data client.vi settato come byte to read il valore integer 4.
Nel mio caso devo poter scambiare dati double le cui dimensioni non sono note a priori per cui non so cosa mettere al posto di 4. in alternativa ho trovato dei vi di esempio, il tcp communicator active.vi e quello passive dove compare una stringa /04 utilizzata per correggere il dato che invio o ricevo tramite tcp ma non capisco perchè usa tale stringa e se è associata al valore 4 di cui sopra. A cosa serve? Come devo cambiarla? E' forse meglio usare tali vi rispetto ai primi citati?
grazie
in data 01-19-2010 05:40 AM
Ciao dlav, se esamini bene gli esempi puoi vedere che Simple Data Server spedisce un array di double di dimensione variabile (convertito a string, perchè i vi TCP accettano in input solamente valori stringa). P.es. un array di 3 double avrebbe dimensione 3 x 8 = 24 bytes.
Per sincronizzarsi con il Client, il Server spedisce quindi prima la lunghezza della stringa in formato I32 (4 bytes, da cui il 4 che hai notato), poi l'array stesso.
Il Client riceve il numero di bytes che deve aspettarsi, convertendo la stringa di 4 bytes in un I32, poi si regola di conseguenza.
In prima approssimazione, un meccanismo di questo genere può andare bene anche per te.
In realta, questo funziona bene finchè tutti i bytes vengono ricevuti: se ne perdi uno si scatena il finimondo! (comunque se entrambi i programmi stanno sulla stessa macchina, la probabilità di perdita è molto piccola). Per rendere più robusta l'applicazione, si possono fare diverse cose: aggiungere un byte di start e uno di stop di valore fisso, aggiungere in fondo dei bytes di controllo (una checksum), ecc.