QSerialDevice - Библиотека для работы с COM-портами |
Здравствуйте, гость ( Вход | Регистрация )
QSerialDevice - Библиотека для работы с COM-портами |
Гость_Гость_* |
29.1.2012, 0:33
Сообщение
#311
|
Гости |
Прошу не бить ногами, т.к. с Qt и С++ на вы.
Пишу прогу для связи компа с девайсом (светодиодный дисплей). Решил пойти по путе наименьшего сопротивления, потому что новичек и в качестве примера использовал консольные reader и writer. реализовывается протокол по принципу запрос-ответ. Данные отправляются успешно, а вот считываются совсем наоборот, т.е. не считываются: либо таймаут, либо массив нулевой длины. Шишку набил уже большую, а вот где грабли не пойму. QT 4.6.3 QSerialDevice 0.4.1
|
|
|
kuzulis |
29.1.2012, 11:38
Сообщение
#312
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Прошу не бить ногами, т.к. с Qt и С++ на вы. Пишу прогу для связи компа с девайсом (светодиодный дисплей). Решил пойти по путе наименьшего сопротивления, потому что новичек и в качестве примера использовал консольные reader и writer. реализовывается протокол по принципу запрос-ответ. Данные отправляются успешно, а вот считываются совсем наоборот, т.е. не считываются: либо таймаут, либо массив нулевой длины. Шишку набил уже большую, а вот где грабли не пойму. QT 4.6.3 QSerialDevice 0.4.1 1. Используй QSerialDevice 2.0 http://gitorious.org/qserialdevice/qserial...ive-tarball/2.0 2. Вместо while(1) используй сигналы/слоты. Для своих целей можешь даже взять сразу пример /tests/guiapp и в нем поотсылать попринимать команды. А потом, если получится - просто изменишь его или по аналогии сделаешь свое приложение. 3. Поточнее узнай, нужно ли в конце команды отправлять символ '\r' (типа эквивалентно нажатию Enter в терминале). 4. Всегда проверяй возвращаемые значения вызовов open(), setXXX(). 5. Не используй AbstractSerial::Unbuffered |
|
|
kuzulis |
8.2.2012, 21:06
Сообщение
#313
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Наконец то Nokia клонировала репозиторий QSerialDevice 2.0 в Gerrit!!!
Ура, товарищи! За это не грех хряпнуть! |
|
|
Алексей1153 |
9.2.2012, 7:54
Сообщение
#314
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а что это означает ? )
|
|
|
kuzulis |
9.2.2012, 10:10
Сообщение
#315
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
То, что оно теперь будет как аддон к Qt,
также то, что принадлежит Нокии теперь (вроде) и то, что они будут помогать в развитии. Вот тут : # git clone ssh://codereview.qt-project.org:29418/playground/qtserialport.git будет вестись первоначальная разработка и потом, как я понял, оно будет отсюда коммитится на Gitorious для публичного доступа. Т.е. доступ к codereview.qt-project.org имеют только те участники, которые зарегистрировались в Gerrit и приняли CLA они могут коммитить и вносить изменения в проекты. т.е. теперь на Gitorious MR будут отключены - а вся разработка через Gerrit ведется. Я сам еще не въехал в весь это процесс, так что пока это все что я понял Вот тут еще можно почитать. Сообщение отредактировал kuzulis - 9.2.2012, 10:24 |
|
|
Fitz |
9.2.2012, 19:02
Сообщение
#316
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 22.11.2010 Пользователь №: 2207 Спасибо сказали: 0 раз(а) Репутация: 0 |
WinXP
Qt 4.8.0 QSerialDevice 2.0 Пытаюсь собрать dll статической сборкой Qt, выдает больше сотни ошибок следующего вида:
C дефолтным Qt'ом все собирается нормально. Так же необъяснимая проблема с приложением в котором использую библиотеку. Используя дефолтный Qt все собирается и работает без проблем. Собираю приложение статически (при чем независимо подсовываю ли я ему нестатически собранный SerialPort.dll, или же статически собранный на Qt4.7) - работает только отправка в порт, но данные с порта никакие не принимаются. |
|
|
kuzulis |
9.2.2012, 19:57
Сообщение
#317
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
WinXP Qt 4.8.0 QSerialDevice 2.0 Пытаюсь собрать dll статической сборкой Qt, выдает больше сотни ошибок следующего вида:
C дефолтным Qt'ом все собирается нормально. Так же необъяснимая проблема с приложением в котором использую библиотеку. Используя дефолтный Qt все собирается и работает без проблем. Собираю приложение статически (при чем независимо подсовываю ли я ему нестатически собранный SerialPort.dll, или же статически собранный на Qt4.7) - работает только отправка в порт, но данные с порта никакие не принимаются. Разбирайтесь сами со статической сборкой. Я ради этого не буду у себя собирать Qt статически. Используйте дебагер. |
|
|
silver47 |
16.2.2012, 7:59
Сообщение
#318
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
kuzulis,
Добрый день. Перешел на QSerialDevice 2.0. Не могу найти аналог setTotalReadConstantTimeout. Как мне теперь можно подождать фиксированное время, перед чтением? Реализовать самому? 5. Не используй AbstractSerial::Unbuffered Почему Вы советуете его не использовать? Спасибо. |
|
|
kuzulis |
16.2.2012, 10:05
Сообщение
#319
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Не могу найти аналог setTotalReadConstantTimeout. Как мне теперь можно подождать фиксированное время, перед чтением? Реализовать самому? Теперь нет ничего, что связано с таймаутами, т.к. их использование фризит EventLoop при чтении. Теперь поведение такое же как и в сокетах, т.е. данные рассматриваются просто как непрерывный поток, и где там у них начало, где конец - это все решает пользователь. Примерное решение с ожиданиями см. тут: http://forum.vingrad.ru/forum/topic-344976.html# Почему Вы советуете его не использовать? Потому, что в этом режиме класс сам автоматически буферизирует входящие даные, т.е. сам вычитывает из UART и кладет в свой кольцевой внутренний буфер. А вызов read(), readAll() читает эти данные, которые уже готовы, из внутренего буфера. Т.е. этот подход увеличивает производительность и быстродествие (т.е. также сокеты также работают) |
|
|
Гость_Гость_* |
7.4.2012, 14:24
Сообщение
#320
|
Гости |
kuzulis, а метод waitForReadyRead(int msec) фризит EventLoop? там ведь внутри select с таймаутом.
|
|
|
Текстовая версия | Сейчас: 12.11.2024, 23:13 |