2015-10-13 3 views
0

Я контролирую тестовую систему с использованием PyVisa/GPIB. Система состоит из двух отдельных тестеров (A и B) и ноутбуков. Ноутбук пассивно прослушивает сообщения GPIB от тестера А, когда получил ноутбук запускает тестер B.Прослушивание событий 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?

ответ

2

Подход, который вы описываете, будет работать, но, как вы переживаете, не идеален, если вы не совсем уверены, когда инструмент будет отвечать. Решение заключается в использовании функциональности запроса на обслуживание GPIB (SRQ).

Вкратце, соединение GPIB также предоставляет различные регистры состояния, которые позволяют быстро проверить, например, включен ли прибор, произошла ли ошибка и т. Д. (pretty picture). Некоторые биты в этом регистре могут быть установлены так, чтобы они включались или выключались после определенных событий, например, когда операция завершена. Это означает, что вы говорите инструменту выполнить ряд команд, которые, как вы подозреваете, займут некоторое время, и затем переверните бит в регистр состояния, чтобы указать, что это сделано.

Изнутри вашего программного обеспечения вы можете сделать несколько вещей, чтобы использовать это:

  • Держите цикл через время цикла, пока бит состояния указывает, что операция завершена - это очень сырой и я не рекомендовал бы это.
  • VISA имеет функцию viWaitOnEvent, которая позволяет подождать, пока бит состояния не укажет, что операция завершена - хорошее решение, если вам нужно, чтобы все выполнение остановилось до тех пор, пока инструмент не выполнил измерение.
  • VISA также позволяет создать событие, которое происходит, когда бит состояния перевернулся - это особенно приятное решение, поскольку оно позволяет вам написать обработчик событий для обработки события.
Смежные вопросы