Всем привет! У меня прием и передача данных осуществляется с помощью 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 убрал так посылка на приеме вообще пропадала |