Kvaser、C++、Qt编写监控界面(二)

针对QTCANdemo程序在操作CAN信号时出现的卡死问题,本文档详细介绍了如何修改canreader.cpp中的代码以解决该问题。同时,为了增强功能,新增了DBC线程用于解析原始CAN报文,实现数据的实时观测。rx_thread线程与DBC线程通过信号与槽连接,确保数据的正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对DEMO - qtcandemo进行修改

       例程qtcandemo,采用了两个线程:主程序线程、和CAN信号读取线程。存在的问题是:打开界面,点击运行“Bus on”之后,再点击“Bus off”时,程序经常卡死。
       需要对canreader.cpp中的exec()进行修改。

  //原程序:
  while (is_running) {
    do {
      status = canReadWait(handle, &msg.id, &msg.data, &msg.dlc, &msg.flag, &msg.time, timeout);
      if (status == canOK) {
        emit gotRx(msg);
      }
    } while (status == canOK);
  }

  //修改为:
  while (is_running) {
    status = canReadWait(handle, &msg.id, &msg.data, &msg.dlc, &msg.flag, &msg.time, timeout);
    if (status == canOK) {
    	emit gotRx(msg);
    }
    else{
    	break;
    }
  }
二、基于对DEMO - qtcandemo的修改,增添新的功能
       例程中使用的线程如下:

       主线程(负责更新UI界面)
       rx_thread线程(负责读取CAN报文)

       由于例程仅仅是读取CAN的原始报文,并没有对报文进行解析,不方便对数据进行实时观测,所以我们需要在例程的基础上增加如下内容:

       dbc_thread线程(负责解析原始CAN报文)。
       rx_thread线程,通过信号CanMessage(原始报文)与dbc_thread线程中槽函数translatedRawMsg连接;实现对原始报文的翻译。
       dbc_thread线程,通过信号与主线程中的槽函数连接,实现数据的显示。
       dbc_thread线程的实现,参见下一遍博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值