首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听GPIB事件

侦听GPIB事件
EN

Stack Overflow用户
提问于 2015-10-13 10:09:17
回答 1查看 856关注 0票数 0

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

我使用以下代码被动地侦听测试器A中的事件:

代码语言:javascript
复制
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控制这个系统?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-07 13:24:20

你描述的方法会起作用,但正如你所经历的,如果你不太确定仪器什么时候会做出反应,那就不太理想了。解决方案在于使用GPIB的服务请求(SRQ)功能。

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

在您的软件中,您可以做许多事情来利用这一点:

  • 一直循环一个while循环,直到状态位指示操作完成--这是非常粗糙的,我不建议这样做。
  • VISA有一个viWaitOnEvent函数,它允许您等到状态位指示操作完成--如果需要所有执行才停止执行,直到仪器进行测量时,这是一个很好的解决方案。
  • VISA还允许您创建状态位翻转时发生的事件--这是一个特别好的解决方案,因为它允许您编写事件处理程序来处理事件。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33099913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档