如图所示:
Long Inverse接收到的数据解析:
showData = array[0] << 16 | array[1];
Long 接收到的数据解析:
showData = array[1] << 16 | array[0];
Float Inverse接收到的数据解析:
float modbus_float_inverse(uint16_t value1, uint16_t value2)
{
float temp;
char *Modbus_HoldReg[4];
Modbus_HoldReg[0] = ((char*)(&temp)) + 3;
Modbus_HoldReg[1] = ((char*)(&temp)) + 2;
Modbus_HoldReg[2] = ((char*)(&temp)) + 1;
Modbus_HoldReg[3] = ((char*)(&temp)) + 0;
*Modbus_HoldReg[0] = (value1 >> 8) & 0xff;
*Modbus_HoldReg[1] = value1 & 0xff;
*Modbus_HoldReg[2] = (value2 >> 8) & 0xff;
*Modbus_HoldReg[3] = value2 & 0xff;
return temp;
}
或者
float modbus_float_inverse(uint8_t value1, uint8_t value2, uint8_t value3, uint8_t value4)
{
float temp;
char *Modbus_HoldReg[4];
Modbus_HoldReg[0] = ((char*)(&temp)) + 3;
Modbus_HoldReg[1] = ((char*)(&temp)) + 2;
Modbus_HoldReg[2] = ((char*)(&temp)) + 1;
Modbus_HoldReg[3] = ((char*)(&temp)) + 0;
*Modbus_HoldReg[0] = value1;
*Modbus_HoldReg[1] = value2;
*Modbus_HoldReg[2] = value3;
*Modbus_HoldReg[3] = value4;
return temp;
}
Float 接收到的数据解析:
float modbus_float(uint16_t value1, uint16_t value2)
{
float temp;
char *Modbus_HoldReg[4];
Modbus_HoldReg[0] = ((char*)(&temp)) + 3;
Modbus_HoldReg[1] = ((char*)(&temp)) + 2;
Modbus_HoldReg[2] = ((char*)(&temp)) + 1;
Modbus_HoldReg[3] = ((char*)(&temp)) + 0;
*Modbus_HoldReg[0] = (value2 >> 8) & 0xff;
*Modbus_HoldReg[1] = value2 & 0xff;
*Modbus_HoldReg[2] = (value1 >> 8) & 0xff;
*Modbus_HoldReg[3] = value1 & 0xff;
return temp;
}
Float发送数据解析:
float data = 12.5;
uint16_t write_regs[2] = {0};
memcpy(write_regs, &data, sizeof(float));
for(int i = 0 ; i < 2; i++) // ABCD模式
printf("data change write_regs[%d] = 0x%02x\n",i,write_regs[i]);
uint16_t t;
t = write_regs[0];
write_regs[0] = write_regs[1];
write_regs[1] = t;
for(int i = 0 ; i < 2; i++) // CDAB模式
printf("data change write_regs[%d] = 0x%02x\n",i,write_regs[i]);