侦听 GPIB 事件

Listening for GPIB events

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

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

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

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

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