gpib 上的 fse/fsiq 迹线数据结构是什么? -九游官网下载

问题

如何使用“trac? trace1”命令通过 gpib 转换二进制迹线结果?

回答

*rst 之后默认采用 ascii 格式。这就表示,您会在一个字符串(约 6 kbyte)中

得到 500 个以逗号分隔的 ascii 值,

该字符串以换行结束(0a 十六进制)。

要使用浮点格式,您事先要发送“format real,32”

命令。

fse 将响应查询“trac? trace1”,并发送一个包含 500 个浮点的

二进制字符串。每个值都使用 ieee 754 单精度 4 字节(32 位)格式,

几乎所有的编译器(甚至是具有 visual basic 的编译器)都使用这种格式。

因此,无需转换,节省了很多的处理

时间。所有值都是按照 pc 中的字节顺序先从最低字节发送,

请参见 hp 工作站了解详细信息。

二进制字符串的格式依据 ieee 488.2 标准中所述的 <任意块

响应数据的具体长度>。

如果仪器响应使用二进制格式,

则此格式必须与前述的长度信息一起使用。

编码语法是:ascii 符号数 数字(非零)。该

数字表示后接的数字位数,并一起指定了

二进制信息的长度。以 fse 为例,前面的

长度信息是“#42000...”,这表示二进制信息包含 2000 字节(500 x 4 字节)

下面的 c 编程示例使用单精度浮点型数组来读取信息,

无需 ieee 总线的任何转换。通过数组中的 6 字节偏置,

可以轻松跳过前面的长度信息。

/* defines ****************************************************************/

#define max_nof_points 500 // max. number of points per sweep

#define max_nof_data_bytes (max_nof_points * sizeof(float) 100)

/* variables **************************************************************/

uint8 sweep_data[max_nof_data_bytes]; // stores the data loaded from fsex

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

/* procedures **************************************************************/

int read_sweep_data(void)

/*

规范:读取 fsex 的新数据

使用二进制格式的迹线数据是 500 个浮点值(2000 字节),

这些值的前面是作为长度说明符的 6 个字节

(使用 ieee488.2 格式):

#42000...

参数:无

side_effects:无

返回值:如成功,则返回 0

如出现任何错误,则返回 1

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

{

if (write_to_analyzer("format real32;:trac? trace1")) // send data of trace

1 in binary format

{

sprintf(error_msg, "ieee-error: trac? trace1");

return 1; // there was an error

}

if (read_from_analyzer(sweep_data, max_nof_data_bytes))

{

sprintf(error_msg, "ieee-error: reading sweep data");

return 1; // there was an error

}

if ( (ibcnt < 2006) || (ibcnt > 2007) ) // number of received bytes

{

sprintf(error_msg, "ieee-error: reading sweep data (incorrect byte count)");

return 1; // there was an error

}

sweep_data_ptr= (float *) &sweep_data[6]; // set pointer to data start

return 0;

}

网站地图