当前位置:网站首页 > 编程语言 > 正文

modbus报文实例(modbus报文详解)



Modbus学习记录(2)——报文格式分析

  • 三种通讯方式的报文格式
  • 以太网(modbus tcp/ip)
  • modbus tcp/ip通信方式
  • 通信过程
  • 异步串行传输的两种传输方式(modbus RTU和modbus ASCII)
  • Modbus的四种数据类型
  • 数据解析

  Modbus协议的报文(或帧)的基本格式是:表头 + 功能码 + 数据区 + 校验码

  功能码和数据区在不同类型的网络都是固定不变的,表头和校验码则因网络底层的实现方式不同而有所区别。表头包含了从站的地址,功能码告诉从站要执行何种功能,数据区是具体的信息。

  对于不同类型的网络,Modbus的协议层实现是一样的,区别在于下层的实现方式,常见的有TCP/IP和串行通讯两种。

  Modbus TCP基于以太网和TCP/IP协议,Modbus RTU和Modbus ASCII则是使用异步串行传输(通常是RS-232/422/485)。

modbus报文解析实例 java modbus协议报文类型_网络

  对于Modbus TCP而言,主站通常称为Client,从站称为Server;而对于Modbus RTU和Modbus ASCII来说,主站是Master,从站是Slave。

  ModbusTCP的数据帧可分为两部分:ADU=MBAP+PDU = MBAP + 功能码 + 数据域,MBAP 7byte,功能码1byte,数据域不确定,由具体功能决定。

modbus报文解析实例 java modbus协议报文类型_modbus报文解析实例 java_02

modbus报文解析实例 java modbus协议报文类型_学习_03

modbus报文解析实例 java modbus协议报文类型_modbus报文解析实例 java_04

modbus报文解析实例 java modbus协议报文类型_网络_05

(2)、Slave地址换成了Unit Identifier。当网络里的设备全是使用TCP/IP,这个地址是没有意义的,因为IP就能进行路由寻址。如果网络里还有串行通讯的设备,则需要网关来实现Modbus TCP到Modbus RTU或ASCII之间的协议转换,这时用Unit Identifier来标识网关后面的每个串行通讯设备。

(3)、Length是指后面的字节总数。实际上数据区的长度是能确定的,有的功能码就可以确定数据区的长度,有的功能码虽不能确定数据区长度,但是数据区有字节计数,参见上文举的从站应答的例子。表头增加的Length是为了应对有些情况下TCP/IP协议会将应用层的数据拆包传输。

(4)、Transaction Identifier和Protocol Identifier由Client生成,Server的响应将复制这些参数。

modbus tcp/ip通信方式

  Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。

  • 主站请求:功能码+数据
  • 从站正常响应:请求功能码+响应数据
  • 从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型
  • 注意:需要超时管理机制,避免无期限的等待可能不出现的应答

  IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。

通信过程

  1. connect 建立TCP连接
  2. 准备Modbus报文
  3. 使用send命令发送报文
  4. 在同一连接下等待应答
  5. 使用recv命令读取报文,完成一次数据交换
  6. 通信任务结束时,关闭TCP连接

modbus报文解析实例 java modbus协议报文类型_TCP_06

modbus报文解析实例 java modbus协议报文类型_学习_07

  • 输出线圈:大小只有1bit,ON或OFF,可读可写,既可以是一个输出量输出点,也可以是数字量输入点,有效的地址范围是1-9999。
  • 输入离散量:大小只有1bit,ON或OFF,只读,即数字量输出点,有效地址范围是10001-19999。
  • 输入寄存器:16bit的寄存器,只读,可以用作模拟量或16位打包输入点,有效地址范围是30001-39999。
  • 保持寄存器:16bit的寄存器,可读可写,既可以是一个模拟量或16位打包输入点,也可以是模拟量或16位打包输出点,有效地址范围是40001-49999。
    在PLC或DCS上用点名标记不同的变量,在Modbus则以数据地址来标记每个点。以上所说的地址都是参考地址,而不是实际的物理地址。上述的地址是在设备中的地址,按照PLC的习惯从1开始递增,而Modbus报文中是从0开始递增。例如地址偏移为4、5、6的Holding Register,其实是指参考地址是40005、40006、40007的寄存器。

modbus报文解析实例 java modbus协议报文类型_学习_08

modbus报文解析实例 java modbus协议报文类型_网络协议_09

modbus报文解析实例 java modbus协议报文类型_学习_10

modbus报文解析实例 java modbus协议报文类型_modbus报文解析实例 java_11

到此这篇modbus报文实例(modbus报文详解)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 转盘小程序在线使用(转盘小程序在线使用下载)2025-06-16 09:54:06
  • jflash命令行烧录程序(jflash命令一键烧录)2025-06-16 09:54:06
  • libxml2官网(libxml2 windows)2025-06-16 09:54:06
  • ip域名解析138(ip域名解析在线)2025-06-16 09:54:06
  • 华为模拟器(华为模拟器查看vlan命令)2025-06-16 09:54:06
  • 招标拆包是什么意思(怎么区别是否拆包招标)2025-06-16 09:54:06
  • ewh什么意思(ewq是什么意思)2025-06-16 09:54:06
  • 瓦罗兰特代码84(瓦罗兰特代码57)2025-06-16 09:54:06
  • 安装windows失败怎么办(安装windows失败无法开机)2025-06-16 09:54:06
  • 双系统卸载win(双系统卸载linux系统)2025-06-16 09:54:06
  • 全屏图片