crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QSerialPort и Parity
TestUser013
  опции профиля:
сообщение 11.8.2014, 16:30
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 11.8.2014
Пользователь №: 4208

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток.
Пытаюсь разобраться с СОМ портом. Возникла проблема...
Нужно отправлять байты изменяя бит четности. Если верить документации, то следующий код должен отправить байт 08 сначала с битом четности 1, а потом с битом четности 0.

void MainWindow::on_pushButton_clicked()
{
    QByteArray paket;
    paket.resize(1);
    paket[0] = 0x08;
    int temp;

    port.setParity(QSerialPort::MarkParity);
    ui->log->setPlainText(ui->log->toPlainText()+tr("Parity %1.\n").arg(port.parity()));
    temp = port.write(paket);
    ui->log->setPlainText(ui->log->toPlainText()+tr("Packet send. Size = %2 byte.\n").arg(temp));

    port.setParity(QSerialPort::SpaceParity);
    ui->log->setPlainText(ui->log->toPlainText()+tr("Parity %1.\n").arg(port.parity()));
    temp = port.write(paket);
    ui->log->setPlainText(ui->log->toPlainText()+tr("Packet send. Size = %2 byte.\n").arg(temp));
}



В PlainText выводится верная информация
Цитата
Parity 5.
Packet send. Size = 1 byte.
Parity 4.
Packet send. Size = 1 byte.


А вот на экране осциллографа совсем другая ситуация.


Вот фотография, когда сначала идет Mark, а потом Space.


Вот фотография, когда сначала идет Space, а потом Mark.



Если посылать в режиме только Mark или только Space, то все хорошо. Вот фото.
Mark:


Space:


Собственно 2 вопроса, почему так происходит и как правильно сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TestUser013
  опции профиля:
сообщение 12.8.2014, 12:15
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 11.8.2014
Пользователь №: 4208

Спасибо сказали: 0 раз(а)




Репутация:   0  


Разобрался. Если кому-то пригодится привожу ответ.

Метод port.write() гарантирует только то, что данные будут записаны во внутренний буффер класса, и все. Реальная отправка будет позже. В приведенном коде метод on_pushButton_clicked() отправит сразу два пакета с паритетом SpaceParity. Т.к. цепочка из двух port.write(paket) просто добавит данные во внутренний буффер класса (т.е. там будет два пакета сразу). И по выходе из on_pushButton_clicked() отправятся все данные сразу (с SpaceParity - т.к. он был последним).

Разобрался. Если кому-то пригодится привожу ответ.

Метод port.write() гарантирует только то, что данные будут записаны во внутренний буффер класса, и все. Реальная отправка будет позже. В приведенном коде метод on_pushButton_clicked() отправит сразу два пакета с паритетом SpaceParity. Т.к. цепочка из двух port.write(paket) просто добавит данные во внутренний буффер класса (т.е. там будет два пакета сразу). И по выходе из on_pushButton_clicked() отправятся все данные сразу (с SpaceParity - т.к. он был последним).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 2:06