Question
Comment convertir le résultat de trace binaire issu de l'interface GPIB à l'aide de la commande 'TRAC? TRACE1' ?
Comment convertir le résultat de trace binaire issu de l'interface GPIB à l'aide de la commande 'TRAC? TRACE1' ?
Le format par défaut après *RST est le format ASCII. Cela signifie que vous obtenez 500
valeurs ASCII, séparées par des virgules, dans une chaîne unique (env. 6 koctets)
qui est terminée par un saut de ligne (0A hex).
Pour utiliser le format virgule flottante, vous devez envoyer la commande "FORMAT REAL,32"
au préalable.
Le FSE répond à la requête "TRAC? TRACE1" avec une chaîne binaire de 500
valeurs à virgule flottante. Chaque valeur est au format IEEE 754 simple précision 4 octets (32 bits)
qui est utilisé par la plupart des compilateurs (même avec Visual Basic).
Par conséquent, aucune conversion n'est requise, ce qui permet de considérablement
raccourcir le temps de traitement. Toutes les valeurs sont envoyées avec l'octet de poids faible en premier, ce qui correspond à l'ordre des octets dans le monde
PC - Veuillez vérifier pour les stations de travail HP.
La chaîne binaire est formatée conformément au format <Definite Length Arbitrary Block
Response Data> décrit dans la norme IEEE 488.2.
Ce format doit être utilisé conjointement avec l'information de longueur précédente
si une réponse d'instrument est au format binaire.
La syntaxe d'encodage est le signe ASCII # suivi d'un chiffre différent de zéro.
Ce chiffre indique le nombre de chiffres qui suivent et qui spécifient ensemble la
longueur de l'information binaire. Dans le cas du FSE, l'information
de longueur précédente est "#42000...", ce qui signifie 2 000 octets (500 x 4 octets)
d'informations binaires.
L'exemple de programmation en langage C ci-dessous utilise un tableau FLOAT simple précision pour lire
les informations sans aucune conversion à partir du bus IEEE. L'information de longueur
précédente est simplement ignorée par un décalage de 6 octets dans le tableau.
/* DEFINES ****************************************************************/
#define MAX_NOF_POINTS 500 // nombre max. de points par balayage
#define MAX_NOF_DATA_BYTES (MAX_NOF_POINTS * sizeof(float) + 100)
/* VARIABLES **************************************************************/
UINT8 sweep_data[MAX_NOF_DATA_BYTES]; // enregistre les données chargées depuis le FSEx
float *sweep_data_ptr= (float *)sweep_data; // pointeur vers sweep_data
/* Procedures **************************************************************/
int read_sweep_data(void)
/*
SPECIFICATION : lecture des nouvelles données depuis le FSEx
Les données de trace au format binaire sont constituées de 500 valeurs à virgule flottante (2 000 octets)
précédées de 6 octets
qui sont utilisés comme spécificateur de longueur (format IEEE488.2) :
#42000...
PARAMETERS : aucun
SIDE_EFFECTS : aucun
RETURN VALUES : 0 si ok
1 en présence d'une erreur
****************************************************************************/
{
if (write_to_analyzer("FORMAT REAL32;:TRAC? TRACE1")) // envoi des données de trace
1 au format binaire
{
sprintf(error_msg, "IEEE-Error: TRAC? TRACE1");
return 1; // une erreur est survenue
}
if (read_from_analyzer(sweep_data, MAX_NOF_DATA_BYTES))
{
sprintf(error_msg, "IEEE-Error: reading sweep data");
return 1; // une erreur est survenue
}
if ( (ibcnt < 2006) || (ibcnt > 2007) ) // nombre d'octets reçus
{
sprintf(error_msg, "IEEE-Error: reading sweep data (incorrect byte count)");
return 1; // une erreur est survenue
}
sweep_data_ptr= (float *) &sweep_data[6]; // Disposition du pointeur au début des données
return 0;
}