收听GPIB活动

时间:2015-10-13 10:09:17

标签: python visa gpib

我正在使用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控制这个系统?

1 个答案:

答案 0 :(得分:2)

您描述的方法可行,但正如您所经历的那样,如果您不太确定仪器何时会响应,那么这种方法并不理想。解决方案在于使用GPIB的服务请求(SRQ)功能。

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

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

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