0

Qt SerialPort ライブラリを使用してシリアル ポートを読み込もうとしています。ハイパーターミナルを使用してデータを読み取ることができます。

Qt では、次のコードを使用して同じことを試みました。Qt は、ポートが正しく開かれていると言いますが、何らかの理由で、シリアル ポートからの bytesAvailable は常に 0 です。

serial.setPortName("COM20");

if (serial.open(QIODevice::ReadOnly))
    qDebug() << "Opened port " << endl;
else
    qDebug() << "Unable to open port" << endl;

serial.setDataBits(QSerialPort::Data8);

serial.setParity(QSerialPort::EvenParity);

serial.setBaudRate(QSerialPort::Baud115200);


qDebug() << "Is open?? " << serial.isOpen();


// Wait unit serial port data is ready
while (!serial.bytesAvailable())
{
    //qDebug() << serial.bytesAvailable()<<endl;
    continue;
}

QByteArray data = serial.read(100);

qDebug() << "This is the data -" << data << endl;

serial.close();

比較すると、上記のコードと同じ構造を持つ MATLAB コードは、シリアル ポート データを正常に読み取ることができます。

%Serial Port Grapher - Shurjo Banerjee

s = serial('COM20');
s.BaudRate = 460800;
s.Parity = 'even';

try 
    input('Ready to begin?');
catch
end


fopen(s);

fh = figure();
hold on;

t = 1;

 while (s.BytesAvailable <= 0)
        continue
 end
 a = fread(s, 1)

 old_t = 1;
 old_a = a;

while true

   if (s.BytesAvailable > 0)
        a = fread(s, 1)

        figure(fh)
        t = t + 1;
        plot([old_t t], [old_a a]);
        old_t = t;
        old_a = a;
    end
end

fclose(s);
4

1 に答える 1

0

1) バグです: https://codereview.qt-project.org/#change,47729

推奨ソリューション:


qserialport_win.cpp の 161 行目を次のように変更しました。

return error;

return !error;

そして今、私の単純化された例が機能します。


2)また、私はお勧めします:

ワンステップ: ポートを開く:

            if (this->open(QIODevice::ReadWrite)) {
            } else {
                qDebug() << "\n Can't open port | " << this->errorString();
            }

2 ステップ: パラメータ設定を確認することをお勧めします。

            if (
                    this->setBaudRate(this->baudRate)
                    && this->setDataBits(this->dataBits)
                    && this->setParity(this->parity)
                    && this->setStopBits(this->stopBits)
                    && this->setFlowControl(this->flowControl)) {
                qDebug() << "\n[ info ]        Port settings successfully";
            } else {
                qDebug() << "\n[ error ]        Port settings failed";
            }

すべてが順調であれば、SIGNAL ReadyRead() と SLOT を使用してデータを受信することをお勧めします。

于 2013-11-08T23:04:06.350 に答える