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

}

}

}

相关推荐
三月微暖寻春笋2 分钟前
【和春笋一起学C++】(六十三)虚函数特性(二)
c++·基类·派生类·虚函数特性
历程里程碑2 分钟前
MySQL事务深度解析:ACID到MVCC实战+万字长文解析
开发语言·数据结构·数据库·c++·sql·mysql·排序算法
Lyyaoo.10 分钟前
【JAVA基础面经】native方法
java·开发语言
牛十二11 分钟前
nacos2.4连接出错源码分析
java·linux·开发语言
小松加哲19 分钟前
AspectJ编译期织入实战
java·开发语言
鲸渔20 分钟前
【C++ 跳转语句】break、continue、goto 与 return
开发语言·c++·算法
喜欢吃燃面1 小时前
Linux 进程信号深度解析:从概念到产生机制
linux·开发语言·学习
AI玫瑰助手1 小时前
Python基础:字符串的常用内置方法(查找替换分割)
android·开发语言·python
Foreer黑爷1 小时前
Java并发工具箱:CountDownLatch与CyclicBarrier使用指南
java·开发语言·jvm
syker1 小时前
AIFerric v2.0 项目总结报告
c语言·开发语言·c++