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()
сразу после открытия ресурса, чтобы убедиться, что буферы были пусты, потому что при ошибке там могли быть непрочитанные данные. Это решило проблему.