FAQs from Rohde & Schwarz

Quelle est la structure des données de trace FSE/FSIQ sur l'interface GPIB ?

Question

Comment convertir le résultat de trace binaire issu de l'interface GPIB à l'aide de la commande 'TRAC? TRACE1' ?

Réponse

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;

}