crossplatform.ru

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


  Ответ в QtSerialPort
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 10 сообщений [ в обратном порядке ]
lanz Дата 17.1.2015, 12:37
  Потому что в COM порте нет такого понятия "сообщение", он работает побайтово. Побайтово принимает и побайтово отправляет.
https://ru.wikipedia.org/wiki/Универсальный...риёмопередатчик
casper17 Дата 17.1.2015, 11:14
  Добрый день. Подскажите пожалуйста почему у меня чтение с COM порта одного сообщения происходит за несколько раз? С Atmega8 отправляю данные массив unsigned char x[10]="";
    
            x[0]='p';
            x[1]='r';
            x[2]='i';
            x[3]='v';
            x[4]='e';
            x[5]='t';
            x[6]='1';
            x[7]='2';
            x[8]='3';
            x[9]='\0';
            uart_puts(x);
            _delay_ms(1000);

А принимает их за несколько раз
Раскрывающийся текст
void MainWindow::readData()
{
    qDebug() << "Razmer        : " << serial->bytesAvailable();
             data=serial->readAll();
             qDebug() << "Name        : " << data;
          ui->label->setText(data);
    qDebug() << "///////////////////";

Razmer        :  3
Name        :  "pri"
///////////////////
Razmer        :  4
Name        :  "vet1"
///////////////////
Razmer        :  2
Name        :  "23"
///////////////////
Razmer        :  2
Name        :  "pr"
///////////////////
Razmer        :  4
Name        :  "ivet"
///////////////////
Razmer        :  3
Name        :  "123"
///////////////////


Если попробовать цикл do while и добавлять к старому сообщению новое то
Раскрывающийся текст
serial = new QSerialPort(this);
    serial->setPortName("com4");
    if(serial->open(QIODevice::ReadWrite)){

        serial->setBaudRate(QSerialPort::Baud9600);
        serial->setDataBits(QSerialPort::Data8);
        serial->setParity(QSerialPort::NoParity);
        serial->setStopBits(QSerialPort::OneStop);
        serial->setFlowControl(QSerialPort::NoFlowControl);
        ui->label->setText("OK");
}
else
    {
        ui->label->setText("NO CONNECT");
    }
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));

void MainWindow::readData()
{
    qDebug() << "Razmer        : " << serial->bytesAvailable();
    do {
            data.append(serial->readAll());
             qDebug() << "Name        : " << data;
     } while (serial->waitForReadyRead(50));
    ui->label->setText(data);
    qDebug() << "///////////////////";
}

Razmer        :  2
Name        :  "pr"
///////////////////
Razmer        :  7
Name        :  "privet123"
///////////////////
Razmer        :  1
Name        :  "privet123p"
///////////////////
Razmer        :  8
Name        :  "privet123privet123"
///////////////////

Почему он не принимает сразу его целиком?
borune Дата 29.10.2014, 15:04
 
Цитата(kuzulis @ 29.10.2014, 14:27) *
Потому что по USB подается питание (5V) на USB/Serial конвертер и => все будет "работать" :).

а ведь ты чертовски прав
kuzulis Дата 29.10.2014, 14:27
 
Цитата(borune @ 29.10.2014, 12:23) *
Не понятно почему.


Потому что по USB подается питание (5V) на USB/Serial конвертер и => все будет "работать" :).
borune Дата 29.10.2014, 12:23
  Имеется ввиду виртуальный порт. Конвертер USB/Serial находится в самом девайсе, поэтому, по идее, при выключенном девайсе конвертер тоже должен быть выключен. При этом порт в диспетчере виден и программно доступен. Не понятно почему.
kuzulis Дата 29.10.2014, 11:47
 
Цитата
там вроде не все так просто. если подключить устройство кабелем к порту, при этом не включая самого устройства, то порт обнаруживается и открывается безо всяких проблем. Хотя по идее это то же самое, что просто воткнуть в порт пустой кабель..


О каком порте речь? Об USB об SerialPort? Опять каша? :)

Если имеется ввиду это:

Цитата
PC (железный COM1) RS232 [ ] <-- кабель (RS232/TTL например DB9 и прочее) --> [ некий девайс ]


То у-во COM1 будет открываться в любом случае пока сам чип (который внутри PC не сгорел и фунциклирует).
RS232 - это "низкоуровневый" интерфейс, он не определяет, подключено что-то или нет к его Rx/Tx и прочим линиям.
Поэтому, подключен (или нет) некий девайс на том конце - без разницы - мы никогда это не узнаем пока не попробуем туда
что-нить отправить/принять. COM1 всегда будет активен в ОС вне зависимости от того воткнул ли кто-то что-то к нему через RS232 кабель.

Если имеется ввиду это:

Цитата
PC (вирт. COM1) USB[ ] <-- кабель (USB) --> [USB/Serial конвертер] <--- кабель (RS232/TTL например DB9 и прочее) --> [ некий девайс ]


То у-во COM1 будет открываться в любом случае пока подключен USB кабель к USB/Serial конвертеру и пока конвертер не сгорел.
Как только USB/Serial конвертер отключится - COM1 "исчезнет" из системы и станет hidden.
Далее, если подключить что-то к конвертеру кабелем RS232 (или не подключать) - нам без разницы, т.к. COM1 всегда откроется.мы никогда это не узнаем пока не попробуем туда
Но мы не может "программно" узнать что что-то подключено или нет на том конце RS232 пока что-нить не отправим/примем.
borune Дата 29.10.2014, 7:51
 
Цитата(kuzulis @ 28.10.2014, 23:12) *
Цитата
Если порт есть, но к нему не подключен кабель, то этот порт нельзя открыть, и, соответственно, записать в него также ничего нельзя. Но это уже похоже на фишечку драйвера виртуального ком-порта, и ее никак не исправишь наверное...


Это значит что устройства (активного устройства типа "последовательный порт", или любого другого - неважно) НЕТ! И это никакая не фишечка драйвера. Это Windows ОС просто кеширует у-ва чтобы вновь не создавать симлинки при подключении этого-же устройства в этот-же USB порт (или просто того-же у-ва).


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


Цитата(kuzulis @ 28.10.2014, 23:12) *
А я тебя же предупреждал что все это хрень, но куда уж мне.. Ты-же у нас спец.

я, кажется, принес свои извинения
kuzulis Дата 28.10.2014, 23:12
 
Цитата
Если порт есть, но к нему не подключен кабель, то этот порт нельзя открыть, и, соответственно, записать в него также ничего нельзя. Но это уже похоже на фишечку драйвера виртуального ком-порта, и ее никак не исправишь наверное...


Это значит что устройства (активного устройства типа "последовательный порт", или любого другого - неважно) НЕТ! И это никакая не фишечка драйвера. Это Windows ОС просто кеширует у-ва чтобы вновь не создавать симлинки при подключении этого-же устройства в этот-же USB порт (или просто того-же у-ва).

Вот, воткнул ты к примеру USB флешечку она определилась как диск Z, потом ты выдернул ее. Потом проенумеровал все USB mass-storage устройства которые когда-то были подключены к системе.. Нашел у-во которое было диском Z и попытался открыть.. И.. надеешься считать файлики из Z которого сейчас нету? Гы. :) Вместо флешки можешь попробовать любое USB у-во (да хоть Audio карту, хоть USB мышку, хоть черта лысого и прочее).

Кроме того никто не запрещает в диспетчере у-в отобразить "hidden" устройства и удалить их. Тогда не будет никаких таких у-в перечисляться.

Цитата
да, а толку от этого..


А я тебя же предупреждал что все это хрень, но куда уж мне.. Ты-же у нас спец. :)
borune Дата 28.10.2014, 17:35
 
Цитата(ahalaj @ 28.10.2014, 18:20) *
Да, скорее всего тут именно драйвер. Но главное ведь получилось, существование порта детектится.

да, а толку от этого..
ahalaj Дата 28.10.2014, 17:20
  Да, скорее всего тут именно драйвер. Но главное ведь получилось, существование порта детектится.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 8.7.2025, 23:42