多个GPIB读操作导致LabVIEW发生EABO错误



主要软件: LabVIEW Development Systems>>LabVIEW Base Development System
主要软件版本: 5.0
主要软件修正版本: N/A
次要软件: N/A

问题:


我有一个GPIB设备,想要通过多字节读取来进行数据读取。例如,我希望从设备中读取50字节信息(总共),我希望能够单次读取10个字节并通过多次读取来实现。

如果我使用交互式控制(IBIC),我能够调用ibrd 10来以每10个字节一包的方式读取这50个字节的数据,没有出现问题。

但当我试着来LabVIEW中做同样的事情时,第一次读回GPIB数据返回10字节数据,但接下来的子序列的读取都发生了EABO错误,这是由读取超时导致的。

为什么多次读取可以在IBIC中正常但是无法在LabVIEW中正常工作?



解答:

这个问题的解答与您的仪器和您在IBIC和LabVIEW中处理多次读取的方式有关。

当你在IBIC中读取仪器信息的时候,只有第一次读取会与设备的地址相关。所有的子序列的读取都会认为仍然和同一个仪器通信,所以接下来的读取不会重新定位地址。只有当您调用其他函数的时候,比如说ibwrt,那么地址会被重新使用。注意您可以通过ibconfig 中的ibcreaddr #配置是否使能重新定位地址,这里#为1是使能,为0则是禁用。

当您在LabVIEW中读取仪器数据的时候,您可能在循环中使用GPIB读取函数。如果仪器的地址是以下描述的方式提供,那么GPIB读取函数会一直通过地址来定位仪器。如果您将GPIB读取函数放置在循环中,那么每次读取都会使用到地址信息,所以LabVIEW每次都会重新定位地址。

这两种方式的区别在于一个会重新定位地址,另一个则不会。当您在寻址一个设备的时候,主要使用的是ibcmd函数来告诉设备是发送还是接收数据。正常情况下,您只需要对设备进行一次寻址就能够确立发送方和接收方,但是有些仪器在每个ibrd和ibwrt都需要这个地址信息。

问题就在这里:当有些设备在重新寻址以后,它们会认为这次通信已经结束,所以在子序列传输时重新寻址就会让它们清空输出缓冲区,那就无法继续读取数据,就会产生超时错误。

解决方案如下:如果您在LabVIEW中第一次GPIB读取时提供了GPIB地址,并在后续子序列读取时让地址字符串输入悬空,直到需要开始另一个传输过程,那么将会迫使LabVIEW避免重新寻址。查看附件中GPIB Readdressing Option 1.vi。

另外一种可选方案是将GPIB初始化函数中“需要重新寻址”输入配置为“False”,这样来禁用重新寻址。这种情况下,您需要在GPIB读取时使用常规寻址。可以查看附件中例程GPIB Readdressing Option 2.vi。



相关链接:


KnowledgeBase 0R0FC772: GPIB Timeout Errors (EABO) after Upgrading to Faster Computers

Developer Zone Example: GPIB Example for LabVIEW



附件:
Address.zip contains LabVIEW 5.0.x files

Address.zip - Address.zip


报告日期: 09/30/1994
最近更新: 10/15/2015
文档编号: 01TA54EO