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!";

}

}

}

相关推荐
派大鑫wink2 分钟前
Stream 流:简化集合操作的利器
java·开发语言
小小8程序员5 分钟前
除了 gcc/g++,还有哪些常用的 C/C++ 编译器?
c语言·开发语言·c++
亓才孓6 分钟前
java中的Math.Radom拓展
开发语言·python·算法
lkbhua莱克瓦246 分钟前
基础-SQL-DQL
java·开发语言·数据库·笔记·mysql·dql
laocooon52385788610 分钟前
Rust 编程语言教学目录
开发语言·后端·rust
lkbhua莱克瓦2410 分钟前
基础-SQL-DCL
开发语言·数据库·笔记·mysql·dcl
小希smallxi11 分钟前
Rust语言入门
开发语言·后端·rust
希望_睿智38 分钟前
实战设计模式之中介者模式
c++·设计模式·架构
悟能不能悟1 小时前
JAVA 对象转为二级制流,再转化为base64
java·开发语言
进击的前栈2 小时前
Flutter跨平台网络图片缓存库cached_network_image鸿蒙化适配指导手册
开发语言·网络·rust