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校验L | CRC校验H |
---|---|---|---|---|
8bit | 8bit | N*8bit | 8bit | 8bit |
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。
3.2 主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理;
0x01 | 0x06 | 00 01 | 00 17 | 98 04 |
---|---|---|---|---|
从机地址 | 功能码 | 数据地址 | 数据 | CRC校验 |
3.3 主机对从机读数据操作
0x01 | 0x03 | 00 01 | 00 01 | D5 CA |
---|---|---|---|---|
从机地址 | 功能码 | 数据地址 | 读取寄存器个数 | CRC校验 |
单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:
3.4 从机对主机返回内容
0x01 | 0x03 | 00 02 | 00 17 | F8 4A |
---|---|---|---|---|
从机地址 | 功能码 | 数据字节个数 | 两个字节数据 | CRC校验 |
推荐学习
CPU 上的通信口(Port0)支持 Modbus RTU 从站通信协议
串口通信之(二)数据上传到上位机 (modbus rtu slave)
Demo下载
来源:CSDN
作者:滴滴打车去
链接:https://blog.csdn.net/hsxy123123/article/details/103661080