crossplatform.ru

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


  Ответ в QSerialDevice - Библиотека для работы с COM-портами
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
человек Дата 5.12.2014, 0:06
 
Цитата(kuzulis @ 4.12.2014, 18:51) *
Не использовать QSerialDevice, а использовать QtSerialPort.

у меня есть ограницения по использованию Qt 4.6. QtSerialPort использует 4.8 или 5 версию
kuzulis Дата 4.12.2014, 18:51
  Iron Bug,
Цитата
простите, что вмешиваюсь. а что должно тут напрягать? это единственное правильное отображение слэшей в путях, которое понимают все системы (по крайней мере, в С++). обратный слэш - чисто вендозная шняга, поэтому его использование в кроссплатформенном программировании должно быть исключено.


Эмм.. да, пути к у-вам типа "//./" допустимы и в Windows. НО! Внутри виндовых API они преобразуются в "\\\\.\\"
(по крайней мере об этом упоминается маленькими буковками в MSDN).

НО, в WinCE при задании ком-портов необходимо писать COM1: ... COMn:.

Поэтому ну никак нельзя принять "//./" как кросс-платформенное решение. :)

Кстати, в Qt 5.4.1 баг с путями (для QtSerialPort) типа "//./" пофикшен.

человек,
Цитата
Класс называется QSerialDevice, тогда логично использовать с помощью него для символьных устройсв. Но когда используешь open, класса AbstractSerial, реузльтат false. Это из-за того что символьные устройства не используют настройки типа baud и т.д... Это решаемо...
Вопрос в другом, если все же поправить исходники что бы символьное устройство можно было открыть, то что делать с сигналами readyRead() они постоянно валят.... есть данных или нет. Или что нужно учесть в символьном стройстве для этого?


Не использовать QSerialDevice, а использовать QtSerialPort.
человек Дата 4.12.2014, 15:26
  Класс называется QSerialDevice, тогда логично использовать с помощью него для символьных устройсв. Но когда используешь open, класса AbstractSerial, реузльтат false. Это из-за того что символьные устройства не используют настройки типа baud и т.д... Это решаемо...
Вопрос в другом, если все же поправить исходники что бы символьное устройство можно было открыть, то что делать с сигналами readyRead() они постоянно валят.... есть данных или нет. Или что нужно учесть в символьном стройстве для этого?
Гость Дата 4.12.2014, 15:23
  Класс называется QSerialDevice, тогда логично использовать с помощью него для символьных устройсв. Но когда используешь open, класса AbstractSerial, реузльтат false. Это из-за того что символьные устройства не используют настройки типа baud и т.д... Это решаемо...
Вопрос в другом, если все же поправить исходники что бы символьное устройство можно было открыть, то что делать с сигналами readyRead() они постоянно валят.... есть данных или нет. Или что нужно учесть в символьном стройстве для этого?
Iron Bug Дата 30.4.2014, 7:02
 
Цитата(kuzulis @ 29.4.2014, 20:40) *
Это не напрягает?
m_sp=new QSerialPort("//./com5",0);


Может так правильнее тогда:
m_sp=new QSerialPort("\\\\.\\COM5",0);

если вздумал использовать "\\.\" ?? :)

простите, что вмешиваюсь. а что должно тут напрягать? это единственное правильное отображение слэшей в путях, которое понимают все системы (по крайней мере, в С++). обратный слэш - чисто вендозная шняга, поэтому его использование в кроссплатформенном программировании должно быть исключено.
Алексей1153 Дата 29.4.2014, 23:00
  kuzulis,
1) "не не не" - а вот и да , я же пробовал

2) установил, иначе бы не слинковалось и не открылся бы порт вообще. А он открылся

3) "//./com5" - не напрягает, библиотека (да и винда) понимает и так, и так. Опять же - я пробовал и так, и так

4) целый день смотрел примеры, читал и искал, консультировался по скайпу с народом - удивляются, что там ещё могло быть такое )

В общем, под Qt4 не завелось. Обновил библиотеку на Qt5 - всё теперь работает (код не менял даже)

Вот такие загадки :)
kuzulis Дата 29.4.2014, 17:40
  1)

Цитата
должно быть

LIBS += -lqtserialport


не не не .. ни в коем случае.

для Qt4 надо:

Цитата
CONFIG += serialport


скорее всего ты просто не установил QtSerialPort в свою Qt4. В Wiki исчерпывающая инфа.

2)

Цитата
сел читать из реального порта - и не читаются данные. Порт открывается, а сигнал readyRead() не вызывается, да и принудительный вызов readAll() возвращает 0. Хотя данные в порт с прибора точно идут - я темриналом проверял

это что может быть такое ?


Это не напрягает?
m_sp=new QSerialPort("//./com5",0);


Может так правильнее тогда:
m_sp=new QSerialPort("\\\\.\\COM5",0);

если вздумал использовать "\\.\" ?? :) Но это можно опустить, достаточно писать просто COM5, там внутри оно само подставит что надо и куда надо.


ПЫСЫ: Может сначала нужно почитать документацию и посмотреть примеры? Или мы "нахрапом" берем? :)
Алексей1153 Дата 28.4.2014, 21:35
  перешёл на Qt 5 , там QSerialPort уже встроен, прописываем

QT += serialport
Алексей1153 Дата 28.4.2014, 14:39
  какие там другие классы для работы с ком-портом упоминались ? Желательно без наворотов - мне всё равно нужно будет простая вычитка в отдельном потоке
Алексей1153 Дата 28.4.2014, 14:02
  сел читать из реального порта - и не читаются данные. Порт открывается, а сигнал readyRead() не вызывается, да и принудительный вызов readAll() возвращает 0. Хотя данные в порт с прибора точно идут - я темриналом проверял

это что может быть такое ?

CMainWindow::CMainWindow(QWidget *parent) :
    QDialog(parent,Qt::Window),
    ui(new Ui::CMainWindow)
{
    ui->setupUi(this);
...
...
    m_sp=new QSerialPort("//./com5",0);
    m_sp->setBaudRate(QSerialPort::Baud115200);
    m_sp->setDataBits(QSerialPort::Data8);
    m_sp->setParity(QSerialPort::NoParity);
    m_sp->setStopBits(QSerialPort::OneStop);
//    m_sp->setFlowControl(QSerialPort::NoFlowControl);
    if(m_sp->open(m_sp->ReadWrite))
    {
        QSerialPort::SerialPortError e=m_sp->error();
        qDebug()<<"port opened";
        qDebug()<<"error="<<e;
    }

    connect(m_sp,SIGNAL(readyRead()),this,SLOT(readyRead()));
}

void CMainWindow::readyRead()
{
    //сюда не попадаем вообще
    QByteArray d=m_sp->readAll();
    qDebug()<<d;
}


верси Qt 4.8.2 - может, в этом проблема ?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 23:55