USB3000 & LabView

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Аватара пользователя
dadreamer

Activity Professionalism Tutorials Gold Silver
Bronze Black Автор
professor
professor
Сообщения: 3998
Зарегистрирован: 17 фев 2013, 16:33
Награды: 9
Версия LabVIEW: 2.5 — 2025
Благодарил (а): 14 раз
Поблагодарили: 149 раз

Re: USB3000 & LabView

Сообщение dadreamer »

Mr_Wolf писал(а): 29 сен 2025, 12:10Прошу помочь разобраться с этой ошибкой.
Сходу не могу сказать, в чём там дело. Больше 6 лет прошло как никак, у меня ни исходников под рукой, ни :labview: 32-битного. Код 3e5 (ERROR_IO_PENDING) - это не совсем ошибка, это значение говорит о том, что асинхронная операция (чтение) до сих пор не завершилась. А почему она не завершилась, большой вопрос. В примере ReadData0.vi чтение циклично выполняется до тех пор, пока не будут получены все данные (отсутствие ошибок на выходе ReadData.vi). Может быть, что-то не так с этим примером. :dntknw: Видимо, из-за этого и финализация некорректно выполняется, что приводит к тому, что с устройством нельзя повторно работать. Насколько я помню, я логику работы никак не трогал своих фиксах. Библиотеки без DBG так же криво отрабатывают?
Пока могу предложить следующее:
- убедиться, что в SysWOW64 лежат те же самые библиотеки Rtusbapi.dll и wrRtusbapi.dll, что и рядом с примером; если не так, то заменить;
- попробовать Rtusbapi.dll из папки \RT_USB3000\RtViewer\Plugins;
- проверить пример на Windows 7 (или ниже) и оригинальных DLL;
- проверить пример на :labview: 64-bit и новых DLL;
- не использовать обёртки из Rtusbapi.llb, а вызывать wrRtusbapi.dll напрямую (как сделано в _ Basic LV Test.vi).
В последнем случае придётся повозиться с CLFN и API разработчика, но в итоге уйдёт один слой абстракций.
Mr_Wolf
interested
interested
Сообщения: 1
Зарегистрирован: 29 сен 2025, 11:12
Версия LabVIEW: 2019
Контактная информация:

Re: USB3000 & LabView

Сообщение Mr_Wolf »

Благодарю за ответ!

Да, на сколько я понял из описания и информации из интернета, ошибка 3e5 может появляться штатно и просто говорить о том, что асинхронное чтение ещё не завершено, как Вы и написали.
Тем более, что функция ReadData в примере вызываются ещё до вызова функции StartRead, полагаю, чтобы передать указатель на буфер обмена, но не уверен.
Настоящая проблема в том, что в основном цикле программы проверки на завершение операции чтения (HasRequestCompleted) всегда дают отрицательный результат.

Пробовал менять параметры сбора данных, т.к. по умолчанию в примере они несколько странные (например, указано ChannelsQuantity - 4, а буфер для чтения создаётся только для двух каналов), но не нашёл конфигурацию, которая бы привела к решению проблемы. Также вопросы вызывает значение параметра InputType, отвечающего за выбор аналогового или цифрового ввода, которое неизменно устанавливается =1. Зато если уменьшить размер буфера для чтения (NumberOfWordsToRead), то программа иногда начинает завершаться корректно после нажатия кнопки STOP, т.е. не приходится переподключать модуль. К сожалению, операция чтения всё так же остаётся незавершённой. Меня не покидает ощущение, что я просто задаю неправильные настройки сбора в примере ReadData0.vi.

Библиотеки без DBG работают аналогично.
В папке SysWOW64 лежат те же библиотеки.
С Rtusbapi.dll из папки \RT_USB3000\RtViewer\Plugins не происходит инициализации модуля (InitModule), как и с dll из SDK.
На Windows 7 проверял, но с Вашими dll - попробую с dll из SDK.
Попробую проверить в 64 битной версии.
Если не будет альтернативы, возможно, попробую переписать с использованием CLFN.
Последний раз редактировалось Mr_Wolf 30 сен 2025, 18:27, всего редактировалось 2 раза.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»