Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. RTU Serial port isn't opening
Forum Updated to NodeBB v4.3 + New Features

RTU Serial port isn't opening

Scheduled Pinned Locked Moved Unsolved General and Desktop
qserialportrtu client
5 Posts 3 Posters 734 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    Tague Carlyon
    wrote on 2 Jul 2021, 21:54 last edited by
    #1

    Hello! I can't figure out why my QSerialPort object isn't opening. I am on Linux.

    It merely outputs "QIODevice::read (QSerialPort): device not open" in the console whenever I try to read the readAll() function.
    I need to connect to an RTU modbus device.

    .cpp file:

    #include <QSerialPort>
    #include <QtCore>
    #include <iostream>

    int main(int argc, char** argv)
    {
    QByteArray temp;
    char data[8];

    qint64 size = 8;
    
    QSerialPort *solarCharger = new QSerialPort;
    
    solarCharger->setPortName("/dev/ttyUSB0");	
    solarCharger->setDataBits(QSerialPort::Data8);
    solarCharger->setStopBits(QSerialPort::OneStop);
    solarCharger->setBaudRate(QSerialPort::Baud9600);
    solarCharger->setParity(QSerialPort::NoParity);
    solarCharger->setFlowControl(QSerialPort::NoFlowControl);
    
    std::cout << solarCharger->isOpen() << std::endl;
    
    solarCharger->open(QIODevice::ReadOnly);
    
    std::cout << solarCharger->isOpen() << std::endl;
    
    temp = solarCharger->readAll();
    
    std::cout << temp[0] << std::endl;
    
    delete solarCharger;
    solarCharger = nullptr;
    
    return 0;
    

    }

    .pro file:

    TEMPLATE = app
    TARGET = Qt
    INCLUDEPATH += .

    DEFINES += QT_DEPRECATED_WARNINGS

    SOURCES += simple.cpp

    QT += serialport core

    J 1 Reply Last reply 4 Jul 2021, 09:33
    0
    • C Offline
      C Offline
      ChrisW67
      wrote on 3 Jul 2021, 02:11 last edited by
      #2

      @Tague-Carlyon Does your open() call succeed?

      Connect something to the QSerialPort::errorOccurred() signal to see what sort of error you have.

      You never execute the application event loop so it is unlikely that there will ever be data to read.

      1 Reply Last reply
      2
      • T Offline
        T Offline
        Tague Carlyon
        wrote on 3 Jul 2021, 19:55 last edited by Tague Carlyon 7 Mar 2021, 19:56
        #3

        @ChrisW67 When I had access to the RTU port on the MPPT solar charger, I don't think the open() call succeeded. I will update you tomorrow with more information when I will have access to the MPPT solar charger again. In the meantime, I apologize but I don't fully understand how to connect something to the QSerialPort::errorOccurred(). I understand the QObject::connect() function loosely but not enough to do what you are asking from scratch.

        1 Reply Last reply
        0
        • C Offline
          C Offline
          ChrisW67
          wrote on 4 Jul 2021, 02:09 last edited by ChrisW67 7 Apr 2021, 02:11
          #4

          QSerialPort is, like most Qt I/O, designed to be used asynchronously. Setting it up that way and connecting the errorOccurred() signal to a slot that can handle it goes something like this:

          #include <QCoreApplication>
          #include <QDebug>
          #include <QSerialPort>
          #include <QTimer>
          
          class SerialReceiver: public QObject
          {
              Q_OBJECT
          public:
              explicit SerialReceiver(QObject *p = nullptr)
                  : QObject(p)
                  , m_solarCharger(nullptr)
              {
                  m_solarCharger = new QSerialPort(this);
                  connect(m_solarCharger, &QSerialPort::readyRead, this, &SerialReceiver::handleReadyRead);
                  connect(m_solarCharger, &QSerialPort::errorOccurred, this, &SerialReceiver::handleErrorOccurred);
          
                  m_solarCharger->setPortName("/dev/ttyUSB0");
                  m_solarCharger->setDataBits(QSerialPort::Data8);
                  m_solarCharger->setStopBits(QSerialPort::OneStop);
                  m_solarCharger->setBaudRate(QSerialPort::Baud9600);
                  m_solarCharger->setParity(QSerialPort::NoParity);
                  m_solarCharger->setFlowControl(QSerialPort::NoFlowControl);
          
                  if (!m_solarCharger->open(QSerialPort::ReadOnly)) {
                      qDebug() << Q_FUNC_INFO << "Failed to open serial port";
                  }
              }
              ~SerialReceiver() { }
          
          private slots:
              void handleReadyRead() {
                  QByteArray temp = m_solarCharger->readAll();
                  qDebug() << temp.size() << "bytes read";
              }
          
              void handleErrorOccurred(QSerialPort::SerialPortError error) {
                  if (error != QSerialPort::NoError) {
                      qDebug() << Q_FUNC_INFO << error;
                  }
              }
          
          private:
              QSerialPort *m_solarCharger    ;
          
          };
          
          int main(int argc, char *argv[])
          {
              QCoreApplication a(argc, argv);
              SerialReceiver receiver;
              // arrange for the program to end itself after 15 seconds
              QTimer::singleShot(15000, &a, &QCoreApplication::quit);
              return a.exec();
          }
          
          #include "main.moc"
          
          1 Reply Last reply
          3
          • T Tague Carlyon
            2 Jul 2021, 21:54

            Hello! I can't figure out why my QSerialPort object isn't opening. I am on Linux.

            It merely outputs "QIODevice::read (QSerialPort): device not open" in the console whenever I try to read the readAll() function.
            I need to connect to an RTU modbus device.

            .cpp file:

            #include <QSerialPort>
            #include <QtCore>
            #include <iostream>

            int main(int argc, char** argv)
            {
            QByteArray temp;
            char data[8];

            qint64 size = 8;
            
            QSerialPort *solarCharger = new QSerialPort;
            
            solarCharger->setPortName("/dev/ttyUSB0");	
            solarCharger->setDataBits(QSerialPort::Data8);
            solarCharger->setStopBits(QSerialPort::OneStop);
            solarCharger->setBaudRate(QSerialPort::Baud9600);
            solarCharger->setParity(QSerialPort::NoParity);
            solarCharger->setFlowControl(QSerialPort::NoFlowControl);
            
            std::cout << solarCharger->isOpen() << std::endl;
            
            solarCharger->open(QIODevice::ReadOnly);
            
            std::cout << solarCharger->isOpen() << std::endl;
            
            temp = solarCharger->readAll();
            
            std::cout << temp[0] << std::endl;
            
            delete solarCharger;
            solarCharger = nullptr;
            
            return 0;
            

            }

            .pro file:

            TEMPLATE = app
            TARGET = Qt
            INCLUDEPATH += .

            DEFINES += QT_DEPRECATED_WARNINGS

            SOURCES += simple.cpp

            QT += serialport core

            J Offline
            J Offline
            J.Hilk
            Moderators
            wrote on 4 Jul 2021, 09:33 last edited by
            #5

            @Tague-Carlyon

            the event loop of QCoreApplications needs to be running, otherwise this won't work at all.


            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


            Q: What's that?
            A: It's blue light.
            Q: What does it do?
            A: It turns blue.

            1 Reply Last reply
            3

            3/5

            3 Jul 2021, 19:55

            • Login

            • Login or register to search.
            3 out of 5
            • First post
              3/5
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved