FAQs from Rohde & Schwarz

Qual é a estrutura do Data Trace do FSE/FSIQ através da interface GPIB?

Pergunta

Como converter o resultado binário de um traço pela interface GPIB usando o comando 'TRAC? TRACE1' ?

Resposta

O formato padrão depois de *RST é o ASCII. O que significa que você obterá 500

valores ASCII, que estão separados por vírgulas, em uma única cadeia de caracteres (aprox. 6 Kbyte)

que é encerrada por uma linha de alimentação (0A hex).

Para usar o formato de ponto flutuante você deve enviar o comando "FORMAT REAL,32"

antes.

O FSE responderá a consulta "TRAC? TRACE1" com uma cadeia de caracteres binária de 500 valores

flutuantes. Cada valor está no formato IEEE 754 com precisão simples de 4 bytes (32 bits)

que é usado em quase todos os compiladores (até mesmo no Visual Basic).

Portanto, nenhuma conversão precisa ser realizada, o que economiza muito tempo de

processamento. Todos os valores são enviados com o byte inferior primeiro, que é a ordem de bytes no

mundo do PC - para estações de trabalho HP favor verificar.

A cadeia de caracteres binária é formatada de acordo com o <Definite Length Arbitrary Block

Response Data> descrita na norma IEEE 488.2.

Este formato deve ser utilizado em conjunto com a informação de comprimento anterior

se a resposta de um instrumento for em formato binário.

A sintaxe de codificação é o sinal # ASCII seguido por um dígito diferente de zero. Esse

digito indica o número de dígitos que seguem e juntos especificam o

comprimento da informação binária. No caso de FSE a informação

de comprimento anterior é "#42000...", o que significa 2000 bytes (500 x 4 bytes) de

informação binária.

O exemplo de programação C abaixo usa a matriz FLOAT de precisão simples para ler

a informação sem nenhuma conversão do barramento IEEE. A informação de comprimento

anterior é simplesmente ignorada a cada deslocamento de 6 bytes da matriz.

/* DEFINE ****************************************************************/

#define MAX_NOF_POINTS 500 // número máx. de pontos por varredura

#define MAX_NOF_DATA_BYTES (MAX_NOF_POINTS * sizeof(float) + 100)

/* VARIÁVEIS **************************************************************/

UINT8 sweep_data[MAX_NOF_DATA_BYTES]; // armazena os dados carregados do FSEx

float *sweep_data_ptr= (float *)sweep_data; // pointer to sweep_data

/* Procedimentos**************************************************************/

int read_sweep_data(void)

/*

ESPECIFICAÇÃO: leia os novos dados de FSEx

Rastreamento de dados em formato binário são 500 valores flutuantes (2000 bytes)

precedidos por 6 bytes

que são usados como especificadores de comprimento (formato IEEE488.2):

#42000...

PARÂMETROS: nenhum

EFEITOS_COLATERAIS: nenhum

VALORES DE RETORNO: 0 se bem sucedido

1 se houve algum erro

****************************************************************************/

{

if (write_to_analyzer("FORMAT REAL32;:TRAC? TRACE1")) // envia informação do traço

1 em formato binário

{

sprintf(error_msg, "IEEE-Error: TRAC? TRACE1");

return 1; // houve erro

}

if (read_from_analyzer(sweep_data, MAX_NOF_DATA_BYTES))

{

sprintf(error_msg, "IEEE-Error: reading sweep data");

return 1; // houve erro

}

if ( (ibcnt < 2006) || (ibcnt > 2007) ) // número de bytes recebidos

{

sprintf(error_msg, "IEEE-Error: leitura de dados de varredura (contagem de bytes incorreta)");

return 1; // houve erro

}

sweep_data_ptr= (float *) &sweep_data[6]; // definir ponteiro para início de dados

return 0;

}