modbus 的float与uint_16的转换
float values = 0.5; // 要写入的值
uint16_t wdata[2]{ 0 };
modbus_set_float(values, wdata);
// 写多个寄存器
int rc = modbus_write_registers(ctx, 8194, 2, wdata);
if (rc == -1) {
// 写操作失败,处理错误
fprintf(stderr, "Failed to write registers: %s\n", modbus_strerror(errno));
modbus_close(ctx);
modbus_free(ctx);
ctx = nullptr;
// 可能还需要更新UI以反映连接状态
}
else {
qDebug() << "Registers written successfully.";
// 读取写入的寄存器以验证
uint16_t rdata[2] = { 0 };
rc = modbus_read_registers(ctx, 8194, 2, rdata);
if (rc == -1) {
// 处理读取错误
}
else {
float read_value = modbus_get_float(rdata); // 假设这个函数正确处理了字节序
qDebug() << "Read value:" << read_value;
// 验证读取的值是否与写入的值相同
if (fabs(read_value - values) < 0.0001) {
qDebug() << "Read and written values match.";
}
else {
qDebug() << "Read and written values do not match!";
}
}
}