シリアルポートを使用してハードウェアデバイスと通信したい。ドキュメントによると、メッセージは次のようになります。 QSerialPortを使用してシリアルポート経由でデータを送信
通信にはQSerialPort
を使用します。ここで私がしようとしているものです:
QByteArray bytes;
bytes.append((char) 0x6E);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
bytes.append((char) 0x0B);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
bytes.append((char) 0x2F);
bytes.append((char) 0x4A);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
bytes.append((char) 0x00);
int transmitted = qSerialPort->write(bytes); //returns no error, transmitted = 11
QSerialPort
では、次のように設定します。
qSerialPort = new QSerialPort(path);
qSerialPort->setBaudRate(QSerialPort::Baud9600);
qSerialPort->setDataBits(QSerialPort::Data8);
qSerialPort->setParity(QSerialPort::NoParity);
qSerialPort->setStopBits(QSerialPort::OneStop);
qSerialPort->setFlowControl(QSerialPort::NoFlowControl);
qSerialPort->open(QIODevice::ReadWrite);
私はHWデバイスからの正しい応答を得ることはありません。 QSerialPort
を使用してシリアルポートに16進値を送信するために見落としたことはありますか?ありがとう。
はい。あなたは完全なテストケースを投稿して見落としました。つまり、デバイスからデータを正しく読み取ったということはあなたの質問には何もありません。 –
サイドノート:パケットを文字列として書くことができます: 'const char data [] =" \ x6E \ x00 \ x00 ... \ x00 ";送信= qSerialPort->書き込み(データ、サイズ(データ)-1)。 ' –
パケットの内容が間違っている可能性があります。あなたはデータセクションとして "\ x00"を入れますが、あなたはそのセクションの正しいCRCを計算しませんでした。使用するはずのCRCのプロトコルのマニュアルを参照してから、パケットを送信する前にCRCを計算してください。 –