1、Modbus通信协议介绍

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

Modbus通信协议

图1.1

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

       Modbus通信栈见图1.2所示。

Modbus通信协议

图1.2

       Modbus缩略语:

ADU   应用数据单元

HDLC  高级数据链路控制

HMI   人机界面

IETF   因特网工程工作组

I/O     输入/输出设备

IP      互连网协议

MAC   介质访问控制

MB     MODBUS 协议

MBAP  MODBUS 协议

PDU    协议数据单元

PLC    可编程逻辑控制器

TCP    传输控制协议

2、Modbus通信协议描述

       Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU),特定总线或网络上的Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域。

       Modbus通用帧见图1.3所示。

Modbus通信协议

图1.3

       启动Modbus事务处理的客户机创建Modbus应用数据单元。功能码向服务器指示将执行哪种操作。

       Modbus协议建立了客户机启动的请求格式。

       用一个字节编码Modbus数据单元的功能码域。有效的码字范围是十进制1-255(128-255是异常响应保留)。当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。

       从客户机向服务器设备发送的 报文数据域包括附加信息,服务器使用这个信息执行功能码定义的操作。这个域还包括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。

       在某种请求中,数据域可以是不存在的(0长度),在此情况下服务器不需要任何附加信息。功能码仅说明操作。

如果在一个正确接收的MODBUS ADU中,不出现与请求MODBUS功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。如果出现与请求 MODBUS 功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。

当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应)。对于一个正常响应来说,服务器仅对原始功能码响应,modbus事务处理见图1.4。

Modbus通信协议

图1.4 modbus事务处理(无差错)

对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻辑1,异常响应见图1.5所示。

Modbus通信协议

3、Modbus功能码定义

       modbus功能码定义见图1.6所示。

Modbus通信协议

图1.6

4、以功能码03为例进行介绍

       在远程设备通信中,使用03功能码读取保存寄存器连续块的内容,请求PDU说明了起始寄存器地址和寄存器数量,从零开始寻址寄存器,因此寻址寄存器1-16为0-15.

       将响应报文中的寄存器数据分成每个寄存器有两个字节,每个字节中直接地调整二进制内容,对于每个寄存器,第一个字节包括高位比特,第二个字节包括低位比特。

请求

功能码

1个字节

0x03

起始地址

2个字节

0x0000至0xffff

寄存器数量

2个字节

1-125(0x7D)

 

响应

功能码

1个字节

0x03

字节数

1个字节

2xN

寄存器值

Nx2个字节

 

N=寄存器的数量

 

错误

差错码

1个字节

0x83

异常码

1个字节

01/02/03/04

 

以读取寄存器108-110为例

请求

响应

域名

(十六进制)

备注

域名

(十六进制)

备注

功能码

03

 

功能

03

···

高起始地址

00

0x006B

字节数

06

2*3个字节

低起始地址

6B

寄存器值Hi(108)

02

0x022B

高寄存器编号

00

0x0003

寄存器值Lo(108)

2B

低寄存器编号

03

寄存器值Hi(109)

00

0x0000

 

寄存器值Lo(109)

00

寄存器值Hi(110)

00

0x0064

寄存器值Lo(110)

64

 

读保持寄存器流程框图见图1.7所示

       Modbus通信协议

图1.7

相关文章: