VI_ERROR_TMO, когда компьютер выполняет запрос к функциональному генератору

#python #tcp #pyvisa

Вопрос:

Я использую функцию peaktech 4046 : 160 МГц/генератор произвольной формы сигнала. Я разрабатываю pyton и использую pyvisa librairy. Соединение хорошо установлено, и генератор применяет запрос. Но он генерирует следующую ошибку и останавливает программу (она ничего не делает после ошибки).

Вот код :

 import pyvisa
rm = pyvisa.ResourceManager()
inst = rm.open_resource('TCPIP0::130.79.192.123::5025::SOCKET')
print(inst.session)
print(inst.io_protocol)

inst.query("source1:function squ")
 

И вот что у меня есть в моем терминале :

 2
IOProtocol.normal
Traceback (most recent call last):
  File "c:UsersLabo précliniqueDesktopProjetPythonimportation de librairiesForum.py", line 7, in <module>
    inst.query("source1:function squ ")
  File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisaresourcesmessagebased.py", line 644, in query
    return self.read()
  File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisaresourcesmessagebased.py", line 486, in read
    message = self._read_raw().decode(enco)
  File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisaresourcesmessagebased.py", line 442, in _read_raw
    chunk, status = self.visalib.read(self.session, size)
  File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisactwrapperfunctions.py", line 2337, in read
    ret = library.viRead(session, buffer, count, byref(return_count))
  File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisactwrapperhighlevel.py", line 222, in _return_handler
    return self.handle_return_value(session, ret_value)  # type: ignore
  File "C:UsersLabo précliniqueAppDataLocalProgramsPythonPython39libsite-packagespyvisahighlevel.py", line 251, in handle_return_value
    raise errors.VisaIOError(rv)
pyvisa.errors.VisaIOError: VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.

 

Я пытался (безрезультатно) :
-замена СОКЕТА на INSTR
-использование таймаута намного дольше ( первый тайм-аут = 10000)
-добавление конечного термина (попробовал n и r) с : inst.read_termination = ‘n’

Так что я больше не знаю, что делать… Мне нужно дать более одной команды, поэтому программа не должна останавливаться так быстро. Я подозреваю, что мой генератор функций ничего не отправляет обратно, но я не знаю, как убедиться, что это так.

Я хотел бы знать следующее : почему у меня возникает ошибка тайм-аута, если соединение установлено правильно и запрос выполнен на устройстве ? Как правильно выполнить запрос ?

Заранее благодарю вас !!

PS : Я знаю, как поймать ошибку (за исключением попытки), но я бы предпочел получить ответ «Ок», а не «КО».

Ответ №1:

Попробуйте получить список ресурсов с помощью

 rm.list_resources()
 

и проверьте, TCPIP0::130.79.192.123::5025::SOCKET есть ли в нем ваш ресурс.

Затем проверьте стандартный запрос к ресурсу из учебника:

 inst.query("*IDN?")
 

query это краткая форма для операции записи для отправки сообщения, за которой следует чтение. Таким образом, вы можете сделать это в двух действиях, чтобы указать ошибку(ошибка чтения или записи?):

 inst.write('"source1:function squ"')
print(inst.read())
 

Пожалуйста, проверьте название запроса source1:function squ , потому что я не вижу его в документации. Может быть, вам следует использовать "source1:am:interanal:function square (стр. 57 документации) или изменить квадрат — > квадрат?

В соответствии с документацией вы можете попытаться установить бесконечный тайм-аут для вашего запроса,

 del inst.timeout
 

Кроме того, вы можете добавить read_termination / write_termination опцию, чтобы указать, когда вы закончите чтение/запись,

 inst = rm.open_resource('TCPIP0::130.79.192.123::5025::SOCKET', read_termination='r')
 

И последний шанс-изменить параметры query_delay и send_end.

Комментарии:

1. Здравствуйте, спасибо, что ответили. В rm.list_resources не отображаются устройства, которые уже открыты, поэтому я не вижу свой генератор функций.