08-06-2015 10:44 AM
Bonjour à tous,
Je souhaite utiliser CVI pour développer un driver d'instrument (controleur moteur), en com TCPIP à l'aide des fonctions VISA.
Les ordres à envoyer résident en une suite d'octets au format Hexadécimal.
Par exemple, l'envoi de la trame suivante me permet de lire la position actuelle du moteur : (0x) 00 04 00 00 54 04
viWrite (viSession, "\x00\x04\x00\x00\x54\x04");
Puis je fais le Read, j'attends la trame de 10 octets suivante : (0x) 00 08 00 00 54 04 90 5F 01
viRead (viSession, 10, viBuf (Buf), &byteCnt)
Donc la chaine Buf est vide, car le premier caractère de la trame.............. est un '\0'
Quand je vais consulter les données en mémoire, la totalité de la trame est bien présente, mais je ne sais pas comment l'exploiter.
Quelle est la commande magique pour récupérer toute ma trame Hexa ?
J'ai déjà essayé pas mal de choses, mais sans succès (du ViScanf par exemple, mais je ne suis pas expert en Format Word
)
Help me please !! là, je sèche
Arnaud
08-07-2015 12:08 AM
Sorry, my French is not good enough to write in French.
Any function that follows the convention that \0 is end of string ( like ViScanf() ) isn't suitable.
To access single bytes you could use the array notation (i.e. Buf[0]).
To extract a number from your data you could use memcpy(). I.e. if your documentation says: there is a 32 bit ( 4 bytes) signed int number beginning at the third byte, something like
int i;
....
memcpy(&i,&Buf[2], 4)
could do the trick
08-07-2015 12:20 AM
Sorry, my French is not good enough to reply in French.
Any function that follows the convention that \0 is end of string ( like ViScanf() ) isn't suitable.
To access single bytes you could use the array notation (i.e. Buf[0]).
To extract a number from your data you could use memcpy(). I.e. if your documentation says: there is a 32 bit ( 4 bytes) signed int number beginning at the third byte, something like
int i;
....
memcpy(&i,&Buf[2], 4)
could do the trick
08-07-2015 02:52 AM
Thanks for your answer mkossmann, this is it !!!
I get each byte in an int array with memcpy.
So I have to order it now cause LSB et MSB are inverted, 90 5F 01 is in fact 01 5F 90 (=90000 decimal value, what I'm interested for).
Many Thanks (and sorry for the french)