Modbus协议讲解
- 前言
- 一、串口通讯简介
- 二、RS485串口通讯
- RS485通讯标准的由来(了解)
- RS485特点
- RS-485终端电阻的选择
- 三、Modbus协议
- 四、Modbus报文范例
前言
本篇是我参加工作培训时,作为记录笔记用的,因此写的方式不会像前面那些系列一样写的很详细,因为一个通讯协议的内容都会比较多,我更多会写经常看到和实用的,不过在文末,我也会推荐大佬的详细文章或者一些书籍供大家参考。
一、串口通讯简介
先要明确一点的就是,Modbus协议是属于OSI通讯模型中的数据链路层和应用层,而在物理层需要使用串口去实现。
-
串口通讯,是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。
-
串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。
-
串口按电气标准及协议来划分,包括RS-232-C、RS-422、RS485等
具体内容可以看我之前的文章:
【STM32】标准库与HAL库对照学习教程八–串口通信详解
将通信基本概念看完就行了
二、RS485串口通讯
RS485通讯标准的由来(了解)
1969年,电子工业协会 (EIA) 制订并发布了RS232串行数据接口标准,并命名为EIA-232-E
RS-422由RS-232发展而来,它弥补了RS-232通信距离短、速率低等缺点,全名为TIA/EIA-422-A标准
1983年,电子工业协会 (EIA) 在RS-422基础上制定了RS-485标准,后命名为TIA/EIA-485-A标准
简单来说RS485是工业上的串口使用标准,Modbus协议就是在RS485基础上运行。
RS485特点
- 工作方式:差分
- 通讯类型:主从通讯
- 数据传输方式:半双工
- 节点数:32、128、256
- 最大传输长度:1200m
- 最大传输速率:10Mpbs
- 数据格式:
1位起始位、8位数据位、1位停止位、无校验(常用)
1位起始位、8位数据位、1位停止位、奇校验
1位起始位、8位数据位、1位停止位、偶校验
RS-485终端电阻的选择
终端电阻就是在线型网终两端(相距最远的两个通信端口上) ,并联在一对通信线上的电阻,示意图如下:
作用:根据传输线理论终端电阻可以吸收网终上的反射波,有效地增强信号强度
电阻选择:
终端电阻要依照网络所使用的线缆种类的特性阻抗来确定,普通双绞线的 特性阻抗为120Ω.因此RS-485网络的终端电阻也选择120Ω。
在RS-485网络通讯距离较近(<300m)时,一般不使用终端电阻。
三、Modbus协议
简介
Modbus是一种串行通信协议,是Modicon公司 (现在的施耐德电气SchneiderElectric) 于1979年为使用可编程逻辑控制器(PLC) 通信而发表。
Modbus已经成为工业领域通信协议的业界标准(Defacto) ,并且现在是工业电子设备之间常用的连接方式。
分类:
按一般维度分为Modbus Rtu、Modbus Ascll、Modbus TCP三种模式。这三种模式中最常用的是Modbus Rtu
Modbus消息帧格式:
从机地址+功能码+数据+16位CRC校验
从机地址 | 功能码 | 数据 | CRC |
---|---|---|---|
1字节 | 1字节 | n字节 | 2字节 |
主/从协议原理:
Modbus 串行链路协议是一个主-从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线。
Modbus通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。
子节点之间从不会互相通信。主节点在同一时刻只会发起一个Modbus 事务处理。
- 单播
- 主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个’应答’)。
- 每个子节点必须有唯一的地址 (
1 到 247
),这样才能区别于其它节点被独立的寻址。
- 广播
- 主节点向所有的子节点发送请求。对于主节点广播的请求没有应答返回。广播请求一般用于写命令。
- 所有设备必须接受广播模式的写功能。
地址 0
是专门用于表示广播数据的。
常用功能码:
我这边经常用的是0x03读、0x06写单、0x10写多
四、Modbus报文范例
推荐文章:详解Modbus通信协议—清晰易懂
实践使用文章:普中Modbus开发攻略