DBC中的factor和offset及其运算公式
文章目录
“factor”和“offset”简介
转换参数介绍:
在DBC文件中,“factor”和“offset”用于描述信号的转换参数。
- “factor”是转换系数,用于确定从原始值到物理值的转换比例。例如,如果要将原始速度值(如km/h)转换为物理速度值(如在报文中表示的车速),转换系数可能是256。
- “offset”是转换偏移量,用于定义转换过程中的一个常数偏移。例如,如果要在上述速度转换中加入一个偏移量,偏移量可能是50。
转换公式:
根据这些定义,可以使用以下公式进行转换:
物理值 = 原始值 * factor + offset
或
原始值 = (物理值 - offset) / factor
例如,假设实际车速为50.01km/h,转换系数为256,偏移量为50,则有:
50.01km/h * 256 + 50 = 12802.56 = (H)3202
结果,3202就是填充在CAN报文中的车速数据。
因此,“factor”和“offset”在DBC文件中用于描述和定义信号从原始值到物理值或从物理值到原始值的线性转换规则。
实际项目举例:
接收信号LatAcc:
信号LatAcc的定义:
信号LatAcc的代码解析:
comstatus = Com_ReceiveSignal(ComConf_ComSignal_LatAcc, &raw);
if(E_OK == comstatus)
{
LatAcc = ((raw * 0.01) + (-1.27));
}
发送信号JP_AccAxTar:
信号JP_AccAxTar的定义:
信号LatAcc的代码解析:
uint16 data;
#ifdef MINMAX_CHECK
if(JP_AccAxTar < -20.48) { JP_AccAxTar = -20.48;} // Min Value : -20.48
if(JP_AccAxTar > 20.47) { JP_AccAxTar = 20.47;} // Max Value : 20.47
#endif
data = ((uint16)(((JP_AccAxTar - (-20.48)) / 0.01)));
Com_SendSignal(((VAR(Com_SignalIdType, AUTOMATIC))ComConf_ComSignal_JP_AccAxTar), &data);