crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

44 страниц V  « < 22 23 24 25 26 > »   
Ответить в данную темуНачать новую тему
> QSerialDevice - Библиотека для работы с COM-портами
Гость_Гость_*
сообщение 3.3.2011, 17:13
Сообщение #231





Гости








    


а там надо было попробовать кинуть в папку с проектом qtшные библиотеки..

в общем собрал через Ж на вс2008

для этого пришлось закомментить вот эту фигню

// Get DTR/RTS line states,
// where variable temp return states.
// ::DWORD bytesReturned = 0;
/* if (::DeviceIoControl(this->descriptor,
IOCTL_SERIAL_GET_DTRRTS,
0,
0,
&temp,
sizeof(::DWORD),
&bytesReturned,
0)) {

if (temp & SERIAL_DTR_STATE) status |= AbstractSerial::LineDTR;
if (temp & SERIAL_RTS_STATE) status |= AbstractSerial::LineRTS;
}
*/

и вот эту

//#include <ddk/ntddser.h>

но зато запустилось потом после сборки на вс компиляторе :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 3.3.2011, 20:32
Сообщение #232


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


>>для этого пришлось закомментить вот эту фигню
Теперь не будут определяться статусы линий DTR/RTS.


А чего-нить аналогичного #include <ddk/ntddser.h> разве нету в студийном компиляторе?
Может можно попробовать просто #include <ntddser.h> ?
И есть ли вообще такой заголовочник в студии?

Сообщение отредактировал kuzulis - 3.3.2011, 20:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 3.3.2011, 23:44
Сообщение #233





Гости








    


я не знаю :( я вообще не знаю что это за заголовок! :)

библиотека откомпилированная на qtcreator компилятором вс2008, работает :D

только что проверил!

большое спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
brauni
  опции профиля:
сообщение 29.3.2011, 10:22
Сообщение #234


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 29.3.2011
Пользователь №: 2550

Спасибо сказали: 0 раз(а)




Репутация:   0  


to kuzulis

Собственно говоря вопрос такой:
Мне нужно обеспечить обмен данными с железкой через COM порт. Есть 3 требования:
1. интерфейс должен быть отзывчивым
2. операцию должно быть можно прервать
3. тайм аут на операцию чтения записи, объективно, может быть 10+ секунд

Собственно говоря в чём вопрос: вот я в дочернем потоке запустил операцию чтения и она залипла на 10 секунд. И в течении этих 10 секунд пользователь хочет прервать операцию. Как мне сделать так чтобы дочерний поток отлип? Можно ли просто в главном потоке вызвать функцию close() для объекта AbstractSerial, чтобы в дочернем потоке операция чтения завершилась с ошибкой?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 29.3.2011, 11:44
Сообщение #235


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Перед чтением сначала надо открыть порт в асинхронном режиме (без Unbuffered), убедиться что байты для чтения уже доступны (к примеру, доступно N-ное их количество по readyRead() или bytesavailable()), а потом читать их.
В этом случае чтение будет "мгновенным" и ничего отменять не нужно будет, и, тем, более, не нужно ожидать пока они (байты) появятся.

В общем, класс порта работает также как и класс сокета, вот и пляшите от этого.
Ничего конкретного не подскажу, сами попробуйте.

PS: Если честно, то мне не совсем понятна суть работы с вашей железякой и зачем оно надо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
brauni
  опции профиля:
сообщение 29.3.2011, 12:18
Сообщение #236


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 29.3.2011
Пользователь №: 2550

Спасибо сказали: 0 раз(а)




Репутация:   0  


С TCP/IP сокетами у меня такой фокус прокатывал.

Дело в том, что железка ещё не готова, но программа под неё уже пишется. Так что техническое решение уже нужно а попробовать руками не могу :( иначе бы сам проверил.

Можно считать, что железка занимается аппаратным ускорением долгих операций. Например шифрования и с необкатанным алгоритмом работает долго, отсюда и тайм аут.

Работа происходит так: отправляем железке данные, и ждём ответа от неё сколько ждать заранее не известно. Может и за сотые доли секунды справиться, а может и надолго зависнуть. Каждый раз ожидать 10 секунд(максимальное время работы) в асинхронном режиме не вариант, так как большая доля операций выполняется реально быстро.

Как я планировал написать программу: открываем новый поток в нем общаемся с железкой в небуфферизированном режиме(он понятнее, а дочерний поток можно и блокировать), в случае если пользователь выбирает сброс соединения, выполняем метод close(), дочерний поток завершает свою работу с ошибкой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
d2r
  опции профиля:
сообщение 7.4.2011, 11:23
Сообщение #237


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 24.3.2011
Пользователь №: 2534

Спасибо сказали: 1 раз(а)




Репутация:   0  


А как узнать, подключено ли к порту какое-либо устройство? То есть что бы при подключении устройства к com порту программа как либо сигнализировала об этом

Это необходимо будет по таймеру пытаться считывать данные с порта? Или есть другой способ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 7.4.2011, 19:35
Сообщение #238


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Цитата(d2r @ 7.4.2011, 11:23) *
А как узнать, подключено ли к порту какое-либо устройство?

Никак.

Цитата(d2r @ 7.4.2011, 11:23) *
Это необходимо будет по таймеру пытаться считывать данные с порта? Или есть другой способ?

Открыть порт и приконектиться к сигналу readyRead().
И когда от устройства (если оно есть) придут данные - то прочитать их.
Никаких таймеров не нужно (за исключением, если необходимо просигнализировать о таймауте ожидания от устройства данных).

Как то так.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
d2r
  опции профиля:
сообщение 8.4.2011, 12:28
Сообщение #239


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 24.3.2011
Пользователь №: 2534

Спасибо сказали: 1 раз(а)




Репутация:   0  


Не получается создать список AbstractSerial

QList<AbstractSerial> portList;
AbstractSerial *port = new AbstractSerial(this);
portList.push_back(port);
==========================
ошибка: no matching function for call to 'QList<AbstractSerial>::push_back(AbstractSerial*&)'

а если так:
QList<AbstractSerial> portList;
AbstractSerial port = new AbstractSerial(this);
portList.push_back(port);

то:
ошибка: conversion from 'AbstractSerial*' to non-scalar type 'AbstractSerial' requested

блин, понял что это нахрен не нужно)))) Как удалить сообщение)

можно обойтись и без списка, но все равно интересно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
d2r
  опции профиля:
сообщение 8.4.2011, 13:02
Сообщение #240


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 24.3.2011
Пользователь №: 2534

Спасибо сказали: 1 раз(а)




Репутация:   0  


или как тогда слушать все порты в системе, если известно сколько портов открывать?

ps НЕ известно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

44 страниц V  « < 22 23 24 25 26 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.6.2022, 9:30