Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Unsolved Qt CanBus,SYSTEC CAN can't read CAN frames

    General and Desktop
    qcanbusdevice
    3
    7
    863
    Loading More Posts
    • 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.
    • B
      Babs last edited by

      Hello, I'm working on a CAN API.
      I write a frame to my CAN bus device and should receive data in response. I see the received packet in CAN example API when i write that frame.
      The problem is i can't read that received frame when i use QCanBusDevice::readFrame()
      This is my code to read the response:

       QCanBusDevice *device=QCanBus::instance()->createDevice("systeccan","can1.0");
         device->setConfigurationParameter(QCanBusDevice::BitRateKey,125000);
         device->setConfigurationParameter(QCanBusDevice::CanFdKey,false);
         device->connectDevice();
         char data[8]={0x40,0x00,0x10,0x00,0x00,0x00,0x00,0x00};
         QByteArray frame(data,8);
         QCanBusFrame myframe;
         myframe.setPayload(frame);
         myframe.setFrameId(0x617);
         qDebug()<<myframe.toString();
         qDebug()<<device->writeFrame(myframe);
         QCanBusFrame frameR=device->readFrame();
         qDebug()<<frameR.toString();
      
      1 Reply Last reply Reply Quote 0
      • mrjj
        mrjj Lifetime Qt Champion last edited by mrjj

        Hi
        Did you try call
        https://doc.qt.io/qt-5/qcanbusdevice.html#framesAvailable
        to see if there is something to read ?

        Also, i think it will work better if you connect a slot
        to void QCanBusDevice::framesReceived()
        and there call framesAvailable and readFrame.
        The way you are using it now, suggests its blocking but i think its actually async.

        B 1 Reply Last reply Reply Quote 1
        • B
          Babs @mrjj last edited by

          @mrjj i created a function processReceivedFrames and connected it to framesReceived() function.
          I still get 0 as number of available frames.
          This is the way i made the connection:

              connect(m_device, &QCanBusDevice::framesReceived, this, &DevicesManagement::processReceivedFrames,Qt::UniqueConnection);
          
          

          I'm sure that data should be received i tested that in CAN example like shown in picture below:![alt text]0_1555063572416_qtforum.PNG

          Regards

          mrjj 1 Reply Last reply Reply Quote 0
          • mrjj
            mrjj Lifetime Qt Champion @Babs last edited by

            @Babs
            Hi
            Something else must be missing then. If the sample can.

            B 1 Reply Last reply Reply Quote 0
            • B
              Babs @mrjj last edited by

              @mrjj Thanks you, i'll check my code then.May have made a mistake somewhere.

              mrjj aha_1980 2 Replies Last reply Reply Quote 1
              • mrjj
                mrjj Lifetime Qt Champion @Babs last edited by

                @Babs
                Yep. good plan.
                Its hard to guess at on forum but the sample is small, so should be easy to spot if its has more code
                for the Can class than you have.

                1 Reply Last reply Reply Quote 1
                • aha_1980
                  aha_1980 Lifetime Qt Champion @Babs last edited by

                  Hi @Babs,

                  Just one note:

                  device->setConfigurationParameter(QCanBusDevice::CanFdKey,false);

                  That is not needed, as CanFd is disabled by default (and SYSTEC hardware is not FD capable, at least as far as I know).

                  Regards

                  Qt has to stay free or it will die.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post