今天想到一个在诊断和通信开发过程中的小点,原始值和物理值。
熟悉DBC的朋友知道,我们在DBC的Signal属性中,有一项是对其signal的数值属性做配置,如图所示。
我们主要关心的一般是length、factor、offset,那么根据该属性配置可得物理值和原始值的关系为:
Physics= Factor * Raw + Offset
Raw就为实际上就是ECU中传递的值,而Physics即为真实的物理值,即CANoe根据DBC解析完,具体的物理量。
而在诊断中,诊断描述文件,即CDD文件中,对于DID线性数据类型中,也存在一个类似的转换关系:
Physics= Factor/Divsor * Data +Offset
很多场景下,主机厂要求把某个信号值以诊断DID的形式汇报出来,而CDD中定义的参数和DBC中的不同,那么应该怎么办呢。
首先,我们需要明确,诊断从总线拿过来的值就是原始值Raw,那么在两边参数不同的情况下,那就必须再人为加一层转换。
例如DBC中定义Factor为0.5,offset为10,那么根据公式物理值为
Physics = 0.5* Raw + 10
而CDD中为:
Physics = 2 * Data + 5
已知两边的物理值相等,那么Data为
Data = 0.25 *Raw +2.5
因此,我们需要诊断DID函数中,将从总线上的值乘上0.25再加2.5,这样的话CANoe诊断台根据CDD所解析的物理量才能与总线根据DBC解析的保持一致。