当前位置: 首页 > 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.dtcms.com/a/272186.html

相关文章:

  • 嘿嘿嘿嘿嘿
  • C++---多态
  • Camera2API笔记
  • Unity WebGL文本输入
  • centos7 安装jenkins
  • jenkins部署springboot项目
  • 抽象类与接口:Java面向对象设计的两大支柱
  • 表达式索引海外云持久化实践:关键技术解析与性能优化
  • Spring Boot 整合 RabbitMQ
  • 【前端】接口日志追踪
  • 06.消息传递网络
  • 「日拱一码」023 机器学习——超参数优化
  • 判断当前是否为钉钉环境
  • 【Pandas】pandas DataFrame from_dict
  • 1.2.3_1 OSI参考模型
  • STM32F103C8T6单片机内部执行原理及启动流程详解
  • vue3实现pdf文件预览 - vue-pdf-embed
  • 力扣热门算法题 127.单词接龙,128.最长连续序列,130.被围绕的区域
  • MySQL数据库基础教程:从安装到数据操作
  • 快速合并多个CAD图形为单一PDF文档的方法
  • 常见 Docker 错误及解决方法
  • (vue)前端区分接口返回两种格式,一种Blob二进制字节流,一种常规JSON,且将blob响应转为json
  • 基于Catboost算法的茶叶数据分析及价格预测系统的设计与实现
  • 多元函数的切平面与线性近似:几何直观与计算方法
  • 高数附录(1)—常用平面图形
  • 《O-PAS™标准的安全方法》白皮书:为工业自动化系统筑起安全防线
  • msf复现永恒之蓝
  • 每日一SQL 【各赛事的用户注册率】
  • Datawhale AI 夏令营:基于带货视频评论的用户洞察挑战赛 Notebook(下篇)
  • 流媒体服务