274 / 63 / 4
Регистрация: 18.04.2011
Сообщений: 1,362
Записей в блоге: 1
1

Qt Serial Port отправляет только 3 байта

14.12.2015, 13:04. Показов 1341. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
на компе два порта подсоединены к друг другу . на один ком-порт привязываю свою программу, на другой программу терменал.
если отправлять более 3 байтов, то в любом случае я принимаю только первые 3.

как исправить?
Миниатюры
Qt Serial Port отправляет только 3 байта  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2015, 13:04
Ответы с готовыми решениями:

Работа Scilab Serial Port Library (COM port)
Как работает Scilab Serial Port Library ? (может кто то встречал описание подробное, поделитесь...

QT serial port
Здравствуйте! пытаюсь заставить работать ком порт в QT для начала решил попробовать простой...

serial port
Здравствуйте. Использую стандартные классы .net для работы с ком портом. Работу с портом...

Serial Port (RS232)
Пишу небольшую программулину, и запенился на паре маментов. Первый вопрос: Мне надо выставить...

3
Dr.Xank
15.12.2015, 09:40
  #2

Не по теме:

Попробуйте удалить 0х00
Может из за этого останавливается.

0
41 / 39 / 7
Регистрация: 21.05.2012
Сообщений: 198
15.12.2015, 11:49 3
> как исправить?

1. Включить мозг.
2. Перечитать свои конспекты: что есть Си-строки и зачем \0.
3. А потом почитать в Qt доке про конструкторы QByteArray.
4. А потом, набравшись знаний, смекнуть и исправить.
0
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 88
16.12.2015, 08:37 4
на компе два порта подсоединены к друг другу . на один ком-порт привязываю свою программу, на другой программу терменал.
если отправлять более 3 байтов, то в любом случае я принимаю только первые 3.

как исправить?
1. Сейчас ты используешь конструкцию из С почти правильно.
Ты подразумеваешь передачу строки символов. Строка символов должна закончиться "\0". Это правило.
Если бы ты создал массив так:

char p[]="123";

То в это случае:

p[0] = "1";
p[1] = "2";
p[2] = "3";
p[3] = "\0";

Т.е. символ конца строки "\0" поставился за тебя. И длина массива была бы равна 4.

2. Если ты используешь QByteArray, используй append(добавлять), т.е:

QByteArray x;
x.append("0x07");
x.append("0x05");
...
x.append("0x79");

Здесь даже не задумываешь о символе конца строки. Класс QByteArray делает всё за тебя. Это C++.

3. Для отладки компорта не обязательно иметь второй ПК.
Используй программу com0com - создаст виртуальный компорт (имитирует второй ПК). Всё сможешь отладить на своем ПК.

4. Попробуй встроенный пример "terminal".

5. Статья "QThread + QSerialPort! Крутим в отдельном потоке работу с СOM портом.".

Всё расписано очень хорошо, исходники внизу статьи.

Добавлено через 16 часов 5 минут
Всё, увидел символ конца строки у тебя - 0x00.
Еще раз.

C++
1
serial->write(data);
- Будет отправлять последовательно символы из твоего массива пока не встретит символа конца строки - 0x00.
Поэтому программа работает правильно, она отправляет первые 3 байта, а 4ый уже символ конца строки, который говорит о том, что строка кончилась.
0
16.12.2015, 08:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2015, 08:37
Помогаю со студенческими работами здесь

Serial port и shell
Друзья, подскажите пожалуйста. Задача следующая. Есть микроконтроллерная плата, которая начинает...

Arduino serial port VS
такая проблема ни как не могу получить данные с ариаднино. Ардуина постоянно шлем данные что то...

Serial Port Monitor (ПО)
Доброго времени суток! Будьте добры подскажите хороший терминал по типу Advanced Serial Port...

Serial Port на Android
Приветствую всех. Написал тестовое приложение, показывающее, сколько COM портов есть в системе и их...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru