2013-12-17 4 views
1

Я использую Qt 5.1, и когда мое приложение (работающее с использованием QextSerialPort в v4.8.4) не удалось связаться, я попробовал пример в ... \ 5.1.1 \ Src \ qtserialport \ examples \ serialport \ Терминал. И это тоже не срабатывает.Пример QtSerialPort не работает

У меня есть простой USB-ключ, который эмулирует COM-порт. Если я использую RealTerm, я могу отправить AT-команды на него и вернуться обратно, просто отлично.

Но пример терминала, который поставляется с Qt, не связывается с ним. Я посмотрел на API snooper, и я получаю неудачный возврат с ошибкой «997: выполняется операция Overlapped I/O» для WaitCommEvent и WriteFile.

Я запускаю его в Windows 7, и я скопировал exe и DLL на компьютер под управлением Windows 8, и он также не смог установить связь (хотя я не выполнял там проверку API).

У кого-нибудь есть идеи, что попробовать? Как просто одно приложение с немодифицированным примером просто выходит из строя? Меня пугает.

+0

Неужели это также не работает на Linux с 5.1.1? Вы пробовали csyncreader/writer из git или 5.2? – lpapp

+0

Кроме того, не могли бы вы разместить простое приложение, которое не сработает для вас? В качестве альтернативы вы можете запустить этот пример, который должен быть построен против 5.1.1: https://qt.gitorious.org/qt/qtserialport/source/d9725b249de5a2a6bb45e4f4e1a1b316d91ed102:examples/serialport/cwritersync/main.cpp. Затем вставьте результат. – lpapp

+0

Я тоже думал попробовать на linux, но у меня пока не было шанса. Я сделаю это, когда вернусь домой вечером, где я запускаю Linux. – David

ответ

0

Терминал пример должен работать Вы можете отслеживать этот вопрос вниз первым получать cwritersync пример работы.

Если это не работает, попробуйте сделать шлейфом между линиями RX и TX, которые, как правило, 2-й и 3-й пальцы вашего 9-контактный последовательный порт.

Получив эту работу, вы можете пойти дальше и попытаться использовать пример cwriterasync, который является шагом ближе к тому, что использует пример терминала.

Как только вы работаете, вы можете понять, что вы сделали бы неправильно с примером терминала. Это может быть ошибка QtSerialPort, но в этом случае нам нужны все ваши данные об аппаратной среде.

Кроме того, убедитесь, что в этом случае, действительно ли пример терминала работает нормально, например, в Unices.

+0

Я нашел проблему !! :-) Мой код работает, когда я добавляю 'QApplication :: processEvents (QEventLoop :: ExcludeUserInputEvents);' перед 'QByteArray myData = testPort.readAll();' then readAll возвращает то, что я ожидаю. Я думаю, что я использую синхронное чтение неправильно, или есть ошибка. – David

+0

@David: интересно; спасибо за продолжение! Я рад, что он работает сейчас. ;-) – lpapp

3

Пожалуйста, попробуйте Qt 5.2 с доступным модулем QtSerialPort (или попытайтесь построить последнюю версию QtSerialPort из git).

У меня есть простой USB донгл ...

Что донгл модель? VID/PID?

... вернуться с ошибкой «997:.. Операция Overlapped I/O находится в процессе ..

это не ошибка

+0

Пример терминала также должен работать с 5.1. – lpapp

+0

И на самом деле это ошибка (ошибка), которую мы в конечном итоге должны исправить. Я думаю, что такие сообщения, как это, должны идти в качестве комментария сначала, поскольку на самом деле это не затрагивает проблему в вопросе. – lpapp

+0

Dongle - это BT-ключ с vid/pid (который правильно распознан образцом приложения) 403/6001 – David

Смежные вопросы