
UDS之Snapshot:全局快照和私有快照的区别和联系
《UDS基础:快照数据(Snapshot)格式详解》一文中有提到快照数据(Snapshot Data),前文主要侧重$19 04格式的解读。对于Snapshot,还有很多值得展开细说的点。本文进一步讨论全局快照(Global Snapshot)和私有快照(Local Snapshot)的联系和区别。
提示:UDS中快照数据用Snapshot Data表示,而Autosar规范中,快照数据用冻结帧(freeze frames)表示,两者本质一样。
1、为什么要区分全局快照和私有快照
展开讨论之前,先回顾一下Event、DTC、Snapshot、DID之间的关系,如下所示:
DID中的信息,实质就是软件中的一些变量,eg:里程数、全局时间、电池电压等。
额外补充,上位机(External Tester)读取DEM(Diagnostic Event Manager)管理的冻结帧(Freeze Frame)流程如下:
我们知道,Snapshot的存在是为了记录车辆故障时刻的瞬时信息,以便于售后维修。既然是瞬时故障信息,如果在一个驾驶循环内,同一个故障发生多次呢?到底记录哪次的故障信息更合适呢?
举例:在某个车辆驾驶循环内(Operation Cycle),同一个故障,多次触发(T0、T1、T2)快照数据存储。这种情况下,需要每次将快照数据都存储还是覆盖存储呢?
受限于MCU有限的存储空间,如果将每次发生的Snapshot均存储显然不太现实,但是,如果每次覆盖存储又不能知道第一次出现该故障的时间。所以,在实际的工程开发中,就出现了这样一种需求:某故障,第一次发生时(触发快照存储条件bit3=1),使用一个快照组(eg:0x20)存储一次快照信息,之后,此故障再次发生时(触发快照数据存储条件bit0 =1),使用另一个快照组(eg:0x21)覆盖存储(存储最新一次信息)此快照组的信息。注意:每组快照数据的存储触发条件可以不同,需要按照客户需求配置。
举例:某个事件(Event)关联一个DTC,此DTC关联两组快照数据(#20、#21)如下所示:
当监控的Event故障达到对应的成熟度(Failed)以后,状态掩码Bit0置位( = 1),对应的快照信息需要被存储。某个驾驶循环内,第一次故障时(T0时刻,bit0 = bit3 = 1),#20、#21快照信息均存储;如果此故障,在当前操作循环内再次发生(eg:T1、T2时刻),则只存储#21快照信息,且只保留最新一次的快照信息,示意如下:
工程上,如上的#20快照组习惯称为全局快照(Global DTC snapshot data),#21快照组习惯称为私有快照组(Local DTC snapshot data)。
一般来说,全局快照适用整车网络中的所有Public ECU,而私有快照适用Specific ECU。
2、全局快照和私有快照的区别与联系
(一)区别
一般来说,整车网络拓扑中,对于全局快照信息,每个节点均需要存储,而私有快照信息因节点不同,而略有区别。
举例:全局快照#20组包含三个信息(全局时间、里程数、电池电压),某个节点A的私有快照#21包含5个信息(全局时间、里程数、电池电压、左轮胎压传感器值、右轮胎压传感器值)。
(二)联系
私有快照信息中会包含全局快照信息,eg:全局快照包含全局时间、里程数、电池电压,私有快照不仅包含全局时间、里程数、电池电压,还会包含一些私有信息。
当然,如上的区别和联系并不是绝对的,具体到工程项目中,可能因客户不同,需求而有所区别。
3、Snapshot数据清除
清除内存中的快照数据(Snapshot Data)有两种方式:老化(Aging)或者$14服务(Clear Diagnostic Information Service)。示意如下:
提示:工程上,Aging/$14执行时,会清除与DTC关联的所有数据(Snapshot Data、Extended Data)。注意,清除的不仅仅是NVM中存储的信息,对应RAM区的信息也会清除。
文章转载自公众号:开心果 Need Car
