Russian Qt Forum
Май 02, 2024, 08:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Serial Port  (Прочитано 5455 раз)
fedotok
Гость
« : Июнь 12, 2014, 22:56 »

На COM порт приходит сообщение "message".
Терминал из примера Simple Terminal у себя выводит
message
message
message

Я хочу сравнивать текст этих сообщений
Но когда беру его, он совсем не message, а другие строки. Вывод в консоль по дебагу на каждое приходящее сообщение выглядит примерно так
"message

"
"messag"
"e

"
"message

"
"m"
"essage

"


Как там все устроено? Что нужно сделать?
« Последнее редактирование: Июнь 12, 2014, 23:04 от fedotok » Записан
Bepec
Гость
« Ответ #1 : Июнь 12, 2014, 23:03 »

А без кода, а без кода, а без кода, нам ничем вам не помочь Улыбающийся
Записан
fedotok
Гость
« Ответ #2 : Июнь 12, 2014, 23:09 »

А без кода, а без кода, а без кода, нам ничем вам не помочь Улыбающийся

да без изменений из примеров https://qt.gitorious.org/qt/qtserialport/source/13cf73fd7ac96fafc6752a5c18467ba7e6ce070e:examples/terminal

только в момент где сообщение на консоль отправляет, добавлен qDebug
Код:
void MainWindow::readData()
{
    QByteArray data = serial->readAll();
    console->putData(data);
    qDebug() << QString(data);
}

собственно и вопрос. Почему на терминал идет нормальное сообщение, а на вывод дебага нет?
« Последнее редактирование: Июнь 12, 2014, 23:21 от fedotok » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Июнь 13, 2014, 00:00 »

Одинаково все идёт.
Просто qDebug каждое новое сообщение выводит с новой строки.
Записан
fedotok
Гость
« Ответ #4 : Июнь 13, 2014, 00:07 »

Одинаково все идёт.
Просто qDebug каждое новое сообщение выводит с новой строки.
неа. истина только изредка  
Код:
QString::compare(QString(data), "message"))== 0
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #5 : Июнь 13, 2014, 00:11 »

Одинаково все идёт.
Просто qDebug каждое новое сообщение выводит с новой строки.
неа. истина только изредка  
Код:
QString::compare(QString(data), "message"))== 0

Эээ. А что это за проверка?
Смысл в том, что сообщения из порта может приходить по частям. Может прийти один символ, два или пять. Вот qDebug их и показывает так, как они приходят.
Записан
fedotok
Гость
« Ответ #6 : Июнь 13, 2014, 00:16 »

Одинаково все идёт.
Просто qDebug каждое новое сообщение выводит с новой строки.
неа. истина только изредка  
Код:
QString::compare(QString(data), "message"))== 0

Эээ. А что это за проверка?
Смысл в том, что сообщения из порта может приходить по частям. Может прийти один символ, два или пять. Вот qDebug их и показывает так, как они приходят.
Вот. Как мне отслеживать что сообщение пришло полностью. Добавлять какой нибудь маркер начала и конца сообщения, или как нибудь проще можно?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #7 : Июнь 13, 2014, 00:21 »

Для текстового протокола, таким маркером часто делают  "\n\r". Перевод строки и возврат каретки.
Складывайте получаемые куски в буфер и проверяйте маркер конца. Как только пришел - все до него сообщение.
Записан
fedotok
Гость
« Ответ #8 : Июнь 13, 2014, 00:25 »

Для текстового протокола, таким маркером часто делают  "\n\r". Перевод строки и возврат каретки.
Складывайте получаемые куски в буфер и проверяйте маркер конца. Как только пришел - все до него сообщение.

а то что консоль терминала выводит сообщения нормально. Каждое с новой строки. Она на что ориентируется?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #9 : Июнь 13, 2014, 07:18 »

а то что консоль терминала выводит сообщения нормально. Каждое с новой строки. Она на что ориентируется?
Как раз из-за этого маркера "\n\r" в консолей все нормально. Новая строка в консоле начинается после перевода строки.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #10 : Июнь 13, 2014, 13:14 »

qDebug() добавляет символы новой строки в конец каждого выводимого контента.
Поэтому:
Код
C++ (Qt)
qDebug() << "a";
qDebug() << "b";
 

выведет:
Цитировать
a
b

а не
Цитировать
ab

чтобы в консоль выводилось также как в терминал нужно использовать std::cout (или Qt-шный эквивалент), тогда оно буит выводится как есть.


Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.079 секунд. Запросов: 23.