Modbus字节序说明

最近做ModBus TCP方面的测试有点多,尽管对于ModBus协议算是比较了解了,也经常知道字节传输序列的不同对工程师带来了很多不必要的麻烦,这不是一个技术难题,仅仅只是过去各家各户开发遗留下来的标准统一问题,所以这里写下这篇文章作为备忘。
在Modbus通信中,目前我们主要有16bit(AB)、32bit(AB CD)和最新的64bit(AB CD EF GH)三种数据长度。每个字母代表一个字节。
针对16bit传输,只存在正序(AB)或反序(BA)两种方式,也就所谓的正序先传高位,以及反序先传低位,为什么会出现这样的现象,可以联系堆栈处理的方式,不过这个不重要。
更多的应用场景针对的是双字32位数据传输。那么同样的正序(ABCD)以及反序(DCBA)似乎就够用了,但是却还有字节交换这样的问题,所以你经常会看到SWAP函数,这样的我们衍生出了以下四种排序方式。

  • Big-endian :ABCD
  • Little-endian :DCBA
  • Big-endian byte swap :BADC
  • Little-endian byte swap :CDAB

其中我们常以大小端排序来说明,例如Big-endian就是大端排序,先传递高位A依次传递到低位D。
所以在通讯中,收发到的数据不对,先要做的就是确定确定数据类型,其次要确定数据传输时的字节序是如何的,这有确保了这两点的正确性,才可以正确的解析出数据。

同理,针对64数据,我们也有四种传输方式:

  • Big-endian :AB CD EF GH
  • Little-endian :HG FE DC BA
  • Big-endian byte swap :BA DC FE HG
  • Little-endian byte swap :GH EF CD AB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值