3. Dem配置工具操作:EB tresos/Vector DaVinci中Dem模块的配置界面、新建事件容器、配置事件参数

好,咱们直接进入正题。上一章我们把Dem的架构和事件存储逻辑理清了,这一章就该动手了。说白了,配置工具就是咱们和AUTOSAR Dem模块之间的翻译官。你写代码它不认,你得在图形界面里把参数填好,它才能生成正确的代码。

我个人习惯用EB tresos和Vector DaVinci这两款工具。市面上主流项目基本就这两家。别担心,核心逻辑是相通的。你只要理解了一个,另一个上手就是分分钟的事。

3.1 配置工具界面初探

打开EB tresos,你会看到左侧有个模块列表。找到Dem,双击进去。嗯,界面长这样:

  • 左侧树形结构:所有配置项按层级展开,像文件夹一样
  • 右侧参数区:选中某个节点,右边就显示对应的参数
  • 底部状态栏:显示配置是否有错误、警告

Vector DaVinci的布局也差不多,只是树形结构在左侧,参数在右侧。我第一次用DaVinci时还觉得不习惯,后来发现其实都一样——找到Dem模块,展开,开干。

小技巧:EB tresos里按F5可以刷新配置,有时候改了参数没生效,刷新一下就好了。我因为这个浪费过半小时。

3.2 新建事件容器(Event Container)

事件容器是什么?你可以把它理解成一个「故障事件的收纳盒」。每个DTC(诊断故障码)对应一个事件容器。比如你要监控「发动机水温过高」这个故障,就得先建一个容器。

操作步骤很简单:

  1. 在Dem模块下找到 DemEventParameter 节点
  2. 右键 → New → DemEventParameter
  3. 给它起个名字,比如 DemEvent_EngineOverTemp

名字怎么起?我建议用 DemEvent_ 前缀 + 功能描述。这样后期维护时,一眼就能看出这个事件是干嘛的。我曾经在一个项目里见过有人用 Event1、Event2 这种名字,三个月后他自己都忘了哪个是哪个。

关键点:事件容器的名称会直接生成到代码中,成为宏定义。比如 DemEvent_EngineOverTemp 会变成 #define DemConf_DemEventParameter_DemEvent_EngineOverTemp。所以命名一定要规范。

3.3 配置事件参数——核心参数详解

建好容器只是第一步。真正的活儿在于填参数。每个事件容器有几十个参数,但常用的就这几个。我挑重点说。

3.3.1 DTC数值

这是最基础的。每个故障码对应一个DTC,比如P0115(发动机水温传感器故障)。在工具里找到 DemDtc 参数,填进去就行。

注意格式:有的工具要求填16进制,比如 0x0115;有的要求填10进制。我建议统一用16进制,不容易出错。

3.3.2 故障类型(Debounce Strategy)

这个参数决定了故障怎么确认。说白了就是:故障信号出现多久,我才认为真的坏了?

常见的有两种:

策略类型 说明 适用场景
DEBOUNCE_COUNTER_BASED 基于计数器。信号异常一次,计数器+1;正常一次,计数器-1。达到阈值就确认故障。 间歇性故障,比如线束接触不良
DEBOUNCE_TIME_BASED 基于时间。信号异常持续超过设定时间,就确认故障。 持续性故障,比如传感器彻底损坏

我个人习惯:对于安全相关的故障(比如刹车系统),用时间基策略,更可靠。对于一般性故障,用计数器策略,可以滤掉毛刺。

避坑指南:我曾经在一个项目里把计数器阈值设得太小(3次),结果车辆过个减速带就报故障。后来改成10次,问题解决。阈值设置一定要结合实车测试。

3.3.3 存储属性(Storage Condition)

这个参数决定故障要不要存到NVM(非易失性存储器)里。说白了就是:断电后故障还在不在?

  • DemEventMemoryType:选 DEM_EVENT_MEMORY_TYPE_PRIMARY 表示存到主存储区(掉电不丢失)
  • DemEventMemorySize:分配存储空间,一般给4字节就够了

注意:不是所有故障都需要存储。比如一些临时性的诊断事件,只用于调试,存到NVM里反而浪费空间。

3.3.4 老化计数器(Aging Counter)

这个参数很多人忽略,但它很重要。老化计数器决定了故障在「不出现」的情况下,多久会被自动清除。

比如你设置老化计数器为40,车辆每运行一个驾驶循环,计数器减1。减到0时,故障自动从历史故障中移除。

我建议:对于偶发故障,老化计数器设大一点(比如80~100),避免频繁清除导致用户投诉「故障灯亮了又灭」。对于严重故障,设小一点(比如10~20),让维修人员能快速定位。

3.4 配置示例(EB tresos)

光说理论不行,咱们看个实际配置。假设我要配置一个「发动机水温过高」的故障:

// 在DemEventParameter下新建事件容器
DemEventParameter DemEvent_EngineOverTemp {
    DemDtc = 0x0115;                    // P0115
    DebounceStrategy = DEBOUNCE_TIME_BASED;
    DebounceTime = 500;                 // 单位ms,持续500ms异常才确认
    EventMemoryType = DEM_EVENT_MEMORY_TYPE_PRIMARY;
    EventMemorySize = 4;
    AgingCounter = 40;                  // 40个驾驶循环后自动清除
    Enabled = TRUE;                     // 启用该事件
}

在Vector DaVinci里,配置界面虽然不同,但参数名基本一致。你找到 DemEventParameter,填同样的值就行。

3.5 配置后的代码生成

配置完成后,工具会生成一堆代码。你不需要手动修改这些文件,但要知道它们在哪:

  • Dem_Cfg.h:所有宏定义,比如事件ID、DTC数值
  • Dem_Cfg.c:配置表,工具根据你的参数生成
  • Dem_PB.c:Post-Build配置,如果你用了可扩展配置

我见过有人手痒去改这些生成文件,结果下次重新生成时全被覆盖了。记住:永远不要手动修改生成代码。要改参数,回工具里改,再重新生成。

我的习惯:每次生成代码后,我会用版本管理工具(比如Git)对比一下前后差异。这样能及时发现「咦,这个参数怎么变了?」。有一次我发现同事不小心把某个DTC改错了,就是靠对比发现的。

3.6 本章知识体系

为了让你更直观地理解整个配置流程,我画了一张图:

Dem事件配置核心流程 1. 新建事件容器 DemEventParameter 2. 配置DTC数值 如 0x0115 (P0115) 3. 配置防抖策略 时间基 / 计数器基 4. 配置存储属性 MemoryType / MemorySize / AgingCounter 5. 生成代码 Dem_Cfg.h / Dem_Cfg.c / Dem_PB.c ⚠️ 常见注意事项 • 命名规范:DemEvent_前缀 + 功能描述 • 阈值设置:结合实车测试,避免误报 • 存储空间:非必要不存NVM,节省资源 • 生成代码:永远不要手动修改 • 版本对比:每次生成后检查差异

这张图把整个配置流程串起来了。你按这个顺序走,基本不会漏掉什么。记住:新建容器 → 填DTC → 选策略 → 配存储 → 生成代码,五步走完,一个事件就配好了。

嗯,这一章的内容就到这。配置工具操作其实不难,难的是理解每个参数背后的意义。你多配几个事件,自然就熟了。下次遇到新项目,你闭着眼睛都能把Dem配起来。


可可精品资料库