【问题标题】:CAN Communication in QTQT中的CAN通信
【发布时间】:2021-09-14 13:42:55
【问题描述】:

我在 QT 中的 CAN 通信存在特定问题。发送/写入 CAN 消息不是问题,但 QT 中的 readFrame() 函数不会加载我收到的帧。如果您在 C++ 中实现 CAN 通信,您可以使用 read() 和 write() 函数。但在 QT 中不受支持。一般来说,读取函数会中断程序直到收到消息,我如何在 QT 中做同样的事情?

QCanBusFrame frame = device->readFrame();

感谢您的帮助,我真的很感激!

【问题讨论】:

  • 您是否将 framesReceived 信号连接到您的插槽?

标签: c++ qt can-bus socketcan canutils


【解决方案1】:

来自 QT 文档:

从队列中返回下一个 QCanBusFrame;否则返回一个 空 QCanBusFrame。返回的帧从队列中移除。

队列按照先进先出原则运行。

https://doc.qt.io/qt-5.12/qcanbusdevice.html#readFrame

尝试第一次调用

bool QCanBusDevice::waitForFramesReceived(int msecs)

https://doc.qt.io/qt-5.12/qcanbusdevice.html#waitForFramesReceived

然后读取帧

【讨论】:

  • 感谢您的回复。如何在 QT 中调用“bool QCanBusDevice::waitForFramesReceived(int mssecs)”。在头文件或 mainwindow.cpp 中。
  • QCanBusFrame frame; if (device->waitForFramesReceived(1000)) { frame = device->readFrame();}
  • 最有可能的是,您正在读取缓冲区之前的帧。添加一个waitforFramesReceived会阻塞执行一段时间,然后你可以调用readFrame?
  • 你的设置是什么?什么是发送和接收,您能否确认您的物理设置是否正常工作?
  • 是的,正确! :)
猜你喜欢
  • 1970-01-01
  • 2016-06-17
  • 2013-04-26
  • 1970-01-01
  • 2015-04-24
  • 2015-07-29
  • 2021-08-04
  • 2021-05-27
  • 1970-01-01
相关资源
最近更新 更多