字节序与Modbus通信-RZMPU工业控制教程连载(29)

瑞萨MCU小百科 2024-10-23 14:05

10.4.7 字节序和大小端


Modbus中传输的数据,按照“大字节序”来传输,比如:


寄存器数值是0x1234,先传输0x12,再传输0x34。


在Modbus寄存器中,对于一个由2字节组成的16数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址为小端(Little-Endian)字节序;另一种方法是将高序字节存储在起始地称为大端(Big-Endian)字节序。Modbus通信协议中具体规定了字节高低位发送顺序,这样就自然引出了字节序和大小端的问题。


①什么是大端:

所谓大端,是指数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中。


②什么是小端:

所谓小端,是指数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中。


③为什么会有大小端:

计算机系统是以字节为单位的,每个地址单元都对应着1个字节,一个字节为8bit。但在C语言中除了8bit的char类型,还有16bit的short类型和32bit的long类型,还有就是对于位数大于8位的处理器,如16位或32位的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式的出现。


低位字节和高位字节:比如123456其中的1就是高位数字,6就是低位数字。


举一个例子,在32位数字0x12345678在内存中的表示形式为:


1)大端模式:

低地址

——

——

高地址

0x12

0x34

0x56

0x78


2)小端模式:

低地址

——

——

高地址

0x78

0x56

0x34

0x12



10.4.8 Modbus报文分析


在第二章中我们已经生成了一个报文,我们就拿此报文来逐步分析一下,报文如下:


我们可以看到上面报文都是循环发送的,这样看起来不太容易分析,摘抄下来其中一组来给大家分析:


发送:

从机
地址

功能码

起始地址高位

起始地址低位

寄存器数量高位

寄存器数量低位

CRC
高位

CRC低位

01

03

00

00

00

0A

C5

CD


响应:

从机地址

功能码

返回字节数

数据位

CRC高位

CRC低位

01

03

14

00 42…

CF

10


这里我们就以03功能码为例来分析一下报文:

  • 03发送报文格式:从机地址+功能码+加起始地址+寄存器数量+CRC校验

  • 03接受报文格式:从机地址+功能码+字节数+具体数据+CRC校验


首先我们看一下发送报文:

从机地址是01,功能码03,起始地址00,寄存器数量是十六进制0A也就是10,和门设置的是一样的,我们来对对照一下我们设置的参数:


我们再来看一下接收报文:

从机地址是01,功能码03,返回字节数是十六进制14也就是返回20给字节,我们发送是个返回20个字节也是对的上的,第一个数据位是00 42也是和我们发送的可以对上,十六机制42,也就66,我们来看一下我们之前设置的参数:


10.4.9 Moubus TCP消息帧格式


1. 协议描述

在Modbus TCP/IP中,串行链路中的主/从设备分别演变为客户端/服务器端设备,即客户端相当于主站设备,服务器端设备相当于从设备。基于TCP/IP网络的传输特性,串行链路上一主多从的机构也演变为多客户端/多服务器端的构造模型。Modbus协议在TCP/IP上的实现是在TCP/IP层上的应用,它需要一个完整的TCP/IP栈作为支撑,Modbus TCP/IP服务器端通常使用端口502作为接收报文的端口。


下图为Moubus TCP的通讯结构:


ModbusTCP与ModbusUDP的报文格式是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的协议进行分析,ModbusTCP与ModbusRtu(ModbusASCII)之间的区别如下图:


从上图可以看出,ModbusTCP在Modbus串行通信的基础上,去除了校验(由于TCP本身就带有校验和)和设备地址(ModbusTCP弱化了设备地址,用IP地址来取代),再加上MBAP报文头(占7bytes),下面针对MBAP进行分析说明:


事务处理标识符:

事务处理标识用于在查询报文与未来响应之间建立联系。因此,对TCP/IP连接来说,在同一时刻这个标识符必须是唯一的。有以下几种使用此标识符的方式。


例如,可以将传输标识作为一个带有计数器的简单“TCP发送顺序号”,在每个请求发送时自动+1;也可以用作智能索引或指针,用来识别事务处理的内容,以便记忆当前的远端服务器和未处理的请求。


服务器端可接收的请求数量取决于其容量,即服务器资源量和TCP窗口尺。


同样,客户端同时启动事务处理的数量也取决于客户端的资源容量。


单元标识符:

在对Modbus或Modbus+等串行链路子网中的设备进行寻址时,这个域用于路由的目的。在这种情况下,单元标识符(Unit Identifier)携带一个远端设备的Modbus从站地址。


如果Modbus服务器连接到Modbus+或Modbus串行链路子网,并通过一个网桥或网关配置这个服务器的IP地址,则Modbus单元标识符对识别连接到网桥或网关后的子网的从站设备是必需的。TCP连接中的目的IP地址识别了网桥本身的地址,而网桥则使用Modbus单元标识符将请求转交给正确的从站设备。分配给串行链路上的Modbus从站设备地址为1~247(十进制),地址0作为广播地址。


对单纯的Modbus TCP/IP设备来说用IP地址即可寻址Modbus服务器端设备,此时Modbus单元标识符是无用的,必须使用值0xFF填充。当对直接连接到TCP/IP网络上的Modbus服务器寻址时,建议不要在“单元标识符”域使用有效的Modbus从站地址。


以上是MBAP报文头个字段含义的详细说明。


实际上,在Modbus TCP/IP传输过程中,服务端(从机)返回的响应报文中同样包含MBAP报头,除了Length字段外,其他字段均与客户端一致。Modbus消息TCP/IP层提供,不需要像串行链路那样自己判断一帧是否结束,所有数据传输均由TCP/IP层处理。因为底层TCP/IP确保了端到端的连接,而且TCP/IP链路层已确保传输数据的准确性,所以Modbus TCP/IP中已不再需要LRC或CRC等校验功能。


2. 查询与响应报文示例

对于Modbus TCP消息帧格式,下面举例说明各部分的含义。


①查询报文:00 00 00 00 00 06 09 03 00 04 00 01。

1)0x06:后续还有6字节。

2)0x09:单元标识符为9。

3)0x03:功能码3,即读保持寄存器的值。

4)0x00 0x04:Modbus起始地址4(即40005)。

5)0x00 0x01:读取寄存器个数为1。


②响应报文:00 00 00 00 00 05 09 03 02 00 05。

1)0x05:表示后续还有5字节。

2)0x09:同查询报文,单元标识符。

3)0x03:功能码,同查询报文。

4)0x02:返回数据字节数。

5)0x00 0x05:寄存器的值。


可见,在Modbus TCP模式下,差错校验字段已不复存在。但在某些特殊场合,例如串行Modbus协议转Modbus TCP的情况下,串行协议数据可以完整地装载到Modbus TCP的数据字段,这时CRC或LRC差错校验字段仍然存在。例如,Modbus RTU Over TCP/IP或Modbus ASCII Over TCP/IP等。


需要技术支持?

如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/



未完待续


推荐阅读

学习Modbus的快速方法 - RZ MPU工业控制教程连载(23)


初识Modbus - RZ MPU工业控制教程连载(24)

虚拟串口与Modbus互联 - RZ MPU工业控制教程连载(25)

更多精彩,敬请关注


评论
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 45浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 66浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 73浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 73浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 66浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 110浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 79浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 72浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 166浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 76浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦