对于Modbus tcp协议学习总结

Modbus=报文头(MBAP)+帧结构(PDU)

注意:据说RTU和TCP的差距就是效验码,具体我也没有操作,所以这里介绍的只有TCP相关内容。看这个章节的时候最好下载Modbus Slave(服务器)和Modbus Poll(客户端)两个软件测试了解一下Modbus。

其实Modbus TCP就是使用TCP协议传输数据,传输的数据是Modbus格式。

客户端传输数据时是以十六进制发送,每次发送两位;服务器接收数据时也是以十六进制的形式接收,每次接收两位。 如:0X00,两位十六进制数是8位二进制数。

了解以上部分在了解下面的就很容易。以下是正文:

1、MBAP(报文头)

事务标识符协议标识长度单元标识符
2字节2字节2字节1字节
00 0000 0000 0001
  • 事务标识符:可以解释为报文的序列号,由于我们测试使用的Modbus Poll客户端是一直发送数据,所以每发送一次数据标识符就加一。服务器接收时会把这个数据原封返回。
  • 协议表示:00 00代表TCP协议。
  • 长度:表示从单元标识符开始后面数据的长度。如:00 06表示后面有0X06个字节长度的数据。
  • 单元标识符:相当于设备的地址。一般为01。

2、PDU(帧结构)

2.1 PDU=功能码+数据。

功能码数据
1字节视功能而定

2.2 功能码:

  • modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。

        线圈:相当于开关,在MODBUS中可读可写,数据只有00和01。
        离散量:输入位,开关量,在MODBUS中只读。
        输入寄存器:只能从模拟量输入端改变的寄存器,在MODBUS中只读。
        保持寄存器:用于输出模拟量信号的寄存器,在MODBUS中可读可写。

  • 根据对象的不同,modbus的功能码有:

        0x01:读线圈
        0x05:写单个线圈
        0x0F:写多个线圈
        0x02:读离散量输入
        0x04:读输入寄存器
        0x03:读保持寄存器
        0x06:写单个保持寄存器
        0x10:写多个保持寄存器

2.3 报文的详细解读

这里只介绍读线圈和保持寄存器内容,以下数据全部位16进制数据。

1、 0x01:读线圈

请求:00 01 00 00 00 06 01 01 00 02 00 04(客户端)

  • 00 01:事务标识符
  • 00 00:Modbus TCP协议
  • 00 06:后面有00 06个字节数据
  • 01:单元标识符
  • 01:功能码(读线圈)
  • 00 02:开始读的数据的地址。从00 02开始读数据。
  • 00 04:注意这里不是读到00 04,而是从开始位置读00 04个数据。

这段报文就是请求读从 00 00 开始的 00 08 个数据。

回应:00 01 00 00 00 04 01 01 01 0E(服务器)

  • 00 01:事务标识符
  • 00 00:Modbus TCP协议
  • 00 04:后面有00 04个字节数据
  • 01:单元标识符
  • 01:功能码
  • 01:后面有01个字节的数据
  • 0E:表示所读地址的线圈全是2的位置是0,其余是1

说明:线圈是只有00和01两种格式,所以图中从2的位置开始读到的4位数据是:1110(二进制),转化为十六进制就是0E。

线圈读取

 2、0x03:读保持寄存器

请求:00 01 00 00 00 06 01 03 00 02 00 04(客户端)

  • 00 01:事务标识符
  • 00 00:Modbus TCP协议
  • 00 06:后面有00 06个字节数据
  • 01:单元标识符
  • 03:功能码(读保持寄存器)
  • 00 02:开始读的数据的地址。从00 02开始读数据。
  • 00 04:注意这里不是读到00 04,而是从开始位置读00 04个寄存器数据。

回应:00 01 00 00 00 0B 01 03 08 00 00 00 37 00 00 00 00(服务器)

  • 00 01:事务标识符
  • 00 00:Modbus TCP协议
  • 00 09:后面有00 09个字节数据
  • 01:单元标识符
  • 03:功能码
  • 08:后面有08个字节的数据,后面的数据每两位表示一个寄存器数据。
  • 00 00:第一个寄存器数据
  • 00 37:第二个寄存器数据,图中我写入的数据是55(十进制),这里是十六进制数据
  • 00 00:第三个寄存器数据
  • 00 00:第四个寄存器数据
读保持寄存器

 

其他寄存器和写数据请参考以下博主:

参考:https://blog.csdn.net/iknow_nothing/article/details/84292914icon-default.png?t=M276https://blog.csdn.net/iknow_nothing/article/details/84292914

作者连接:https://blog.csdn.net/qq_45339188/article/details/123575599 作者:布丁小站 感谢作者
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
支持Modbus TCP转Modubus RTU。RTU可以为RS232或者RS485。 支持RTU做主站或者Modubs TCP做主站。 支持多主机访问支持,最多连接100个TCP客户端。 支持所有的Modubus功能码和寄存器范围。 同时也可以做普通串口服务器使用。 ZLAN5142 概述 ZLAN5142 Modbus网关是上海卓岚信息科技有限公司开发的一款在Modbus TCPModbus RTU之间进行协议转化的转换器,其中Modbus RTU可以是RS485也可以是RS232接口。 ZLAN5142具备了强大的多主机访问支持功能和RS485总线冲突控制功能。所谓多主机功能是指,ZLAN5142作为Modbus TCP服务器时可以支持多达100个TCP客户端同时连接,多个TCP连接可以随机性的访问,ZLAN5142能够分别对不同的连接给出正确应答,保证数据稳定不丢包。相对于RS485总线只能够有一个主机进行访问,ZLAN5142实现了“多主机”功能。ZLAN5142实现了RS485总线的冲突控制,防止了多主机时的串口总线抢占问题。 另外,将ZLAN5142的“转化协议”选择为“无”,也可以当作普通的透明传输的串口服务器使用。但是不同于普通的串口服务器例如ZLAN5102,ZLAN5142即使作为普通串口服务器模式下也可以支持“多主机”功能,可解决多个计算机或主站如何同时监控一个串口设备的难题。 特点 支持Modbus TCP转Modubus RTU,RTU可以为RS232或者RS485。 支持RTU做主站或者TCP做主站。 支持多主机访问支持,最多连接100个TCP客户端。 支持1200~460800波特率。 支持RS485总线冲突调度机制,防止总线冲突。 支持所有的Modubus功能码和寄存器范围。 可作为普通的透传串口服务器使用,具备ZLAN5102相同功能。 小于1W的低功耗设计。 内嵌485防雷保护功能,适合室外485通信。 支持DNS,满足通过域名实现通信的要求。支持DHCP。 2KV网络浪涌保护。 外壳采用抗辐射的SECC板,保证在高电磁辐射区也能够正常工作。 规格 网络界面 以太网 10/100 Mbps, RJ45 保护 内建2KV电磁隔离 串口界面 界面 RS-232/485 串口数 1 校验位 None, Even, Odd, Space, Mark 数据位 5~9 停止位 1,2 流控 RTS/CTS,DTR/DCR, XON/XOFF 速率 1200bps~460800bps 软件特性 协议 TCP,HTTP,UDP,ICMP,ARP,IP,DNS,DHCP 虚拟串口平台 Windows 95/98/ME/NT/2000/XP/WIN7/WIN8 配置方式 Web浏览器、卓岚ZLVirCom、串口类AT命令 电器特性 电压输入 DC9~24V,100mA 机械特性 外壳材料 抗电磁材料SECC钢板 尺寸 长×宽×高=9.4cm×6.5cm×2.5cm 工作环境 工作温度,湿度 -45~85℃,5~95% RH 储存温度,湿度 -45~165℃,5~95% RH W

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值