监听GPIB事件

2024-04-29 16:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用以下代码被动地侦听来自测试仪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控制这个系统?在


Tags: 方法rm代码noneevent消息系统visa
1条回答
网友
1楼 · 发布于 2024-04-29 16:18:13

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

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

在您的软件中,您可以做许多事情来利用此功能:

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

相关问题 更多 >