当前位置: 首页 > news >正文

CANoe入门(11)-- 诊断模块

CANoe的诊断模块是其核心功能之一,支持多总线(如CAN、LIN)的诊断解析、自动化测试及ECU交互模拟,主要通过集成化的窗口和CAPL脚本实现高效诊断操作‌。以下详细介绍关键模块的使用方法:

一、首先打开诊断模块

很简单,在CANoe界面上点击“Diagnostics”即可,界面如下

一、诊断模块核心功能与配置

Diagnostic/ISO TP(诊断参数配置)
  • 用于导入诊断数据库(CDD/ODX/PDX文件)并配置传输层参数,如CAN ID地址、ISO-TP帧格式(BS/STmin时间)、诊断层超时设置(P2超时)等‌。
  • 示例步骤:在CANoe工程中打开此窗口,看到如上图的CAN(以CAN工程为例,LIN工程的话这里显示为LIN)右键可以看到添加诊断描述文件的选项,如下:
    • 如果有CDD或 PDX/ODX文件可以选择第一个选项,选择对应的诊断数据库,
    • 如果没有,可以选择第二个选项,添加一个基础诊断文件。
    • 后面两个先不管,等我弄清楚先
  • 选择添加基础诊断文件后,在这个文件里做一些基本的UDS配置
    • Transport Layer:在这个界面上我们把请求ID,应答ID,以及物理寻址ID填好,还有下面的一些时间也填好:

      STmin:流控帧参数,用于告知发送方发送连续帧时的最短间隔时间。

      Block Size:用于告知发送方在接收到下一条流控帧之前,本次可以发送的连续帧的数量,为0表示没有限制。

      FC Delay:流控帧与FF CF之间的间隔时间

      Max length:传输层支持的最大字节数,当接收到的长度大于该长度时,CANoe将会报错并结束传输。

      Mixing of CAN 2.0 and CANFD Frames:

      若配置为ignore,则忽略与配置不符的CAN报文,如:本工程配置为CAN工程,则会忽略CANFD的诊断报文;

      若配置为accept,则可以接收与本工程配置不符的CAN报文,但仅接收;
      若配置为adapt,则不仅可以接收与本工程配置不符的CAN报文,且在接收到之后会使用对应的报文类型进行发送。

    • Diagnostic Layer

        Tester Present Request:若勾选此选项,则CANoe会在发送完成一次诊断服务后会每隔S3 Client ms之后自动发送诊断仪在线请求(0x3E服务)

        若勾选上方的From Description,则会默认发送诊断文件中的诊断仪在线命令,若勾选Manually,则可以自定义发送的诊断仪在线命令。

        S3 Server Time:ECU离开非默认会话的超时时间,此时间必须大于S3 Client。

Basic Diagnostic(基础诊断)
  • 适用于未导入完整数据库的场景,自定义简单诊断服务格式(如定义请求字节和响应处理逻辑)‌。
  • 一键生成基础诊断服务:

        点击如上图的“edit”,选择“add all services”

        右侧可以看到生成的服务

点击服务可以修改发送数据以及应答数据。

Diagnostic Console(诊断控制台)
  • 手动发送诊断请求并实时显示ECU响应的主界面,需先导入诊断数据库或激活Basic Diagnostic‌。
  • 使用流程:选择目标ECU→输入服务ID(如UDS $22读取数据标识符)→发送请求→解析响应数据或负响应码(NRC)‌。

进入:

进入后,双击服务即可发送相应诊断报文,如上图所示。

三、注意事项

  • 数据库依赖‌:需导入CDD/ODX文件以支持完整服务解析,否则依赖Basic Diagnostic手动定义‌。
  • 错误处理‌:诊断超时可调整Diagnostic Parameters中的重传机制,或在CAPL中捕获on errorFrame事件‌。
  • 会话权限‌:默认会话权限受限,扩展会话需成功执行$27安全访问才能操作高权限服务‌
http://www.lryc.cn/news/600020.html

相关文章:

  • SpringBoot学习路径--SpringBoot的简单介绍和项目搭建
  • c++注意点(13)----设计模式(抽象工厂)
  • 医疗器械:DFEMA和PFEMA
  • 从数据脱敏到SHAP解释:用Streamlit+XGBoost构建可复现的川崎病诊断系统
  • [NLP]一个完整的 UPF 文件示例
  • 文心4.5横向对标全球大模型:技术突破与应用前景深度分析
  • OSPF 路由协议多区域
  • 利用Dify实现应用日志关键信息提取之实践
  • 九联UNT413AS_晶晨S905L3S芯片_2+8G_安卓9.0_线刷固件包
  • RK3588 HDMI-RX 驱动、RGA 加速与 OpenCV GStreamer 支持完整指南
  • React性能优化终极指南:memo、useCallback、useMemo全解析
  • 堆(Heap)优先级队列(Priority Queue)
  • python基础:request模块简介与安装、基本使用,如何发送get请求响应数据,response属性与请求头
  • 《计算机组成原理与汇编语言程序设计》实验报告一 基本数字逻辑及汉字显示
  • 机器学习详解(28):LightGBM原理
  • Linux系统编程——进程
  • 腾讯云CodeBuddy+微信小程序:5分钟开发番茄小闹钟
  • IPv6,你开始使用了吗?
  • 学习日志18 python
  • 从入门到进阶:JavaScript 学习之路与实战技巧
  • [科普] 快速傅里叶变换(FFT)和离散傅里叶变换(DFT)的差异
  • JDK8保姆级安装教程
  • 微观低代码
  • 前端项目组成
  • 【DeepRare】疾病识别召回率100%
  • Linux parted问题:指定分区边界失效
  • HTTP响应状态码详解
  • Java 常用数据库详解
  • 数据结构 之 【排序】(递归实现快速排序)
  • 【补题】Codeforces Round 735 (Div. 2) B. Cobb