2016-09-01 20 views
0

シリアルポートを使用してハードウェアデバイスと通信したい。ドキュメントによると、メッセージは次のようになります。 enter image description hereQSerialPortを使用してシリアルポート経由でデータを送信

通信には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進値を送信するために見落としたことはありますか?ありがとう。

+0

はい。あなたは完全なテストケースを投稿して見落としました。つまり、デバイスからデータを正しく読み取ったということはあなたの質問には何もありません。 –

+0

サイドノート:パケットを文字列として書くことができます: 'const char data [] =" \ x6E \ x00 \ x00 ... \ x00 ";送信= qSerialPort->書き込み(データ、サイズ(データ)-1)。 ' –

+0

パケットの内容が間違っている可能性があります。あなたはデータセクションとして "\ x00"を入れますが、あなたはそのセクションの正しいCRCを計算しませんでした。使用するはずのCRCのプロトコルのマニュアルを参照してから、パケットを送信する前にCRCを計算してください。 –

答えて

0

「設定」操作の前にポートを開く必要があります。例えば、baudRateためのQt documantationで:

注:設定は、ポートを開く前に設定されている場合は、実際のシリアル ポート設定はQSerialPortに自動的に行われ:: open()メソッド 右その後ポートの開放は成功する。

コード例:

QList<QSerialPortInfo> portsInfo = QSerialPortInfo::availablePorts(); 
foreach(const QSerialPortInfo& portInfo, portsInfo){ 
    if (portInfo.portName().trimmed().toUpper() != /*your port name*/) 
     continue; 
    _port = new QSerialPort(portInfo, this); 
    if (!_port->open(QIODevice::ReadWrite)){ 
     QSerialPort::SerialPortError error = _port->error(); 
     delete _port; 
     _port = nullptr; 
    } 
    if (!_port->setBaudRate(/*your baudRate*/, /*your direction)*/){ 
     QSerialPort::SerialPortError error = _port->error(); 
     _port->close(); 
     delete _port; 
     _port = nullptr; 
     return; 
    } 
    if (!_port->setParity(/*your parity*/)){ 
     QSerialPort::SerialPortError error = _port->error(); 
     _port->close(); 
     delete _port; 
     _port = nullptr; 
     return; 
    } 
    if (!_port->setDataBits(/*your dataBits*/)){ 
     QSerialPort::SerialPortError error = _port->error(); 
     _port->close(); 
     delete _port; 
     _port = nullptr; 
     return; 
    } 
    if (!_port->setStopBits(/*your stopBits */)){ 
     QSerialPort::SerialPortError error = _port->error(); 
     _port->close(); 
     delete _port; 
     _port = nullptr; 
     return; 
    } 
    if (!_port->setFlowControl(/* your flowControl*/)){ 
     QSerialPort::SerialPortError error = _port->error(); 
     _port->close(); 
     delete _port; 
     _port = nullptr; 
     return; 
    } 
} 
+0

チップをありがとう。残念ながら、最初にポートを開くことは効果がありませんでした。 – Androidicus

+0

HWデバイスを変更しようとしましたか?または、テストデバイス用にrs232送信者を使用することもできます。このようなもの:https://sourceforge.net/projects/rs232msgsender/ –

関連する問題