Что может привести к тому, что GPIB не отвечает
У меня есть устройство GPIB, с которым я общаюсь, используя USB-интерфейс National Instruments для GPIB. USB к GPIB прекрасно работает.
Мне интересно, что может привести к тому, что устройство GPIB перестает отвечать на запросы? Если я выключу устройство и включу его снова, он ответит, но когда я запустлю свою программу, он сначала ответит. Затем он отключается, я даже не могу связаться с устройством GPIB, это просто тайм-аут.
Я заполнил буфер?
Некоторая специфика от другого спрашивающего
Я управляю картой GPI National Instruments (не USB) с помощью PyVisa. Прибор на шине GPIB представляет собой контроллер движения Newport ESP300. В течение нескольких часов сеанса (все время отправки команд и чтения с ESP300) ESP300 иногда перестает слушать и перестает отвечать на запросы. Все читает тайм-аут, и даже не *idn?
производит ответ.
Могу ли я что-нибудь сделать, чтобы очистить это состояние? например, управлять линией IFC?
2 ответа
Поскольку вы используете оборудование National Instruments, вы можете запустить NI Trace в фоновом режиме, чтобы проверить все команды, которые отправляются из Программы. В трассировке проверьте последнюю команду и ее параметры, которые отправляет программа, которая вызывает зависание оборудования.
Даже команда *CLS не будет работать, если устройство больше не слушает (что может быть здесь). Единственный способ принудительно сбросить интерфейс устройства независимо от его состояния (прослушивание или нет) - это отправить низкоуровневое сообщение шины gpib "Выбранное устройство очищено" (это реализуется функцией "ibclr" стандартной библиотеки gpib, например, https://www.l-com.com/multimedia/manuals/M_USB-488.PDF стр. 3-7, но я не знаю, что является эквивалентом в Python). Эта команда предназначена для использования всякий раз, когда возникает ошибка GPIB, я всегда делаю это и никогда не было проблем. Чтобы это работало хорошо, вы также должны следить за возвращаемыми значениями всех вызовов gpib - обычно люди не делают этого, поэтому они не знают об ошибках, пока программа не зависнет.
Должна быть четкая команда (что-то вроде "*CLS?"
, но не цитируйте меня об этом). Я всегда запускаю это, когда я впервые подключаюсь к устройству. Затем убедитесь, что у вас хорошее время ожидания. Я нашел для моего устройства около 1 секунды работы. Меньше чем 1 секунда делает это таким образом, я пропускаю чтение после записи. В большинстве случаев тайм-аут вызван тем, что вы просто пропустили его или читаете после команды без возврата. Убедитесь, что вы также проверяете ошибки в очереди ошибок между записями, чтобы удостовериться, что запись действительно правильная, когда она завершена.