标签: qtserialport

如果打开设备,QSerialPort 会导致程序停止(无限循环?)

我想在串行设备上写入。不幸的是,我感觉 QSerialPort 在 linux 下没有正确实现。与其他方法 (python) 相比,我得到 !sometimes! 当我尝试调用时程序挂起:

serial.open(QIODevice::ReadWrite)
Run Code Online (Sandbox Code Playgroud)

我正在使用http://qt-project.org/wiki/QtSerialPort 中的示例(见下文)。QSerialPortInfo 工作正常,因此我可以在打开它之前搜索我的设备。该问题出现在所有 Qt 5.* 系列中。我目前正在使用 OpenSuse 存储库中的 5.3 测试版。其他工具或方法证明设备正在工作(Windows 或 Python)。

// Example use QSerialPortInfo
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
    qDebug() << "Name        : " << info.portName();
    qDebug() << "Description : " << info.description();
    qDebug() << "Manufacturer: " << info.manufacturer();

    // Example use QSerialPort
    QSerialPort serial;
    serial.setPort(info);
    if (serial.open(QIODevice::ReadWrite)) // Hang of the program
        serial.close();
}
Run Code Online (Sandbox Code Playgroud)

工作python脚本:

com_port = 4
baud_rate = '9600'
pySerial = serial.Serial(com_port, …
Run Code Online (Sandbox Code Playgroud)

c++ qt qiodevice qtserialport qtcore

4
推荐指数
1
解决办法
1845
查看次数

readyRead()在Qt中如何工作?

这是我在这个网站上的第一个问题!

我在从COM端口读取数据时遇到一些麻烦,我从另一个COM端口发送完整的消息,当我用Qt接收它时,它总是被切成多个子消息.

void SerialPortReader::init()
{
    connect(m_serialPort, SIGNAL(readyRead()), this, SLOT(readData()));
}   

void SerialPortReader::readData()
{
//    m_serialPort->waitForReadyRead(200);
    QByteArray byteArray = m_serialPort->readAll();
    qDebug() << byteArray;

    if(byteArray.startsWith(SOF) && byteArray.endsWith(EOF_LS)
        && byteArray.size() >= MIN_SIZE_DATA) {
    decodeData(byteArray.constData());
    } else {
        qDebug() << "LIB SWCom : Unvalid trame !";
    }
}
Run Code Online (Sandbox Code Playgroud)

发送的消息长度为25或27字节,如果我使用Putty或Hyperterminal来读取它们,我没有遇到麻烦.此外,如果我使用2个模拟串口COM进行通信,我没有这个问题...它只发生在Qt读取系统和2个物理COM端口...

我认为在准确发出readyRead信号时我没有得到...

我很困惑,提前谢谢你的帮助!

c++ qt qiodevice qtserialport qtcore

3
推荐指数
1
解决办法
2万
查看次数

QT串口读取

我正在尝试读取通过USB通过设备插头发送的数据。首先我通过此命令读取数据

  • 须藤stty -F / dev / ttyUSB0 1200 sane parenb evenp cs7 -crtscts
  • 猫/ dev / ttyUSB0

数据是这样的

TGPHI_s -0,24 =

MESURES2 BT 4 SUP36 A

PTCOUR2 HPH /
Run Code Online (Sandbox Code Playgroud)

现在我想通过Qt5.3程序读取数据

QSerialPort serial;
serial.setPortName("ttyUSB0");
if(!serial.setBaudRate(QSerialPort::Baud1200 , QSerialPort::Input))
    qDebug() << serial.errorString();
if(!serial.setDataBits(QSerialPort::Data7))
    qDebug() << serial.errorString();
if(!serial.setParity(QSerialPort::EvenParity))
    qDebug() << serial.errorString();
if(!serial.setFlowControl(QSerialPort::HardwareControl))
    qDebug() << serial.errorString();
if(!serial.setStopBits(QSerialPort::OneStop))
    qDebug() << serial.errorString();
if(!serial.open(QIODevice::ReadOnly))
    qDebug() << serial.errorString();
qDebug() << serial.bytesAvailable();
while(true)
{
    if (serial.isOpen()) {
        qDebug() << "Serial port is open...";
        QByteArray datas = serial.readAll();
        if (datas.size() == …
Run Code Online (Sandbox Code Playgroud)

c++ qt serial-port qt5 qtserialport

3
推荐指数
1
解决办法
7353
查看次数

Qt中的串口通信

我是 Qt 的新手,需要准备一个项目来从 rs232 发送十六进制命令。QString 行包含 64 位二进制数据,我必须将其转换为十六进制并通过 rs232 发送。

 QString a=ui->comboBox->currentText();
    QString s1;
    s1="./calc "+a;
    QProcess p1;
    p1.start(s1);
    p1.waitForFinished(-1);
    QString line ;
     //read
           QFile file("TeleOutput.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;
     QTextStream in (&file);
  line = in.readAll();
    ui->plainTextEdit->setPlainText(line);
Run Code Online (Sandbox Code Playgroud)

那么,如何将 QString 行中的 64 位二进制数据转换为十六进制值并通过 rs232 传输呢?

qt serial-port qtserialport

2
推荐指数
1
解决办法
4954
查看次数

QSerialPort新信号槽语法没有匹配成员函数用于调用'connect'

我试图使用新的信号和插槽语法,但我在连接函数时遇到编译错误.在这种情况下如何使用新语法?

// Qt 5.4.1, Apple LLVM version 6.1.0 and qmake 3.0
private slots:
    void onError(QSerialPort::SerialPortError code);

private:
    QSerialPort *m_port;

Link::Link(QObject *parent) : QObject(parent) {
  m_port = new QSerialPort(parent);

  connect(m_port, &QSerialPort::error, this, &Link::onError);
}
Run Code Online (Sandbox Code Playgroud)

完整的错误消息:

error: no matching member function for call to 'connect'
 connect(m_port, &QSerialPort::error, this, &Link::onError);
  ^~~~~~~

candidate function not viable: no overload of 'error' matching 'const char *' for 2nd argument
static QMetaObject::Connection connect(const QObject *sender, const char *signal,
                               ^
Run Code Online (Sandbox Code Playgroud)

c++ qt qt5 qtserialport

2
推荐指数
1
解决办法
466
查看次数

标签 统计

qt ×5

qtserialport ×5

c++ ×4

qiodevice ×2

qt5 ×2

qtcore ×2

serial-port ×2