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

}

}

}

相关推荐
拉姆哥的小屋8 小时前
从400维向量到160000维矩阵:基于深度学习的火焰参数预测系统全解析
开发语言·人工智能·python·深度学习·线性代数·算法·矩阵
雨落在了我的手上8 小时前
C语言入门(二十八):动态内存管理(2)
c语言·开发语言
矢鱼8 小时前
python中对应c++容器的结构
开发语言·c++·python·算法
Doris8938 小时前
【JS】JS进阶--编程思想、面向对象构造函数、原型、深浅拷贝、异常处理、this处理、防抖节流
开发语言·javascript·ecmascript
Clarence Liu8 小时前
golang 剖析 sync包
开发语言·golang
柒儿吖8 小时前
Perl在鸿蒙PC上的使用方法
开发语言·harmonyos·perl
qq_310658518 小时前
mediasoup源码走读(十一)——consumer
服务器·c++·音视频
m5655bj8 小时前
使用 C# 设置 Word 段落对齐样式
开发语言·c#·word
埃伊蟹黄面8 小时前
字符串算法精要与例题汇编
c++·算法·leetcode·字符串
福尔摩斯张8 小时前
基于TCP的FTP文件传输系统设计与实现(超详细)
linux·开发语言·网络·网络协议·tcp/ip·udp