侦听 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 还允许您创建一个在状态位翻转时发生的事件 - 这是一个特别好的解决方案,因为它允许您编写一个事件处理程序来处理该事件。
我正在使用 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 还允许您创建一个在状态位翻转时发生的事件 - 这是一个特别好的解决方案,因为它允许您编写一个事件处理程序来处理该事件。