Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

comunicazione seriale

come non detto sono riuscito a risolvere il problema, ma nè ho un' altro.
prendiamo il vi che allego qui di seguito,  configuriamo la casella write buffer come normal display, inserisco questa stringa 800100001D27, nella casella read buffer vedrò comparire la stessa stringa ma senza alcuna aggiunta (per come è fatto il sistema di connessione con l'apparato con il quale devo comunicare, appena questo mi risponde mi restituisce la stringa inviata più un'altra stringa da lui aggiunta) e nell' unsigned byte array vedrò comparire una schifezza.ora cambiamo i parametri di visualizzazione delle caselle write e read buffer in hex display, inserisco la stessa stringa sul write display faccio partire la comunicazione e magicamente il dispositivo mi risponde come dovrebbe cioè restituendomi la stringa da me inviata più appesa quella da lui generata, evviva... Smiley Felice
La mia domanda è: perchè soltanto cambiando la visualizzazione delle caselle da normal display a hex display la comunicazione mi funziona? non è soltantu un modo per visualizzare i dati in maniera diversa? come posso risolvere questo problema?
grazie mille
0 Kudos
Messaggio 11 di 20
2.310Visualizzazioni
Ciao,
    scusa se ti rispondo solo ora....

   Non sono in grado subitissimo di vedere il VI, comun que, volevo sapere com'è che prelevi queste stringhe da un file .ini? Di solito gli ini vengono usati con coppie chiave-valore, che rendono facile il parsing.  Se usi un file ini come semplice file (.txt, per capirci), ci sono le funzioni "scan from string" e "read lines from file" che possono risultare utili... Smiley Felice



graziano



Message Edited by Graziano on 03-18-2008 11:19 AM
0 Kudos
Messaggio 12 di 20
2.308Visualizzazioni


@albertopn wrote:
come non detto sono riuscito a risolvere il problema, ma nè ho un' altro.
prendiamo il vi che allego qui di seguito,  configuriamo la casella write buffer come normal display, inserisco questa stringa 800100001D27, nella casella read buffer vedrò comparire la stessa stringa ma senza alcuna aggiunta (per come è fatto il sistema di connessione con l'apparato con il quale devo comunicare, appena questo mi risponde mi restituisce la stringa inviata più un'altra stringa da lui aggiunta) e nell' unsigned byte array vedrò comparire una schifezza.ora cambiamo i parametri di visualizzazione delle caselle write e read buffer in hex display, inserisco la stessa stringa sul write display faccio partire la comunicazione e magicamente il dispositivo mi risponde come dovrebbe cioè restituendomi la stringa da me inviata più appesa quella da lui generata, evviva... Smiley Felice
La mia domanda è: perchè soltanto cambiando la visualizzazione delle caselle da normal display a hex display la comunicazione mi funziona? non è soltantu un modo per visualizzare i dati in maniera diversa? come posso risolvere questo problema?
grazie mille


Okay, non è che magicamente tutto funziona! Bisogna vedere come funziona l'invio di una stringa!

   La stringa che dai in pasto a "VISA write", se impostata come "normal doisplay", viene inviata byte per byte, ossia ogni songolo "char" (facciamo finta di programmare in C...), viene convertito in Unsigned a 8 bit ed inviato.  quindoi, ad esempio, il carattere "a" , che nella tabella ascii è 97, ovvero x60 in esadecimale.  Sulla porta seriale viene inviato un carattere che viene leto come "0x60".  quindi se scrivi 800100001D27, verrà inviato prima il carattere 0x38 (8 nella tabella ascii), poi il carattere 0x30 (il carattere "0"), fino ad inviare tutti e 12 i caratteri. 

   Probabilmente non è quello che desideri!

   Se imposti Hex display, i caratteri vengono raggruppati a due a due, e quindi viene inviato prima 0x80, poi 0x01, etc....

   Ho risposto mooolto per esteso, pero' dovrebbe essere chiaro! Fammi sapere, e buona fortuna!

graziano
0 Kudos
Messaggio 13 di 20
2.306Visualizzazioni


io la uso molto....
0 Kudos
Messaggio 14 di 20
2.304Visualizzazioni
ok, grazie, ma avendo la questa stringa 800100001D27 esadecimale, formattata cosi come la vedi, come posso fare per darla in pasto al write in modo che lui la spedisca come deve andare spediya? cioè raggruppando le cifre a due a due se ho capito bene
0 Kudos
Messaggio 15 di 20
2.297Visualizzazioni

ciao, ho visto che ti connetti quasi sempre alle 17,30 circa. per comodità vedrò di essere connesso pure io a quell'ora cosi magari ti trovo on-line

0 Kudos
Messaggio 16 di 20
2.289Visualizzazioni


@albertopn wrote:
ok, grazie, ma avendo la questa stringa 800100001D27 esadecimale, formattata cosi come la vedi, come posso fare per darla in pasto al write in modo che lui la spedisca come deve andare spediya? cioè raggruppando le cifre a due a due se ho capito bene


Be, non è che devi raggruppare tu a due a due la stringa, se la stringa che hai è in esadecimale, ogni carattere, nella mappatura ASCII, è rappresentato da due caratteri esadecimali (per avere 256 caratteri nella mappatura), e quindi 0x80 sarà il primo carattere inviato, 0x01 il secondo, etc...

Al volo, mi viene in mente la seguente soluzione: leggi due caratteri alla volta della stringa, li converti in U8, e li invii.  Credo sia questo il comportamento atteso.  Ora rileggo un po' meglio i tuoi post, così mi faccio un'idea...

graziano
PS.: hai ragione, ultimamente posso connettermi solo dopo le 5.30... vabbè, purtroppo non posso fare di meglio Smiley Triste
0 Kudos
Messaggio 17 di 20
2.278Visualizzazioni
Okkay, ci sono,
    credo che funzioni così: la tua stringa di input contiene dei caratteri esadecimali che, raggruppati a due a due, contengono un carattere U8 (unsigned 8 bit), che è quello che poi viene effettivamente inviato dalla VISA write.

   Se non vuoi usare la rappresentazione "hex display" (che funzionava bene, se non ricordo male), puoi usare la tecnica che ti mostro nel VI allegato.  E' un esempio che ho scritto in un minuto, non sarà troppo elegante, è non contiene molti controlli degli errori (e questo dovresti implementarlo poi tu Smiley Felice), tuttavia funziona.  O meglio, funziona come credo dovrebbe nel tuo caso, è ovvio che non testando l'hardware non posso saperlo!



   Mi permetto di fare una piccola osservazione: ti conviene, prima di procedere per tentativi, capire bene cosa si aspetta il tuo strumento, e quale sia la differenza tra normal display ed hex display, altrimenti non riuscirai a capire perché in un caso funziona e nell'altro no.

   Fammi sapere se tutto funziona, io domani purtroppo ci sono solo il mattino, e poi è Pasqua (almeno il Venerdì Santo non lavoro Smiley Felice)

   Spero di essere stato utile!

graziano



Message Edited by Graziano on 03-19-2008 12:00 PM
Scarica tutti
0 Kudos
Messaggio 18 di 20
2.277Visualizzazioni
grazie mille funziona tutto.
0 Kudos
Messaggio 19 di 20
2.224Visualizzazioni
Okay, mi fa piacere! Smiley Felice
0 Kudos
Messaggio 20 di 20
2.215Visualizzazioni