QSerialDevice - Библиотека для работы с COM-портами |
Здравствуйте, гость ( Вход | Регистрация )
QSerialDevice - Библиотека для работы с COM-портами |
kuzulis |
8.4.2011, 20:35
Сообщение
#241
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
или как тогда слушать все порты в системе, если известно сколько портов открывать? В смысле? Открываем все порты которые нужно и слушаем...
|
|
|
d2r |
9.4.2011, 13:23
Сообщение
#242
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 24.3.2011 Пользователь №: 2534 Спасибо сказали: 1 раз(а) Репутация: 0 |
дада точняк))) тупанул
|
|
|
silver47 |
11.4.2011, 16:17
Сообщение
#243
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
2 kuzulis
Доброго времени суток. Использую Вашу библиотеку для работы с COM. Устройство, к которому подключаюсь, работает на разных скоростях на прием и на отправку. Запрос отправляется на одной скорости, ответ принимается на другой. Столкнулся с такой проблемой: если после отправки запроса, сменить скорость, то до устройства доходит мусор. Пример в двух скринах. Повторить можно на физических COM портах. На виртуальных такого эффекта не наблюдал. Код:
ОС: windows7, windowsXP Qt 4.7.2 В чем может быть проблема? Спасибо. COM1 - программа COM2 снифер на другом конце нульмодемного кабеля Сообщение отредактировал silver47 - 11.4.2011, 16:36 |
|
|
Litkevich Yuriy |
11.4.2011, 16:31
Сообщение
#244
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
silver47 |
11.4.2011, 16:37
Сообщение
#245
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
нужно ждать завершения передачи и только потом менять скорость. Как это сделать в данной библиотеке я не знаю, нужно смотреть руководство Да я так и предполагаю, поэтому выставлял задержки в разных местах. Документацию пролистал, не заметил подобного. В документации нашёл метод waitForBytesWritten(int msec) - который на настоящий момент не реализован и есть сигнал bytesWritten(qint64). Соединил сигнал со слотом, в котором меняю скорость, ситуацию это не изменило . UPD. Подобрал задержку руками на ту сторону 5 байт ушло нормально, прием - каша. То есть уже удаленное устройство начинает писать ответ сразу, еще до того как скорость поменяю. Сообщение отредактировал silver47 - 11.4.2011, 19:03 |
|
|
kuzulis |
11.4.2011, 19:24
Сообщение
#246
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
2 silver47
Цитата В документации нашёл метод waitForBytesWritten(int msec) - который на настоящий момент не реализован Реализован, но мной не опробован. Реализован идентично тому-же методу из сокетов. Цитата есть сигнал bytesWritten(qint64) На этот сигнал полагаться нельзя, т.к. оно может его слать в процессе передачи данных частями. Т.е., к примеру отправили вы 100 байт, а оно может 10 раз по 10 байт этот сигнал емиттить. --- 1. Многое зависит от того с каким флагом открывали девайс: Unbuffered или нет. 2. Попробуйте открывать девайс c флагом Unbuffered и т.п. 3. ИМХО, лучше всего положиться на waitForBytesWritten() (может быть, придется его подправить и т.п.). Я ничего конкретного не подскажу, т.к. не приходилось иметь дело с такими "фирдипёрсовыми" устройствами. Если бы нужно было в Linux работать - то там проще: там есть методы для установки разных скоростей на прием/передачу, а вот под виндой - увы. В любом случае, пробуйте, разбирайтесь, отпишитесь о результатах и исправлениях кода библиотеки. "Свежак" библиотеки тут: http://gitorious.org/qserialdevice/qserial...ce/trees/master ------ Хотя, может быть, даже лучше всё-таки полагаться на сигнал bytesWritten() , только контролируя кол-во переданных байт. т.е. если нужно передать 100 байт, то мы подсчитываем в слоте (приконнекченом на bytesWritten) кол-во переданных от bytesWritten байт (суммируем их) и если сумма равна 100 то меняем скорость. Но всё-равно нужно проверять и экспериментировать. Сообщение отредактировал kuzulis - 11.4.2011, 19:36 |
|
|
nn1317 |
12.4.2011, 9:36
Сообщение
#247
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.4.2011 Пользователь №: 2594 Спасибо сказали: 0 раз(а) Репутация: 0 |
доброе утро)
блин, была у меня версия 0.1 - всем устраивала, только у заказчиков она хронически не собиралась, а у меня самого видимо чуть постарее кутишка и мингв, так что я как то давно собрал и забыл как это сделал. так вот, тем у кого 64битная юбунта как у меня - я просто копировал длл-ку и все работало. а тут попался человек с 32х биткой. все собираю как dll. 1. пробую собрать версию 0.1 - везде одинаковые ошибки:
если в строке с первой ошибкой меняю "QString res(0);" на "QString res;" то он начинает ругаеться на переменную "d", которая через одну строчку от прошлой ошибки - "wasn't declared in this scope" 2. слил новую 0.4. не собираеться из коробки. ошибки - ругаеться на TTYLocker, говорит методы начиная с checkPid(..), деструктора, getShortName(..) и тд - "multiply definition" версии qt и gcc (g++) самые последние из того что в стандартных репозиториях юбунты. подскажите плиз как собрать! |
|
|
kuzulis |
12.4.2011, 10:58
Сообщение
#248
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Не знаю, что у Вас за проблема.
У меня версия из мастера прекрасно собирается на 32х битном Linux Mint Debian Edition, а также 64x битном Arch-е. Может быть, в qserialdeviceenumerator.pri нужно закомментировать: Цитата HEADERS += $$PWD/../qserialdevice/ttylocker.h SOURCES += $$PWD/../qserialdevice/ttylocker.cpp Цитата подскажите плиз как собрать! Берем BuildLibrary.pro и собираем. ЗЫ: По v0.1.0 ничо не подскажу. Сообщение отредактировал kuzulis - 12.4.2011, 10:59 |
|
|
nn1317 |
12.4.2011, 11:27
Сообщение
#249
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.4.2011 Пользователь №: 2594 Спасибо сказали: 0 раз(а) Репутация: 0 |
>Берем BuildLibrary.pro и собираем.
ну я CONFIG который был закомментил, а закомменченый раскомментил, чтобы была dll-версия. >Может быть, в qserialdeviceenumerator.pri нужно закомментировать: попробовал, только в обычном qserialdevice.pri - закомментил и собралось)) спасибо) |
|
|
niklep |
22.5.2011, 17:39
Сообщение
#250
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 11.4.2011 Пользователь №: 2590 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток. Есть проблема при использовании данной библиотеки. Я пишу с помощью write данные в порт. Получаю корректный ответ. Тут же снова пишу в порт. Получаю 2 ответа (сигнал readyRead срабатывает дважды): корректный и пустой. В третий раз получу корректный ответ и 2 пустых. И так далее. Для чтения данных с порта использую readAll(). Вот фрагмент кода:
Вывод:
Также отмечу, что для облегчения отладки хотел использовать bytesAvailable(), но его вывод меня только запутал... |
|
|
Текстовая версия | Сейчас: 28.11.2024, 21:56 |