首页 > 解决方案 > CAPL - 将 4 个原始字节转换为浮点数

问题描述

CAPL - 向量。

我收到消息 ID 0x110,其中包含当前信息:

0x3E6978D5 -> 0.228

目前我可以读取数据并保存到环境变量中以显示在面板中使用:

putValue(slow_current, this.long(4));

但我不知道如何将 HEX 4 字节转换为浮点变量,因为我不能使用地址或强制转换 (float* x = (float *)&vBuffer;)

如何在 CAPL 脚本中进行这种转换?谢谢。

标签: type-conversioncapl

解决方案


通常,您的 dbc 文件应包含从原始值(在您的情况下为 4B 长)到因子和偏移定义形式的物理值的转换信息:

dbc-文件编辑器++截图

因此,您的电流物理值应计算如下:phys_val = (raw_value * factor) + offset

注意:如果您定义负偏移量,那么您实际上是在上面的等式中减去它。

但是您似乎没有 dbc 文件,因此您需要自己计算因子和偏移量(如果您有 2 个示例原始值并知道它们的物理等价物,那么它应该像查找线性方程参数一样简单 -> y =斧头 + b)。

CAPL 应如下所示:

variables

{
    float current_phys;
    /* adjust below values to your needs */
    float factor = 0.001 
    dword offset = -1000
}
on message 0x110
{
    current_phys = (this.long(4) * factor) + offset;
    write(current_phys);
}

推荐阅读