使用QSerialPort通过串行端口发送数据

时间:2016-09-01 09:27:38

标签: c++ qt serial-port

我想使用串口与硬件设备通信。根据文档,消息如下所示: enter image description here

我想使用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);

我没有从硬件设备得到正确的答复。有没有什么我忽略了使用QSerialPort将十六进制值发送到串口?感谢。

1 个答案:

答案 0 :(得分:0)

你应该在" set"之前打开端口。操作。例如,在baudRate的Qt文档中:

  

注意:如果在打开端口之前设置了设置,则为实际串口   端口设置在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;
    }
}