2017-03-06 158 views
0

我使用LabVIEW及其VISA功能来控制吉时利2635A源表。每当我尝试识别设备时,无论是在阅读和写作方面,它都可以正常工作。LabVIEW和Keithley 2635A - 无法读取数据

viWRITE(*IDN?) /* VISA subVI to send the command to the machine */ 
viREAD /* VISA subVI to read output */ 

但是,只要我设置电压(或电流),它就这样做了。然后,我将命令发送到执行测量,但我无法读取数据,并显示错误

VISA: (Hex 0xBFFF0015) Timeout expired before operation completed. 

在那之后,我无法读取*IDN?地输出了。

源电表通过National Instrument GPIB-USB-HS适配器连接到PC。

编辑:我忘了补充,这也发生在VISA交互式控制程序中。

+1

提示:发送命令或查询以查看是否有错误时,一定要留意前面板。此外,你已经说过“设置”,然后“读”。“set”(命令)不一定会导致响应。检查文档。 –

回答

2

好的,显然文件不是很清楚。当然,(其中X是必需的参数)命令的作用是将测量结果写入缓冲区。然而,为了读取该缓冲区,简单的viREAD[]是不够的。

所以基本上答案是简单地增加一个print命令:这种方式我有

viWRITE[print(smua.measure.X())]; 
viREAD[] 

而且我没有错误了。不知道为什么需要这样的命令,但就是这样。谢谢大家的时间回答我。

+1

SMU确实有测量缓冲区,但我不确定'smua.measure.X()'会导致写入它。但关键在于它不会写入输出(通信)缓冲区,因此viREAD无法获取并超时。 BTW-语言是Lua,'print'是一个标准的Lua函数,它们已经连线写入输出缓冲区。 –

+0

@TomBlodget非常感谢您的澄清。我认为'smua.measure.X()'实际上写在一个缓冲区中,至少文档说明了这一点。 – Enzo

+0

感谢您发布您的答案,一旦你找出答案!你是否可以编辑答案以包含文档的链接? – SNygard

0

正如@Tom Blodget在评论中提到的那样,机器在设置电压后可能没有任何响应。 *IDN?字符串是命令和查询。也就是说,你会的命令*IDN?的结果。一些命令没有任何读取响应。这是一个快速测试,看看你是否应该从仪器中读数。下面的代码是在Python中;我编写了GPIB命令来设置电压。当你希望得到来自仪器的响应

sm = SourceMonitor() 
# Prints out IDN  
sm.query('*IDN?') 

# Prints out current voltage (change this to your actual command) 
sm.query('SOUR:VOLT?') 

# Set a new voltage 
sm.write('SOUR:VOLT 1V') 

# Read the new voltage 
sm.query('SOUR:VOLT?') 

注意这个问题,标志着GPIB命令和query使用。仪器不会给出write命令的响应。查询是write(...)read(...)的组合。如果您使用的是LabView,则可能需要单独写入和读取。

如果需要机器收到您的指示,并作用于它验证,大多数仪器具有以下共同命令:

  • *OPC?查询,看看是否在操作完成
  • SYST:ERR?查询看是否有错误产生
  • 给GPIB命令添加一个问号?用于设置电压
+0

我应该更清楚,对不起。我的意思是,在发送命令设置电压后,我发送另一个“写入”命令来请求测量,然后使用“读取”来检索该测量。 至于'* IDN?'命令,当我发送给机器时,我没有任何反馈,我仍然必须发送一个'read'信号。 我也会在帖子中编辑它。 – Enzo

+0

我看到......如果您的数据集很大,从仪器读取可能需要很长时间。对于我的一些GPIB连接,当读取测试结果时,我需要指定更长的超时值。你可以发布一个最小的命令集(带电压和'* IDN?'),给你超时错误吗? – SNygard

+0

这组命令实际上是非常基本的。分别调用'viWRITE'和'viREAD',将VISA子VI写入并读取,并将字符串输入放入方括号中,我的VI是'viWRITE [* IDN?]; VIREAD []; viWRITE [smua.output.levelv = 0.1]; viWRITE [smua.measure.v()]; VIREAD []'。超时发生在最后一次读取命令。读命令都被送入一个足够大的缓冲区 – Enzo