【问题标题】:Temperature Conversion 2 byte温度转换 2 字节
【发布时间】:2014-09-09 08:29:05
【问题描述】:

我很难在温度中转换两个字节。 我有一个控制单元(温度传感器),我可以在其中收到带有两个字节的温度消息。

1) 示例:

message: [ 40 ][ 25 ]
LSBYTE : [ 40 ]
MSBYTE : [ 25 ]
0.03125 C/bit
temperature: 25C° ( seen from the display of the control unit )

2) 示例:

message: [ 40 ][ 26 ]
LSBYTE : [ 40 ]
MSBYTE : [ 26 ]
0.03125 C/bit
temperature: 30C° ( seen from the display of the control unit )

3) 示例:

message: [ 20 ][ 26 ]
LSBYTE : [ 20 ]
MSBYTE : [ 26 ]
0.03125 C/bit
temperature: 32C° ( seen from the display of the control unit )

4) 示例:

message: [ c0 ][ 25 ]
LSBYTE : [ c0 ]
MSBYTE : [ 26 ]
0.03125 C/bit
temperature: 29C° ( seen from the display of the control unit )

我不知道如何将消息转换为温度。

我请求您的支持。 谁能给我一个解决方案,它可以在我的项目中协作(创建一个应用程序android来接收来自控制单元的消息)

【问题讨论】:

    标签: android temperature can-bus


    【解决方案1】:

    这只是Little endian 字节顺序。您最重要的字节将是 MSB。看起来它本身就是摄氏温度。所以简单地这样读(请原谅伪代码):

    var msbyte = read() // whatever you need to get the value
    var lsbyte = read() // whatever you need to get the value
    
    var temperature = msbyte
    temperature += (lsbyte / 100)
    

    在你的情况下,它只是 25.40C°

    【讨论】:

    • 感谢您的回复,但它不是正确的公式,因为采取另一条消息:[40][26] 温度是 30 C°
    【解决方案2】:

    它似乎在高字节中为您提供了整个温度,而在低字节中为您提供了分数。那将是 25.15625 (25 + 40/256)。

    我不知道 0.03125 C/bit 是从哪里来的。这意味着 16 位 = 0.5C。好像是废话。

    另一种可能的解释是 0.03125 * 总 = 摄氏度。如果 MSB 为 25,LSB 为 40,则总和为 201.25 度。所以……可能不对。

    编辑: 0.03125 = 1/32

    您的所有点都没有使用最后 5 位。那是小数部分。取高字节,低字节,右移 5 位,然后减去 273(用于开尔文到 C 的转换)。

    【讨论】:

    • 感谢您的回复,但这不是正确的公式,因为收到另一条消息:'[40][26] 温度为 30 C°
    • 相信您的模块的数据表在这里会有所帮助。
    • 你的数据没有意义。它甚至不是线性的。但是,如果您取完整的 2 字节数字并乘以 0.03125,则它接近开尔文量。
    • (MSBYTE*256 + LSBYTE)/32 - 273
    • 解决方案是:如果我有一个示例消息:[20][26] 并且温度为 32C°,则公式为:十进制的 2620 为 9760 (9760 * 0.03125)-273.15= 31.85 = 32C°
    【解决方案3】:

    解决方案是:如果我有一个示例消息:[20][26] 并且温度为 32C° 公式是:十进制的 2620 是 9760 (9760 * 0.03125)-273.15= 31.85 = 32C°

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多