3. Dem配置工具操作:EB tresos/Vector DaVinci中Dem模块的配置界面、新建事件容器、配置事件参数
好,咱们直接进入正题。上一章我们把Dem的架构和事件存储逻辑理清了,这一章就该动手了。说白了,配置工具就是咱们和AUTOSAR Dem模块之间的翻译官。你写代码它不认,你得在图形界面里把参数填好,它才能生成正确的代码。
我个人习惯用EB tresos和Vector DaVinci这两款工具。市面上主流项目基本就这两家。别担心,核心逻辑是相通的。你只要理解了一个,另一个上手就是分分钟的事。
3.1 配置工具界面初探
打开EB tresos,你会看到左侧有个模块列表。找到Dem,双击进去。嗯,界面长这样:
- 左侧树形结构:所有配置项按层级展开,像文件夹一样
- 右侧参数区:选中某个节点,右边就显示对应的参数
- 底部状态栏:显示配置是否有错误、警告
Vector DaVinci的布局也差不多,只是树形结构在左侧,参数在右侧。我第一次用DaVinci时还觉得不习惯,后来发现其实都一样——找到Dem模块,展开,开干。
3.2 新建事件容器(Event Container)
事件容器是什么?你可以把它理解成一个「故障事件的收纳盒」。每个DTC(诊断故障码)对应一个事件容器。比如你要监控「发动机水温过高」这个故障,就得先建一个容器。
操作步骤很简单:
- 在Dem模块下找到
DemEventParameter节点 - 右键 → New → DemEventParameter
- 给它起个名字,比如
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.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配置,如果你用了可扩展配置
我见过有人手痒去改这些生成文件,结果下次重新生成时全被覆盖了。记住:永远不要手动修改生成代码。要改参数,回工具里改,再重新生成。
3.6 本章知识体系
为了让你更直观地理解整个配置流程,我画了一张图:
这张图把整个配置流程串起来了。你按这个顺序走,基本不会漏掉什么。记住:新建容器 → 填DTC → 选策略 → 配存储 → 生成代码,五步走完,一个事件就配好了。
嗯,这一章的内容就到这。配置工具操作其实不难,难的是理解每个参数背后的意义。你多配几个事件,自然就熟了。下次遇到新项目,你闭着眼睛都能把Dem配起来。