Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35

Терминал не работает, но собирается без ошибок

16.10.2019, 22:54. Показов 3933. Ответов 41

Студворк — интернет-сервис помощи студентам
Всем привет!
Пришлось переустановить Qt.

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

Приёмная часть вообще молчит и ничего не принимает.

Установлен минимальный пакет Qt

Проект скинул на github

Помогите разобраться, что не так стало.
Миниатюры
Терминал не работает, но собирается без ошибок  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2019, 22:54
Ответы с готовыми решениями:

восстановление без ошибок, пол сайта не работает
уже 3 день палю нервы с этой недо системой. проблема в следующем. 1 делаю бекап на сайте (удаленный хост) 2 в денвере...

Генеологическое древо. Программа без ошибок но работает не правильно
using System; using System.Collections.Generic; using System.Text; class Person { private string p; private int...

Без использования typedef все работает. При добавлении typedef — более 100 ошибок
Есть программа, с описанием структуры и функций, работающими с ней. Без использования typedef все работает. При добавлении typedef - более...

41
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
20.10.2019, 17:43
Студворк — интернет-сервис помощи студентам
mcmega, ну, дело ясное, что дело тёмное. Завтра в офисе буду, будет под рукой компорт, я попробую твой проект. Напомнишь, а то опять забуду
0
42 / 40 / 7
Регистрация: 21.05.2012
Сообщений: 199
20.10.2019, 22:09
А погуглить или посмотреть в баг-трекере не судьба: https://bugreports.qt.io/browse/QTBUG-78086 ?
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
22.10.2019, 06:23  [ТС]
Алексей1153, Привет!
Глянь мою прогу у себя на железе (напоминаю).
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,350
22.10.2019, 06:49
C++ (Qt)
1
2
QByteArray output="1234";
serial_1->write(output);
Добавь к этому коду

C++ (Qt)
1
2
static int сx = 0;
ui->label->setNum(сx++);
И при каждом вызове функции счётчик в label будет расти - увидишь, сколько раз вызывается функция.
0
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
22.10.2019, 08:29
mcmega, в обсчем,

ошибка №1: в handleError закрываешь порт, не взирая на тип ошибки. А, например, тот же waitForReadyRead(10) по истечению таймаута выдаст ошибку TimeoutError. Но это логическая ошибка, а не железная, при этом порт закрывать вовсе не надо.

Но виновато не это.

Ошибка №2: а точнее - странность поведения класса QSerialPort.
ReadAll - метод не работает.

Работает вот такая пара (у меня тоже так читается, я в своё время разбирался, но забыл про это):
C++
1
2
    auto to_read=serial_1->bytesAvailable();
    QByteArray data = serial_1->read(to_read);
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.10.2019, 10:34
Цитата Сообщение от Алексей1153 Посмотреть сообщение
странность поведения класса QSerialPort.
ReadAll - метод не работает.
Он работает, только перед этим нужно вызвать блокирующий метод waiForReadyRead().
Вот такая конструкция вполне отрабатывает как нужно (она работает в отдельном потоке, так что зависания GUI нет).
Тут идет ожидание в цикле момента, когда в приемном буфере будет нужное количество данных и после этого чтение (особенность протокола такая, иначе никак).
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
IODevice::IOResult IODevice::getResponse(const QByteArray* pRequest,QByteArray *pResponse, int responseSize)
{
    int tryCounter=0;
    while(tryCounter!=3){
        pPort->clear();
        pPort->write(*pRequest, pRequest->size());
        pPort->flush();
 
        int readCounter=0;
        while(readCounter != 50){
            pPort->waitForReadyRead(10);
            pResponse->append(pPort->readAll());
            if(pResponse->size()==responseSize){
                return IODevice::RESPONSE_OK;
            }
            QThread::msleep(10);
            readCounter++;
        }
        tryCounter++;
    }
    return IODevice::RESPONSE_FAIL;
}
0
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
22.10.2019, 10:40
insite2012, я вызывал - нифига не читается. Причём, никаких ошибок тоже нет, кроме таймаута. А отправка вроде и без flush нормально отрабатывает
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.10.2019, 10:45
Цитата Сообщение от Алексей1153 Посмотреть сообщение
я вызывал - нифига не читается.
Возможно, у ТС проблема в чем-то еще.
Тот кусок кода выше взят из полностью работающего проекта, и там с его работой нет никаких проблем.
Если будет время, посмотрю его проект, если ТС его покажет.
0
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
22.10.2019, 10:49
insite2012, я его проект опробовал. Никаких особенностей не заметил )
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.10.2019, 10:51
Цитата Сообщение от Алексей1153 Посмотреть сообщение
я его проект опробовал. Никаких особенностей не заметил )
Если все работает, то пусть ищет проблему на своей стороне.
0
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
22.10.2019, 11:03
insite2012, так я описал проблему - не работает ReadAll (в моём проекте, многолетней давности, тоже). При этом read чётко отрабатывает. Соответственно, перед ним полезно вызвать bytesAvailable

Добавлено через 44 секунды
кстати, есть мысля. Щас уточню

Добавлено через 9 минут
хех, разобрался. Забыл скорость переключить, у него в выпадающем списке не было нужной мне скорости 38400. А когда перешёл на bytesAvailable/read, я вручную прописал.

Теперь опробовал с нужной мне скоростью - всё ок, аж и без flush/waitForBytesWritten/waitForReadyRead работает readAll
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
22.10.2019, 17:33  [ТС]
Я что то не очень понял...
Сейчас я упростил функцию чтения и выглядит так:
C++
1
2
3
4
5
6
void MainWindow::readData()
{
    auto to_read = serial_1->bytesAvailable();
    QByteArray data_1 = serial_1->read(to_read);
    ui->console_1->insertPlainText(data_1);
}
Но она не работает, не принимается ничего.
Может что то не так сделал?
0
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
22.10.2019, 17:58
mcmega, железяка то вообще исправная ? Скорость нужная ? Попробуй в терминалке какой-нибудь, вообще читается с девайса хоть что-то ?
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
22.10.2019, 18:04  [ТС]
Я уже кучу перепробовал, это обычные мосты USB-UART
- пробовал из терминалки в терминалку (2 моста подключены друг к другу накрест RX-TX) - все работает
- отправляю с проги в терминалку - все приходит без проблем
- отправляю из терминалки в прогу - ничего нет
0
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
22.10.2019, 18:26
mcmega, в пост #22 https://www.cyberforum.ru/post13919885.html
- может, оно ? Попробуй версию Qt 5.13.0

Что ещё может быть - я не знаю
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
22.10.2019, 20:49  [ТС]
Алексей1153, если бы мог.., ставлю 5.13.0, а ставится 5.13.1, такая же фигня и с другой рабочей версией.
Пробовал даже самую последнюю (бета) ставить, не работает.
А какая у тебя версия?
0
фрилансер
 Аватар для Алексей1153
6506 / 5751 / 1134
Регистрация: 11.10.2019
Сообщений: 15,399
22.10.2019, 20:53
mcmega, Qt 5.9.2

покопай вот тут http://download.qt.io/

например, я ставил Creator 4.4.1 (Qt 5.9.2) - Qt сразу с ним ставится
(раздел official_releases/)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.10.2019, 22:02
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Qt 5.9.2
На мой взгляд, одна из самых стабильных версий. И QtCreator тот что с ней хороший. Я кучу разных перепробовал, и сам пока именно на этой остановился.
Цитата Сообщение от mcmega Посмотреть сообщение
отправляю из терминалки в прогу - ничего нет
Хм... Я кажется понял в чем ваша проблема. Речь же идет про терминальную программу, так? По всей видимости, в момент отправки из терминала в вашу программу у вас не идет чтение. Вам нужно (в вашей программе) открыть порт (предварительно настроив скорость, имя и прочее), а потом крутить бесконечный цикл, ожидая когда данные из терминала придут (вы же не знаете, в какой момент времени это произойдет, потому и нужен цикл). Хотя точно не уверен, возможно это не прокатит, если открыть порт в вашей программе, то другое приложение с ним работать не сможет.
Вы конкретизируйте, что именно ваше приложение должно делать (и что на другом конце линии, какое устройство или что-то еще). Так будет проще разобраться.
0
2 / 1 / 0
Регистрация: 21.12.2016
Сообщений: 35
22.10.2019, 22:27  [ТС]
insite2012, под терминалом я подразумеваю программу по работе с UART (не окошко с черным фоном)

Суть простая:
- у меня есть 2 виртуальных COM порта к которым подключены 2 преобразователя USB-UART (Serial)
- к одному я подключаюсь с помощью 1 программы терминала (например COM4)
- ко второму - с помощью своей программы терминала (например COM5)
- физически эти преобразователи подключены между собой накрест (RX-TX)
- при отправке данных с любого из этих портов я должен получить те же данные на втором (потому что они подключены между собой)
-- если отправляю данные со своей программы, то получаю их же в программе-терминале
-- если отправляю данные с программы-терминала, то моя программа их не получает

п.с. физически все подключено верно и раньше работало
- на данный момент моя программа начала только корректно отправлять данные, после добавления строки:
C++
1
serial_1->waitForBytesWritten(100);
Моя программа нужна, потому что в дальнейшем я хочу подключаться к устройству со своим специфическим протоколом и там используются непечатаемые символы и свой формат посылки, поэтому я сделал заранее заготовки стандартных команд, чтоб не печатать каждый раз...
Миниатюры
Терминал не работает, но собирается без ошибок   Терминал не работает, но собирается без ошибок  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.10.2019, 22:39
Цитата Сообщение от mcmega Посмотреть сообщение
если отправляю данные с программы-терминала, то моя программа их не получает
Тогда, как я и сказал выше, в вашей программе настраивайте нужный порт, открывайте его и крутите бесконечный цикл, в котором ожидайте прихода данных в порт. Либо подключите слот к сигналу readyRead() порта и в нем читайте данные.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.10.2019, 22:39

stm32f4 makefile собирается но не работает
Решить собрать православный проект, да вот беда - не запускаеться! Делал по этой инструкции http://www.seng.de/downtoods/HowTo_Tool...

Собирается в minGW, не работает в Visual
Здравствуйте! Есть программа по склеиванию слов, которая работает на minGW, но не хочет работать на вижуалке. Пожалуйста, подскажите,...

Проблемы с вводом в терминал без графической оболочки
Здравствуйте, проблема: терминал запрашивает логин и пароль, после ввода логина все этапы ввода пароля и повторного ввода логина скипаются...

Программа через терминал запускается, а без терминала вылетает
Добрый день, в чем проблема. Есть программа скомпиленная под linux и написанная на Unity. Если запускать программу как исполняемый файл, то...

Установка Qt и QtCreator через терминал, не работает 'help'
Поставил QtCreator через терминал, не пашет 'help') Добавлено через 40 секунд Поищу нормальную документацию


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последнея моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru