此文章适用于已经对网络通讯:TCP/ip,UDP以及RTU/ASCII串口通讯有了解基础的。
如图示例是简单的Modbus的流程图:
一.首先了解什么是Modbus通讯协议?
Modbus 是一个【请求Request/应答Response协议】,包括【ASCII、RTU、TCP三种主流传输模式】等,是1979年开发出的一种工业通信协议,并没有规定物理层。也支持网络通讯,其实Modbus协议是七层网络协议【应用层】协议。
此协议定义了控制器能够认识和使用的【消息结构,即数据帧格式】,而不管它们是通过何种硬件方式进行通信的。所以硬件接口可以是RS-232、RS-422、RS-485和以太网等设备。
在Modbus网络通讯连接中TCP和RTU比ASCII常见,其中TCP的使用频率更高一些。
以上这些是我收集的一些比较官方化的解释,在我个人理解来说就是Modbus需要通过网络通讯Tcp/Udp或者串口通讯来使主(Master)/从(Slave)站建立链接然后主站发送报文到从站里面获取数据并返回给主站来的过程就是Modbus的简单运行步骤。这里提到了Modbus的主从站以及报文下面我都会详细解析一下。
1.ModBus会有主站和从站的概念:
Modbus是一种【单主站】的【主/从通信模式】。即Modbus网络上只能有一个主站存在。
主站在 Modbus网络上没有地址,从站的地址范围为 0 - 247。
其中 0 为广播地址,从站的实际地址范围为 1 - 247。
Modbus可以支持串口通讯,主站一个,从站一个。
Modbus可以支持网络通讯,比如:TCP。主站一个,从站多个。
主站(Master):例如软件:Modbus Poll,相当于通信的发起者,主要负责向从站发送请求或者命令,并接收从站的响应。通常在工作当中相当于一个PLC(可编程逻辑控制器,西门子,汇川...)
从站(Slave):例如软件:Modbus Slave,通常在工作当相当于传感器,执行器或者是其他设备
Modbus Poll与Modbus Slave:相当于没有硬件时,用来模拟通信的模拟器,实际生活,开发的工控软件充当主站,各种硬件设备充当的是从站。
如图示例:下载途径网上自己搜寻就行
使用步骤:
确保从站和主站在对应的连接方式(网络或串口链接)下能够正常分配自身的链接选项。
例如用户选择串口,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
串口通信以字节包的方式进行交互。在同样的波特率下,RTU比ASCII方式传送更多的数据。
2.报文:
如图是报文发送/接收的数据帧格式:
地址码 | 功能码 | 数据区 | CRC校验 |
1个字节 | 1个字节 | N个字节 | 两个字节 |
地址码:1个字节的从机地址码,0:广播地址 1-247:从机地址 248-255:保留
功能码:常用的就是01、02、03、04、05、06、15、16
数据区:数据区包含这么几部分:起始地址、数量、数据,这三项是大端模式
CRC校验:两个字节,小端模式,校验的数据范围为:地址码 功能码 数据区
功能码:
|
在从站软件中Slave Id:1 代表地址是1
function:代表的是线圈状态,功能码
当主站使用0x01,0x05,0x0F,这三个功能,从站要选择01 Coil Status
当主站使用0x02这个功能码时,从站选择02 Input Status
当主站使用0x03,0x06,0x10这三个功能码时,从站选择 03 Holding Register
当主站使用0x04这个功能码时,从站选择 04 Input Registers
默认情况下寄存器显示格式是Signed(16进制无符号二进制) 数据范围是-32768~~32768
01:读线圈状态 单个或多个,获取到当前线圈是(离散)输入还是输出
02:读离散输入状态,例如开关状态、传感器状态等
03:读保持寄存器(Holding Register):用于存储可读可写的数值数据,通常是设备的设置或控制参数
04:读输入寄存器:用于存储只读的数值数据,通常表示传感器或设备的输入值。
05:写单个线圈
06:写单个保持寄存器
15:写多个线圈
16:写多个保存寄存器
Modbus常用的数据格式(消息格式):
示例功能码01:读线圈状态
发送数据格式:
地址码 | 功能码 | 线圈起始地址 | 线圈数量 | CRC校验 |
---|---|---|---|---|
1字节 | 1字节 | 2字节(大端) | 2字节(大端) | 2字节(小端) |
返回数据格式:
地址码 | 功能码 | 数据长度 | 数据 | CRC校验 |
---|---|---|---|---|
1字节 | 1字节 | 1字节 | N字节(大端) | 2字节(小端) |
示例:线圈起始地址为0
主机发送:01 01 00 00 00 0A BC 0D
从机返回:01 01 02 00 00 B9 FC
二.Modbus协议的特点:
a.免费
b.Modbus支持多种接口。如RS-232\485等(串口),还可以在各种介质上传输,如双绞线、光纤、无线等。
c.Modbus的帧格式简单,通俗易懂好开发。
d.可靠性好。Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
三:Modbus常用的传输方式(传输模式)?
RTU/ASCII/TCP三种传输模式。其中RTU/ASCII是串口通讯,TCP是网络通讯。
RTU模式下,有主站与从站之分,一个主站可以连接多个从站,且主站有且只能有一个,从站至少一个。
TCP模式下,主要分为服务器与客户端。服务器(主站)一个。客户端(从站)至少一个。
RTU:Remote Terminal Unit远程终端设备
ASCII:American Standard Code for Information Interchange美国信息交换标准代码(美国国标码)
TCP:Transmission Control Protocol传输控制协议,是一种面向连接的、可靠的、基于字节流的【传输层】通信协议