crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 23.10.2019, 20:40