crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 15.8.2022, 15:07