Modbus协议技术总结

1 概念

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
Modbus比其他通信协议使用的更广泛的主要原因有:

  • 公开发表并且无版权要求;
  • 易于部署和维护;
  • 对供应商来说,修改移动本地的比特或字节没有很多限制;

Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和远程终端控制系统(RTU)。

2 协议

2.1 协议介绍

当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。
Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。Modbus有国际标准,也有国家标准,内容是完全一样的。在标准钟支持2种物理链路:一是基于RS485(RS232)的串行链路;二是基于以太网的TCP/IP链路。事实上,Modbus协议作为一种应用层协议对物理键子并没有特别的要求,光纤、无线等都是可以实现的。
Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。在TCP方式时被称为服务器和客户端。这种称呼只是叫法不同,但在本质上是没有区别。
在这里插入图片描述

2.2 功能码

代码(HEX)含义操作
0x01读取动作信息读取一组动作线圈状态
0x02读取输入信息读取一组离散输入状态
0x03读保持寄存器数值读取一个或更多保持寄存器值
0x04读输入寄存器数值读取一个或更多输入寄存器值
0x05写单个线圈对单个的读写型的状态量进行写入
0x06写单个寄存器对单个的读写型的寄存器量进行写入
0x0F写多个线圈对多个的读写型的状态量进行写入
0x10写多个寄存器对多个的读写型的寄存器量进行写入

2.3 校验码

Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。

3 报文实例

3.1 MODBUS-RTU报文模型

设备地址功能码数据格式CRC校验LCRC校验H
8bit8bitN*8bit8bit8bit

一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。

3.2 主机对从机写数据操作

如果单片机接收到一个报文那么就对报文进行解析执行相应的处理;

0x010x0600 0100 1798 04
从机地址功能码数据地址数据CRC校验

3.3 主机对从机读数据操作

0x010x0300 0100 01D5 CA
从机地址功能码数据地址读取寄存器个数CRC校验

单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:

3.4 从机对主机返回内容

0x010x0300 0200 17F8 4A
从机地址功能码数据字节个数两个字节数据CRC校验

推荐学习

CPU 上的通信口(Port0)支持 Modbus RTU 从站通信协议

串口通信之(二)数据上传到上位机 (modbus rtu slave)

Demo下载

基于Modbus Rtu java 串口通信从机 Demo 实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值