假设你想传输的浮点数是123.456
,其在内存中的二进制表示为CD AB EF 12
(这是假设为大端序的情况,即最高有效字节先出现)。为了将其发送给Modbus设备,你需要将这32位拆分为两个16位的寄存器值CD AB
和EF 12
。
#include <stdint.h> void float_to_modbus_regs(float f, uint16_t *reg_high, uint16_t *reg_low) { uint32_t tmp; // 将浮点数转换为32位整数 memcpy(&tmp, &f, sizeof(tmp)); // 将32位整数拆分为两个16位的寄存器值 *reg_high = (tmp >> 16) & 0xFFFF; *reg_low = tmp & 0xFFFF; } // 使用示例 int main() { float value = 123.456; uint16_t high_reg, low_reg; float_to_modbus_regs(value, &high_reg, &low_reg); printf("High Register: 0x%04X\n", high_reg); printf("Low Register: 0x%04X\n", low_reg); return 0; }
请注意,上面的代码假定你的系统和Modbus设备都是使用大端序的。如果你的系统或设备使用小端序,你将需要在写入寄存器之前交换high_reg
和low_reg
的值。此外,你需要根据你的Modbus库的API来调整写入寄存器的具体实现