Arduino Modbus浮点转换

Arduino Modbus浮点转换,arduino,communication,modbus,Arduino,Communication,Modbus,我使用Arduino modbus库使用霍尔传感器测量串电流。这里下载了库。我有浮点值的传感器数据,库以整数格式存储值 问题: 如何将传感器值保存为整数格式 如何分配用户定义的地址。起始地址为4000h而不是0000H 代码 是否有其他库可以直接使用浮点 作为协议的Modbus不直接支持浮动。但是,您可以将浮点数据放入相邻的寄存器中。用于将浮点数据放入寄存器,然后从另一侧取出 union Pun {float f; uint32_t u;}; void encodeFloat(uint16_t

我使用Arduino modbus库使用霍尔传感器测量串电流。这里下载了库。我有浮点值的传感器数据,库以整数格式存储值

问题:

如何将传感器值保存为整数格式 如何分配用户定义的地址。起始地址为4000h而不是0000H 代码


是否有其他库可以直接使用浮点

作为协议的Modbus不直接支持浮动。但是,您可以将浮点数据放入相邻的寄存器中。用于将浮点数据放入寄存器,然后从另一侧取出

union Pun {float f; uint32_t u;};

void encodeFloat(uint16_t *regs, float x)
{
    union Pun pun;

    pun.f = x;
    regs[0] = (pun.u >> 16) & 0xFFFFU;
    regs[1] = pun.u & 0xFFFFU;
}

float decodeFloat(const uint16_t *regs)
{
    union Pun pun;

    pun.u = ((uint32_t)regs[0] << 16) | regs[1];
    return pun.f;
}
union Pun {float f; uint32_t u;};

void encodeFloat(uint16_t *regs, float x)
{
    union Pun pun;

    pun.f = x;
    regs[0] = (pun.u >> 16) & 0xFFFFU;
    regs[1] = pun.u & 0xFFFFU;
}

float decodeFloat(const uint16_t *regs)
{
    union Pun pun;

    pun.u = ((uint32_t)regs[0] << 16) | regs[1];
    return pun.f;
}
void Modbus_call()
{
    /*reading of coil where i can succefully read value*/
    encodeFloat(&au16data[ 0],  Current_Value1[0]);
    encodeFloat(&au16data[ 2],  Current_Value1[1]);
    encodeFloat(&au16data[ 4],  Current_Value1[2]);
    /* And so on... */
}