С Новым годом! Форум программистов, компьютерный форум, киберфорум
QML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 13

QSerialPort как повысить скорость считывания?

01.11.2021, 15:31. Показов 5229. Ответов 11

Студворк — интернет-сервис помощи студентам
Всем привет!

Есть часть программы - её задача только читать данные с COM-порта. Никакого служебного трафика. Сенсор просто шлет мне данные со скоростью 4 кГц (по уверениям разработчика железки, который сидит в соседнем кабинете).
Я считываю данные через QSerialPort в отдельном потоке и вывожу в дебагер с реальным временем, чтобы проверить скорость считывания. 4-мя кГц там и не пахнет.

Вопрос: как добиться чтения со скоростью 4кГц на виндовой машине и возможно ли это в принципе?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//это макет, задаю все настройки жестко
void ThreadSensorRead::onPortConfig()
{
    PortSensor.setPortName("COM3");//заменить на выбор из формы    
    if (PortSensor.open(QIODevice::ReadOnly)) {
        qDebug() << "port otkrit v otdelnom potoke ";
        PortSensor.setBaudRate(115200ul);//115200
        PortSensor.setParity(QSerialPort::NoParity);
        PortSensor.setDataBits(QSerialPort::Data8);
        PortSensor.setStopBits(QSerialPort::OneStop);
        PortSensor.setFlowControl(QSerialPort::NoFlowControl);
        PortSensor.setReadBufferSize(0);//бесконечный буфер
        PortSensor.waitForReadyRead(-1);//без задержки на чтение
        ConfigSensor();
        connect(&PortSensor, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
    }
    else qDebug() << "port v otdelnom potoke ne dostupen";
}
 
void ThreadSensorRead::onReadyRead()
{
    onGetDataFromPort();
    if (writeStart) onWriteToFile();
}
 
//по коннекту попадаю сюда
void ThreadSensorRead::onGetDataFromPort()
{            
        gatArray = PortSensor.readAll();
        qDebug() << time->currentTime();
}

Вывод программы в дебагер (начало кадра \xAA\xAA\):
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00\xC0\xD7z>\x00\xC5""D\xBE@\x E4\x1D\xBE\x00}<=\x00\x1E\xB0\xBCp\x94\x 85?\x00 KFP\xC2\x12""B\x98\xF1\b\xAB"
QTime("15:31:28.019")
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00\x80\x9D{>\x80\xAE""E\xBE@\x A3\x1A\xBE\x00\x19;=\x00H\xB3\xBC\xA0\xA 9\x85?\x00 KFJ\xC3\x12""By\xF1\x1C\xF1"
QTime("15:31:28.105")
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00\xC0\xAA}>@qG\xBE@`\x1A\xBE\ x00X<=\x00\xEE\xB3\xBC\x90\xAC\x85?\x00 KF2\xC7\x12""Bd\x9D""87\xAA\xAA\x03\x00\ f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\xC0\xE7|>\x00\x17""D\xBE\x0 0""1\x19\xBE\x00\xD8;=\x00\xCA\xB1\xBC(s \x85?\x00 KF\x8F\xC2\x12""B\x81I-d\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00@\x1A}>@!F\xBE\x00\xCE\x1C\x BE\x00\xA0;=\x00\xD0\xB2\xBCH\xB8\x85?\x 00 KF\xEA\xB8\x12""B\x8A\x7F\x8D\xCF\xAA\xA A\x03\x00\f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00@\xE3{>\x00'F\xBE@\xEF\x18\x BE\x00\xCC""8=\x00\xA4\xB2\xBCH\x80\x85? \x00 KF\x05\xBF\x12""B\xEE\xD3\x19\x01\xAA\xA A\x03\x00\f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\x80\xBF}>\xC0'C\xBE@\xB3\x1 C\xBE\x00\x95;=\x00\xD8\xB2\xBC\b\x80\x8 5?\x00 KF}\xC5\x12""B\xBC$ov\xAA\xAA\x03\x00\f\ x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\xC0[~>\xC0\xCF""B\xBE\x00`\x1B\xBE\x00""4:=\ x00\x84\xAC\xBC@\x84\x85?\x00 KF\x0B\xBE\x12""B\xC4\xB7\x99\x87\xAA\xA A\x03\x00\f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\xC��Ǟ
QTime("15:31:28.120")
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00\x80\x9E~>\xC0"E\xBE\x80\xF9 \x1A\xBE\x00@9=\x00\xE0\xB2\xBCpv\x85?\x 00 KF\xD3\xC1\x12""B\xD3\x9C""a\xEF"
QTime("15:31:28.136")
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00@D{>@[E\xBE\x80"\x1E\xBE\x00\r<=\x00\b\xB0\xBC \xD8\xA0\x85?\x00 KFb\xBF\x12""B\xF4\x11\xA3\xE5"
QTime("15:31:28.222")
�P�
QTime("15:31:28.238")
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00\xC0\xD2}>\x00\x8F""F\xBE@K\ x1B\xBE\x00"9=\x00\xA8\xAE\xBC\x90\x9B\x 85?\x00 KF\xE4\xB9\x12""B\x9A\xC9\xA4k"
QTime("15:31:28.254")
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00\xC0\x8B{>\xC0+D\xBE\x00\xC7 \x1A\xBE\x00\xEB""7=\x00\xAE\xAE\xBC\xB8 L\x85?\x00 KF\xB9\xBB\x12""B[\x05\xBF\x91"
QTime("15:31:28.339")
"\xAA\xAA\x03\x00\f\x00\x00\x00\x04\x00\ x00\x00 \x00\x00\x00\x00\xA5{>\x80UE\xBE\x00\x87 \x1B\xBE\x00h;=\x00\xE2\xB0\xBC\x88\x9A\ x85?\x00 KF\xA0\xBA\x12""B`Z\x1E&\xAA\xAA\x03\x00 \f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00@l|>@pE\xBE@\x82\x1C\xBE\x00 \x9A""9=\x00""B\xAB\xBC\x10\x87\x85?\x00 KFN\xB8\x12""B\xC4\x8D\xC4\x14\xAA\xAA\x 03\x00\f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\x80\xB2z>@\xE3""B\xBE@\x9E\ x1D\xBE\x00\xCA:=\x00\xE6\xB2\xBC\b\x84\ x85?\x00 KF\x03\xBA\x12""Be\x9D\xA1\xD8\xAA\xAA\x 03\x00\f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\xC0\f}>@\xCF""F\xBE\x00\x01 \x1A\xBE\x00h;=\x00\x02\xAE\xBC\xA0\x82\ x85?\x00 KF\xF0\xB7\x12""B\x19\xCC\xA3S\xAA\xAA\x 03\x00\f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\x00""5}>\xC0""4E\xBE\x00\xA 3\x1C\xBE\x00&==\x00`\xB2\xBC""8\xAE\x85 ?\x00 KF\x03\xBA\x12""B\x1C\xCA.F\xAA\xAA\x03\ x00\f\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\xC0\xB0{>\x00""0E\xBE\x80"" 6\x1C\xBE\x00\x07:=\x00\xD6\xAD\xBC(\x8D \x85?\x00 KFU\xBC\x12""B\x99\x07\x03\b\xAA\xAA\x03 \x00\f\x00\x00\x00\x04\x00\x00\x00 \��љ
QTime("15:31:28.354")
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2021, 15:31
Ответы с готовыми решениями:

Как повысить скорость на 4G
Вот я юзаю 4G модем от мегафон. У него максимальная скорость заявлено 150 мб\сек. Я же видел максимум 66 мб\сек, в основном в среднем в...

Как повысить скорость в Zona?
Здравствуйте, у меня такой вопрос. Как можно повысить скорость скачивание в Zona. Интернет MTC, тарифный план БЕЗЛИМИТИЩЕ. Скорость...

Как повысить скорость индексации?
Доброго времени суток, господа. У меня есть сайтец, которому 1,6 года. Домену - чуть больше года. Ежедневно я добавляю различные статьи...

11
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.11.2021, 16:31
Ну стоит учесть что вывод в qDebug() как бы вполне может и тормозить работу само по себе.
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 13
01.11.2021, 16:38  [ТС]
До такой степени? У меня даже 1 кГц и рядом нету хотя можно попробовать кидать данные по ссылке в буфер в основном потоке и оттуда уже выводить данные или в файл, или в тот же qDebug
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.11.2021, 16:48
Открывайте файл и пишите в файл.

Но для начало бы стоило проверить устройство и убедиться что там действительно 4кГц
0
Эксперт .NET
 Аватар для Rius
13052 / 7618 / 1664
Регистрация: 25.05.2015
Сообщений: 23,162
Записей в блоге: 14
01.11.2021, 17:13
А скорость нынче в кГц измеряют? У нас до сих пор в килободах. Тут вроде как 115200 бод.
Без всяких qDebug число байт за минуту подсчитайте.
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 13
02.11.2021, 09:10  [ТС]
при моем baudrate 115200 и настройках databit, stopbit, скорость 12800 байт/с. Ловлю я по моим подсчётам в среднем 1329 байт/с, что 1/10 от возможного.

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

qDebug() вчера отключал, идет только запись в текстовый файл (выловленные данные + QTime)

Мануалов перекурил, пока сюда обратился - тьма тьмущая. :-(
0
Эксперт .NET
 Аватар для Rius
13052 / 7618 / 1664
Регистрация: 25.05.2015
Сообщений: 23,162
Записей в блоге: 14
02.11.2021, 09:16
Вы осциллографом смотрели? Данные идут сплошным потоком или с перерывами?
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 13
02.11.2021, 09:38  [ТС]
Осциллографом не смотрел, тут у меня 2 "клиента" бьют себя пяткой в грудь, что со сторонней программой SerialPlot все работает (но её функционала не хватает, у меня есть вторая часть проги, которая работает нормально).

Ну благо исходники доступны, посмотрел, как там сделано - отличий от моего подключения сам не нашел. Всё принципиально так же - QSerialport, открывается порт, задаются настройки.... Разве что я работаю дальше с QSerialPort, а они с базовым QIODevice. Переписал, как у них, естественно ничего не поменялось.

Или я что-то не так делаю, или надо да, брать осциллограф в соседнем отделе и доказывать уже, что я не верблюд.

Есть ли в моём коде ошибки, способные повлиять на скорость считывания? Вот, что меня беспокоит.
0
Эксперт .NET
 Аватар для Rius
13052 / 7618 / 1664
Регистрация: 25.05.2015
Сообщений: 23,162
Записей в блоге: 14
02.11.2021, 09:46
Сторонний терминал какой объём данных за время показывает?
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 13
02.11.2021, 10:20  [ТС]
SerialPlot такой информации не имеет, воспользоваться другими не могу, т.к. в прошлый раз при установке сторонних терминалов глюканул QT и пришлось переустанавливать систему.
Вот так и живу, не могу измерить скорость, приходится верить на слово, что сенсор выдает нужную мне информацию с нужной скоростью.
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 13
02.11.2021, 10:24  [ТС]
Вот скрин из SerialPlot, если поможет...
Миниатюры
QSerialPort как повысить скорость считывания?  
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 13
16.11.2021, 10:15  [ТС]
В общем, Вы были правы - прибор, с которого я проводил считывание, выдавал меньше данных в единицу времени, чем мне нужно. Выдали мне параметры и алгоритм его конфигурирования, дело вроде пошло :-)
Из инженера инфу клещами пришлось тянуть, ну и главное было убедиться, что мой код без ошибок, это придало уверенности в глазах при разговоре с разработчиком железки )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2021, 10:15
Помогаю со студенческими работами здесь

Как повысить скорость интернета?
Скажите есть какие-нибудь программы которые обманным путем повышают скорость Интернет сети? Так что бы провайдер или роутер не заподозрил,...

как повысить скорость отработки программы?
Доброго времени суток форумчане, давненько сюда не заходил, зашел т.к. нашла коса на камень и помочь сможете только Вы, о гуру...

Как повысить скорость работы с Excel
Получаю из Excel данные, конвертирую их в массив строк и закрываю. Но мне рили не нравится скорость работы. Возможно ли каким то образом...

Как повысить скорость перерисовки кнопки?
Здраствуйте! У меня возникла проблема со скоростью реакции кнопки на кликанье мышкой и перерисовкой этой кнопки. Вобщем имееться елемент...

Как повысить скорость вычислений? Видеообработка в MATLAB
Здравствуйте! Работаю с обработкой видео в MATLAB и столкнулся с такой проблемой. Есть видео, Full HD, длится примерно 20 секунд, 30 FPS, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru