LabVIEW 和 Keithley 2635A - 无法读取数据

LabVIEW and Keithley 2635A - Unable to read data

我正在使用 LabVIEW 及其 VISA 功能来控制 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 Interactive Control 程序中。

正如@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命令末尾添加一个问号?

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

所以基本上答案是简单地添加一个 print 命令:这样我就有了

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

我再也没有错误了。不确定为什么需要这样的命令,仅此而已。谢谢大家花时间回答我。