Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QSerialPort прием посылки


Автор: 7BON 24.10.2016, 16:32
Всем привет! У меня прием и передача данных осуществляется с помощью QSerialPort. Передаю данные каждые 10мс. Проблема такого плана я передаю 1 посылку - на приеме ничего не оказалось, когда пошла на передачу вторая посылка - на приеме оказалось посылка из предыдущей и новой посылке вот пример:
Proverka::writeDataTime  "a50155de0000002f"
Proverka::writeDataTime  "a50155e000000011"
Read message "a5035955de01a4d1a5035955e0019ad1"

как настроить порт так чтобы этого не было(т.е отделить)? 
вот код qserialport
Код

#include "QUART.h"

QUART* QUART::instance(QWidget* _parent ){
    static QUART* __self = 0;
    if ( __self == 0 ) __self = new QUART( _parent );
    return __self;
}

void QUART::setSettings(QUartSettings pSettings ){
    if ( pSettings == portSettings ) return;
    portSettings = pSettings;
}

QUART::QUART(QWidget* _parent){
    serial = new QSerialPort( this );
    //connect( serial, SIGNAL(readyRead()), this, SLOT(readFromPort()));
    connect( serial, SIGNAL(error(QSerialPort::SerialPortError)),
             this,   SLOT(handleError(QSerialPort::SerialPortError)));
}

QUART::~QUART(){
    emit finished();
    delete serial;
}

void QUART::disconnectPort(){
    if ( serial->isOpen() ) serial->close();
}

void QUART::openPort(){
    serial->setPortName(portSettings.name);
    serial->setBaudRate(portSettings.baudrate);
    serial->setDataBits(portSettings.dataBits);
    serial->setParity(portSettings.parityCtrl);
    serial->setStopBits(portSettings.stopBits);
    serial->setFlowControl(portSettings.flowCtrl);
    if (serial->open(QIODevice::ReadWrite)) {
            emit openSuccessfully( true );
            emit statusMessage( tr("Connected to %1 : %2, %3, %4, %5, %6")
                                       .arg(portSettings.name)
                                       .arg(portSettings.baudrate)
                                       .arg(portSettings.dataBits)
                                       .arg(portSettings.parityCtrl)
                                       .arg(portSettings.stopBits)
                                       .arg(portSettings.flowCtrl));
    } else {
       emit openSuccessfully( false );
    }
}

void QUART::writeToPort( QByteArray dataArray ){
    if ( serial->isOpen()){
       serial->write(dataArray);
      }
    else emit statusMessage("Write UART error. Port closed");
}

void QUART::readFromPort(){
    if ( serial->isOpen() ){
      emit readedData( serial->readAll() );
      }
//  while(serial->bytesAvailable())
//    {
//      emit readedData( serial->readAll() );
//    }
    //qDebug()<<"Port Read "<< serial;
}

void QUART::handleError(QSerialPort::SerialPortError errorStr){
    emit statusMessage(portSettings.name + " error:" + QString().number(errorStr));
}


Сигнал ReadyRead убрал так посылка на приеме вообще пропадала

Автор: 7BON 17.11.2016, 09:14
Все вопрос решен давно уже, забыл написать smile

Добавлено @ 09:16
Ребята, кто-нибудь сталкивался с таким, что данные, которые принимаю проскакивают и как решить такой вопрос? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)