QSerialDevice - Библиотека для работы с COM-портами |
Здравствуйте, гость ( Вход | Регистрация )
QSerialDevice - Библиотека для работы с COM-портами |
kuzulis |
12.8.2011, 14:16
Сообщение
#271
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата На самом деле я пробовал и без открытия порта - тоже самое происходит. Я serialenumerator и использую для отслеживания что устройство выдернули, (даже с открытым портом) и соответствующий ему Abstractserial класс удаляется с закрытием порта и удалением дескриптора. Ну, если вы говорите, что ошибка в serialenumerator - значит нужно его ковырять. Я не скажу навскидку что там происходит... Может udev шалит, а мож еще что. PS: А на обычном PC с Linux пробовали? |
|
|
sh2ka |
17.8.2011, 12:53
Сообщение
#272
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 23.2.2011 Пользователь №: 2437 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть некоторая проблема при использовании QSerialDevice.
Вот, исходные данные:
шаги по воспроизведению:
ПРОБЛЕМА: прекращается обмен с устройством. Проверил, работает ли в этой ситуации таймер запросов - оказалось, что работает, т.е. запросы идут (проверял с помощью разных терминалок) - на стороне слейва данные приходят и отправляется ответ, но он не приходит мастеру. Думаю, что здесь что-то связано с использованием API-функции WaitForSingleObject, т.е. она не возвращает управление до тех пор, пока не отпустишь окно или не закроешь модальное окно. Однако, это всего лишь мое предположение. Хотелось бы узнать, что на самом деле: я что-то не так делаю или это баг? |
|
|
kuzulis |
17.8.2011, 15:16
Сообщение
#273
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Да, подтверждаю. Есть такое дело.
По ходу блокируется метод: QWinEventNotifier::event(QEvent *e). т.е. не блокируется - а перестает срабатывать при появлении события. Цитата Думаю, что здесь что-то связано с использованием API-функции WaitForSingleObject, т.е. она не возвращает управление до тех пор, пока не отпустишь окно или не закроешь модальное окно. Хз в какой функции проблема - но точно она в QWinEventNotifier. В этом случае я ничего не могу сделать. ИМХО. Создавайте экземпляр класса порта тогда в другом потоке, может поможет. |
|
|
Litkevich Yuriy |
18.8.2011, 8:14
Сообщение
#274
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kuzulis |
18.8.2011, 8:21
Сообщение
#275
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
В виндовозе главный поток сразу блокируется, поэтому коммуникационную часть нужно делать в отдельном окне Эмм... но если б он блокировался - то не срабатывал бы таймер и не излучался бы от него сигнал, по которому порт отправляет данные. Но в данном случае порт их периодично (раз в 1 сек) отправляет, но вот обратно не принимает ответ! Почему тогда срабатывает таймер и обрабатываются евенты, если гл. поток должен блокироваться!? Сообщение отредактировал kuzulis - 18.8.2011, 8:22 |
|
|
Litkevich Yuriy |
18.8.2011, 12:33
Сообщение
#276
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
у меня и таймер не срабатывает, отпущу мыша, и попёрла вся пачка накопившаяся в очереди.
|
|
|
kuzulis |
18.8.2011, 14:34
Сообщение
#277
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
|
|
|
sh2ka |
19.8.2011, 6:56
Сообщение
#278
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 23.2.2011 Пользователь №: 2437 Спасибо сказали: 0 раз(а) Репутация: 0 |
у меня и таймер не срабатывает, отпущу мыша, и попёрла вся пачка накопившаяся в очереди. Странно, у меня таймер подвисает на долю секунды пока рамочка вокруг окна отрисовывается (содержимое окна при перетаскивании не отрисовывается), а потом все нормально. Аналогично с полями ввода (скорее всего там таймер и используется для моргания курсора). Одно понять не могу: это баг виндовс или Qt? Может какие-то особые настройки нужны системе для генерации события от порта (прерывания-то должны возникать хоть как при получении данных в порт)? Я программировал на чистом WinAPI одно время и сам делал модальные циклы - это обычный рекурсивный вызов бесконечного цикла обработки событий, который закрывается при закрытии модального окна. Исходя из этого непонятно, почему блокируется генерация событий от порта. С отдельным потоком не всегда удобно, когда нужно сделать быстро и без проблем примитивную програмку с модальными окнами. |
|
|
kuzulis |
19.8.2011, 9:19
Сообщение
#279
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Одно понять не могу: это баг виндовс или Qt? ИМХО - баг Qt, связанный с обработкой событий (или типа того, не охота копать глубоко). Вот, я прикрепил небольшой тестовый примерчик где по таймеру раз в 1 сек в порт отправляется запрос на чтение регистров (Modbus) и принимается ответ. Так тут такое же поведение. Сообщение отредактировал kuzulis - 19.8.2011, 9:21
Прикрепленные файлы
|
|
|
silver47 |
4.11.2011, 14:41
Сообщение
#280
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Добрый день. Обновился до ветки master от 17 сентября. На windows 7 не закрывает порт с модемом, который подключен по USB. Так и висит с открытым портом, до тех пор пока шнурок из модема не выдернешь. В чем может быть проблема?
спасибо. P.S. под USB модемом подразумеваю zyxel OMNI 56K UNO, а не всякие GPRS/3G. Сообщение отредактировал silver47 - 4.11.2011, 14:41 |
|
|
Текстовая версия | Сейчас: 11.12.2024, 13:58 |