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

}

}

}

相关推荐
q***25120 分钟前
java进阶1——JVM
java·开发语言·jvm
望眼欲穿的程序猿20 分钟前
Win系统Vscode+CoNan+Cmake实现调试与构建
c语言·c++·后端
while(1){yan}21 分钟前
线程的状态
java·开发语言·jvm
豐儀麟阁贵23 分钟前
8.3 Java常见的异常类
java·开发语言
lzh2004091928 分钟前
【C++STL】List详解
开发语言·c++
q***448131 分钟前
Java进阶10 IO流
java·开发语言
luoyayun36135 分钟前
Qt/C++ 线程池TaskPool与 Worker 框架实践
c++·qt·线程池·taskpool
济宁雪人37 分钟前
Java安全基础——文件系统安全
java·开发语言·安全
Charles_go38 分钟前
C#中级46、什么是模拟
开发语言·oracle·c#
20岁30年经验的码农42 分钟前
Java RabbitMQ 实战指南
java·开发语言·python