Modbus学习总结

来源:互联网 发布:怎么开淘宝充值店 编辑:程序博客网 时间:2024/06/05 10:00

一、Modbus协议

MODBUS是OSI模型第7层上(TCP/IP模型第5层)的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。

MODBUS 是一个请求/应答协议,并且提供功能码规定的服务。MODBUS 功能码是MODBUS请求/应答PDU 的元素。


二、Modbus 与 Modbus TCP

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如串行链路子网、以太网)和其它设备之间可以通信。Modbus有两种传输模式:ASCIIRTU

而Modbus TCP则是将Modbus数据信息封装在TCP协议报文中进行基于TCP/IP无差错端到端传输的协议。

在进行主从设备通信时有以下两种情况:

  1. 每一个连接到TCP/IP网络的设备都有一个单独的IP地址;
  2. 多个Modbus设备共享一个IP(大多这种情况)。

在上述的第二种情况中,Modbus TCP包括一个额外的地址叫做单元号(也就是从设备地址),当以太网卡接收到从远程主机传来的Modbus TCP信息时,单元号就被转化为Modbus RTU信息的从设备地址。本文主要以介绍Modbus TCP为主。


三、Modbus TCP数据帧

Modbus TCP默认使用502端口进行数据的访问。
Modbus TCP数据帧

MBAP报文头(MBAP、Modbus Application Protocol、Modbus应用协议)分4个域,共7个字节,如下所示:
MBAP报文头

1、事务处理标识符
事务处理标识符用于将请求与未来响应之间建立联系。因此,对 TCP 连接来说,在同一时刻,这个标识符必须是唯一的。有几种使用此标识符的方式:

  • -例如:可以作为一个带有计数器的简单“TCP 顺序号”,在每一个请求时增加计数器;
  • -也可以用作智能索引或指针,来识别事务处理的内容,以便记忆当前的远端服务器和未处理的请求。

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

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

对Modbus TCP/IP 来说,利用 IP 地址寻址 MODBUS 服务器;因此,MODBUS 单元标识符是无用的。必需使用值 0xFF。

Modbus功能码
共有3种类型分别为:
1、公共功能代码:已定义好的功能码,保证其唯一性,由Modbus.org认可;
Modbus功能码
2.、用户自定义功能代码有两组,分别为65~72和100~110,无需认可,但不保证代码使用的 唯一性。如变为公共代码,需交RFC认可;
3.、保留的功能代码,由某些公司使用在某些传统设备的代码,不可作为公共用途。


四、Modbus数据模型

Modbus数据模型
MODBUS模型实现的实例(每个设备根据其应用都有它自己的数据结构):

实例1:有4 个独立块的设备
下例实例示出了设备中的数据结构,这个设备含有数字量和模拟量、输入量和输出量。由于不同块中的数据不相关,每个块是相互独立。按不同MODBUS 功能码访问每个块。
Modbus数据模型示例1
实例2:仅有1 个块的设备
在这个实例中,设备仅有1 个数据块。通过几个MODBUS 功能码可能得到一个相同数据,或者通过16 比特访问或1 个访问比特。
Modbus数据模型示例2