PyVISA SerialInstrument требует жесткого сброса для подключения после сбоя

Я работаю с генератором сигналов Keysight и pyVisa, и я замечаю, что если мой код не завершается успешно и заканчивается, мне нужно выполнить полную перезагрузку устройства, чтобы повторить попытку моего кода.

Я попытался перезагрузить устройство под __del__ метод, так что устройство находится в известном состоянии, но это не похоже на работу. Я также пытался использовать pyvisa.resources.SerialInstrument.clear(), У кого-нибудь еще была такая проблема и как вы ее решили?

Хост-компьютер работает под управлением Windows 7. Версия PyVISA - 1.8. После сбоя программы, отменив скрипт python, я попытаюсь отправить простой *IDN? Команда SCPI для устройства, и я получаю ошибку:

pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.

Если я пытаюсь вызвать pyvisa.resources.SerialInstrument.clear() на устройстве, я получаю ошибку pyvisa.errors.VisaIOError: VI_ERROR_INV_SETUP (-1073807302): Unable to start operation because setup is invalid (usually due to attributes being set to an inconsistent state),

1 ответ

Проблема заключалась в том, что устройство все еще подключалось к другому экземпляру. Причиной этого было то, что при запуске visa.ResourceManager(). List_resources() устройство выводилось дважды, один раз как устройство USB, а также как ASRL.

Решение было позвонить visa.ResourceManager().list_resources(query='USB?*') чтобы убедиться, что инструмент указан только один раз в моих результатах. (С другой стороны, я мог бы отключить USB или GPIB в настройках устройства.) Затем позвоните device.clear() сразу после открытия ресурса, чтобы убедиться, что буферы были пусты, потому что при ошибке там могли быть непрочитанные данные. Это решило проблему.

Другие вопросы по тегам