当前位置: 首页 > news >正文

上位机与Modbus的32位数据交互

假如由Modbus TCP发出数据 0xAABBCCDD,上位机收到的字节流为 CC DD AA BB

在小端模式下,如果用2个uint16结构体解析此数据流,结果如下:

struct Foo
{uint16 r1;uint16 r2;
};char buffer[] = {0xCC, 0xDD, 0xAA, 0xBB};
struct Foo fo = *(struct Foo*)(buffer);assert(fo.r1 = 0xCCDD);
assert(fo.r2 = 0xAABB);

而如果用int32接收,因为低位地址在前,结果如下:

uint32 r = *(uint32*)(buffer)
assert(r == 0xBBAADDCC);

要得到原数,就需要调节字节顺序,

// 将由Modbus转换而来的32位数,转换到本机表示。
inline uint32 SwapByteInt32(uint32 v)
{// BBAADDCC => AABBCCDDreturn ((v & 0xFF000000) >> 8) |((v & 0x00FF0000) << 8) |((v & 0x0000FF00) >> 8) |((v & 0x000000FF) << 8);
}

同样,在上位机这边,如果要向Modbus写入一个32位值(这里值写入一个缓冲区):

void writeInt32(uint32 v)
{// AABBCCDD => [CC DD AA BB]buf[0] = (uint8)((v & 0x0000FF00) >> 8);buf[1] = (uint8)((v & 0x000000FF));buf[2] = (uint8)((v & 0xFF000000) >> 24);buf[3] = (uint8)((v & 0x00FF0000) >> 16);
}
http://www.lryc.cn/news/584618.html

相关文章:

  • 从Debug中学习MiniGPT4
  • 书生大模型实战营——1. 大语言模型原理与书生大模型提示词工程实践
  • 列表页与详情页的智能识别:多维度判定方法与工业级实现
  • uvm subscriber
  • 正向代理服务器Squid:功能、架构、部署与应用深度解析
  • [2025CVPR]CCFS:高IPC数据集蒸馏的课程式粗细筛选技术解析
  • 自动驾驶数据集综述:统计特征、标注质量与未来展望
  • (鱼书)深度学习入门2:手搓感知机
  • OpenAI正准备推出一款搭载人工智能功能的网络浏览器,试图直接挑战Alphabet旗下
  • chatgpt是怎么诞生的,详解GPT1到GPT4的演化之路及相关背景知识
  • 机器人接入AI的发展前景:从开发者视角看技术融合与生态构建
  • 【前端】接口日志追踪
  • NW710NW713美光固态闪存NW719NW720
  • React 自定义Hook——页面或元素滚动到底部监听 Hook
  • FFmpeg滤镜相关的重要结构体
  • FFmpeg Windows安装
  • JavaScript基础(三)
  • C++中的list的学习
  • 解析几何几百年重大错误:将无穷多各异圆盘(球)误为同一点集
  • kotlin中withContext,async,launch几种异步的区别
  • 目标检测中的评价指标计算
  • Spring Boot项目中大文件上传的高级实践与性能优化
  • 三维旋转沿轴分解
  • Java设计模式之行为型模式(观察者模式)介绍与说明
  • 约束-1-约束
  • selenium中xpath的用法大全
  • Web学习笔记2
  • [架构之美]虚拟机Ubuntu密码重置
  • nmap扫描指定网段中指定开放端口的主机(IP,mac地址)
  • Kafka的无消息丢失配置怎么实现