Modbus TCP报文详解

一.Modebus协议构成

        Modbus TCP 通信协议包括3部分:报文头,功能码,数据。

Modbus TCP报文详解_第1张图片

         Modbus TCP/IP协议最大数据帧为260个字节。

二.MBAP报文头构成

        报文头一共占7个字节,他们分别是有事务处理标识符(2个字节),协议标识符(2个字节),长度(2个字节),单元标识符(1个字节)构成。

Modbus TCP报文详解_第2张图片

 三.功能代码

        功能代码占1个字节,主机给从机发送Modbus协议,从机根据功能码的不同完成不同的操作。

        再讲解功能码之前,先要了解一下寄存器。

     1.寄存器

        寄存器一共可以分成4种,分别是离散量输入,线圈,输入寄存器,保持寄存器。四种寄存器中又可以划分成两大类分别是:

        1)位寄存器(每个寄存器占1个字节):离散量输入  线圈

         工业上主要用于控制IO设备。

       线圈寄存器,类比为开关量,每一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。

        离散输入寄存器,离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。

        2)字寄存器(每个寄存器占2个字节):输入寄存器  保持寄存器

        工业上主要用于存储工业设备的值。

        保持寄存器,这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写

        输入寄存器,这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值

      2.功能代码

        根据四种不同的寄存器,一共可以分为8种功能代码。

        Modbus TCP报文详解_第3张图片

 【1】读线圈状态:01H

Modbus TCP报文详解_第4张图片

 【2】读离散量输入线圈:02H

Modbus TCP报文详解_第5张图片

【3】读保持寄存器:03H

Modbus TCP报文详解_第6张图片

【4】读输入寄存器:04H

Modbus TCP报文详解_第7张图片

总结:读线圈(寄存器)询问报文模版:报文头  功能码  起始地址  读取个数

                                        应答报文模版:报文头  功能码  字节计数  数据

 【5】写单个线圈:05H

Modbus TCP报文详解_第8张图片

 从机回复的报文形式和主机发送的一模一样,只是为了告诉主机已经收到,所以这里不再赘述。

【6】写单个保持寄存器:06H

Modbus TCP报文详解_第9张图片

  从机回复的报文形式和主机发送的一模一样,只是为了告诉主机已经收到,所以这里不再赘述。

【7】写多个线圈:0FH

Modbus TCP报文详解_第10张图片

【8】写多个保持寄存器:10H

Modbus TCP报文详解_第11张图片

 总结:1)写单个线圈或保持寄存器

                模版:报文头  功能码  地址  写入的状态或数据(线圈就是改变通断状态,保持寄存器是写入数据)

             2)写多个线圈或保持寄存器

                模版:报文头  功能码  地址  个数  字节计数  数据

你可能感兴趣的:(tcp/ip,网络,网络协议)