0

我正在使用 PyVisa/GPIB 控制一个测试系统。该系统由两个独立的测试仪(A 和 B)和一台笔记本电脑组成。笔记本电脑被动地侦听来自测试人员 A 的 GPIB 消息,当收到笔记本电脑触发测试人员 B 时。

我正在使用以下代码被动侦听来自测试人员 A 的事件:

rm = visa.ResourceManager()
con = "GPIB0::3"
tester_A = rm.get_instrument(con, timeout=5000)
while True:
    event = None
    try:
        event = tester_A.read_raw()
    except VisaIOError:
        logger.warning("Timeout expired.")
    if event != None:
        # Do something

有没有更好的方法来监听和响应来自测试人员 A 的事件?有没有更好的方法通过 GPIB 控制这个系统?

4

1 回答 1

2

您描述的方法会起作用,但正如您所体验的那样,如果您不太确定仪器何时会响应,则它并不理想。解决方案在于使用 GPIB 的服务请求 (SRQ) 功能。

简而言之,GPIB 连接还提供了各种状态寄存器,可以让您快速检查,例如仪器是否开机,是否发生错误等(漂亮的图片)。该寄存器中的某些位可以设置为在特定事件后打开或关闭,例如当操作完成时。这意味着您告诉仪器执行一系列您怀疑需要一段时间的命令,然后翻转状态寄存器中的位以指示它已完成。

在您的软件中,您可以做很多事情来利用它:

  • 继续循环一个 while 循环,直到状态位指示操作完成 - 这非常粗略,我不推荐它。
  • VISA 具有viWaitOnEvent允许您等待状态位指示操作完成的功能 - 如果您需要停止所有执行直到仪器进行测量,这是一个很好的解决方案。
  • VISA 还允许您创建在状态位翻转时发生的事件 - 这是一个特别好的解决方案,因为它允许您编写事件处理程序来处理事件。
于 2016-01-07T13:24:20.510 回答