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

}

}

}

相关推荐
风味蘑菇干10 分钟前
使用接口定义规范,实现类完成具体逻辑。
java·开发语言
MATLAB代码顾问10 分钟前
【智能优化】无穷优化算法(INFO)原理与Python实现
开发语言·python·算法
Bruce_kaizy14 分钟前
c++ linux环境编程——从应用层到linux内核深入了解文件io的调用机制(爆肝)
linux·c++·c·嵌入式linux·文件io
2401_8332693019 分钟前
Java多线程:从入门到进阶
java·开发语言
z2005093021 分钟前
C++中的右值引用
开发语言·c++
SilentSamsara22 分钟前
迭代器协议:`__iter__` / `__next__` 的完整执行流程
开发语言·人工智能·python·算法·机器学习
平凡但不平庸的码农26 分钟前
Go Channel详解
开发语言·后端·golang
laomocoder30 分钟前
Project-Nexus-WAN-跨公网Agent对话
开发语言·php
子安柠31 分钟前
深入理解 Go 语言文件操作:从基础到最佳实践
开发语言·后端·golang
代码中介商31 分钟前
C++文件流操作全解析
开发语言·c++