ModBus协议的两大变体:ModBus RTU 与 ModBus TCP
Modbus=报文头(MBAP)+帧结构(PDU)7个字节 功能码:1个字节 注意:据说RTU和TCP的差距就是效验码
Modbus协议最基本的通信单位是帧,整个Modbus帧又被称之为应用数据单元(ADU),ADU中又包含了协议数据单元(PDU)用于传真正需要传输的数据
modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。
线圈:相当于开关,在MODBUS中可读可写,数据只有00和01。
离散量:输入位,开关量,在MODBUS中只读。
输入寄存器:只能从模拟量输入端改变的寄存器,在MODBUS中只读。
保持寄存器:用于输出模拟量信号的寄存器,在MODBUS中可读可写。
根据对象的不同,modbus的功能码有:
0x01:读线圈
0x05:写单个线圈
0x0F:写多个线圈
0x02:读离散量输入
0x04:读输入寄存器
0x03:读保持寄存器
0x06:写单个保持寄存器
0x10:写多个保持寄存器
传感器使用MODBUSRTU协议和RS485主机通信
1.功能码0x03–读保持寄存器
2.功能码0x04–读输入寄存器
3.功能码0x06–设置单个保持寄存器
4.功能码0x10–设置单个或多个保持寄存器
5.功能码0x80|x–出错提示,X为0x3,0x4,0x6,0x10分别代表返回
功能码0x03,0x04,0x06,0x10的错误信息
空气温湿度传感器
采集器
传感器
RS485 硬件层面的协议 电气标准 是物理层串行接口 定义了电气/信号传输方式和连接方式 RS485是一种串口通信协议。
modbus软件层面的协议 应用层同学协议 modbus协议包括RTU(最常用rtu), ascii都支持RS485总线通讯协议
RS485是物理层串行接口,硬件协议,它定义了电气特性、信号传输方式和连接方式。
Modbus是应用层通信协议,软件协议,它定义了一种常用的通信格式和规则,用于主设备和从设备之间进行数据交换。
Modbus支持多种通信模式,包括RTU(远程终端单元)、ASCII和TCP。其中,RTU和ASCII模式通常基于RS485物理接口,而TCP模式则允许使用以太网进行通信。
Modbus分为广播与单播两种请求模式。 在广播模式下,所有从站必须执行主站命令,而无需应答返回 在单播模式中,一个Modbus事务处理包含两个报文:一个来自主节点(主站)的请求,一个来自子节点(从站)的应答。
Modbus RTU 一种串行通讯方式,适用于232,485,422接口,数据以紧促二进制格式传输
Modbus ASCII 模式,串行通讯模式,数据采用ASCII编码,每8位数据转换成2个ascii字符进行传输占用带宽大
Modbus TCP 是将Modbus消息封装在TCP报文中,通过以太网传输
Modbus报文帧结构 一个报文就是一帧数据,一个数据帧就一个报文:指的是一串完整的指令数据,本质就是一串数据。
串口一般来说就是UART,它实际只定义了数据链路层的规范,也就是起始位、数据位、停止位。但是在不同的物理层又分为:TTL串口、RS232串口、RS485串口等。
UART是一种双向、异步的串行通信协议,而RS485是一种全双工、同步的串行通信协议。
UART和RS485的数据传输速率也有所不同。UART通信协议支持多种波特率,但是最常用的是115200bps,也就是每秒传输115200个字节的数据。而RS485通信协议支持多种波特率,但是最常用的是9600bps,也就是每秒传输9600个字节的数据
而modub tcp 则使用tcp以太网(rj45接口)
RJ45接口是一种常用于局域网的物理层接口,它使用8芯连接器,支持最高千兆位速率的数据传输。RJ45接口广泛应用于家庭网络、企业网络等场合,是现代网络连接不可或缺的一部分。
RJ45接口和普通网络接口最大的区别在于其传输速度和传输距离。RJ45接口支持更高速率的数据传输和更远的传输距离,而普通的网络接口则不能提供如此高的性能。
RS232 打印机,鼠标,有9根线 RX 接收线,TX 发送线 GND 地线 最大距离不超过15米,抗干扰能力差 ,速率低只有20kb/秒,只支持点对点通讯,所以诞生了rs485
RS485 点对多通讯 最多32个设备 232只能处理一个
MQTT
设备联网,老设备接入mqtt框架,上云进行远程监控,数据分析,为了适应现代化物联网体系架构,实现更广泛的设备互联,云端数据交互 满足设备管理,大数据分析等
Modbus Poll 是一个Modbus主机仿真器,它允许用户测试和调试Modbus从设备。这个软件支持多种协议,包括Modbus RTU、ASCII和TCP/IP。
它支持多设备监控,允许用户同时监视多个从设备或数据域。在Modbus RTU/ASCII模式下,Modbus Poll作为主站设备,发送命令给从站设备(如Modbus Slave),
并接收从站设备的数据响应。在Modbus TCP/IP模式下,Modbus Poll作为客户端,连接到服务器(如Modbus Slave),并发送命令和接收数据响应。
Slave ID:可以配置从机地址
Function:可以配置寄存器/线圈类型
Address:可以配置读/写的寄存器/线圈起始地址
Quantity:可以配置读/写的寄存器/线圈个数
RS485 MODBUS RTU串口通讯
真实案例 请求: 01 03 00 00 00 04 44 09
01 代表我要问寻的地址码是01
03功能码意思读取寄存器中的值
00 00 从00 00H这个寄存器起始地址 开始读
00 04 数据长度读取4个寄存器 一个寄存器(Register)通常是16位(2个字节)的数据单元。每个寄存器可以存储一个整数值,范围从0到65535。
44 09 CRC校验码
应答: 01 03 08 A3 D7 41 B6 66 66 41 CC 70 EE
01 代表应答的设备的地址码是01
03功能码意思读取寄存器中的值
08 字节数,代表有8个字节的数据客户以读取
A3 D7 41 B6:温度,float型 CD AB
66 66 41 CC:湿度 ,float型 CD AB
13 04 00 00 00 04 F2 BB
回应
13 04 08 43 72 E8 EC 41 99 46 AF 5D A7
43 72 E8 EC:格式ABCD 电导率: 242.90uS/cm
41 99 46 AF:格式ABCD 温度:19.1°C
设置
15 06 00 03 00 13 3B 13
回应
15 06 00 03 00 13 3B 13
TCP实例
假设我们有一个Modbus TCP设备,其IP地址为192.168.1.100,端口号为502。我们可以使用一个Modbus TCP客户端来与该设备进行通信。
例如,我们想要读取该设备上寄存器地址为0的16位整数值,我们可以发送以下Modbus TCP请求:
请求报文:
00 01 00 00 00 06 FF 03 00 00 00 04
解释:
00 01 -> 事务标识符,随意指定
00 00 -> 协议标识符,Modbus TCP协议标识符为0x0000
00 06 -> 报文长度,表示后面的报文长度为6个字节
FF -> 单元标识符,广播地址,也就是从站地址,根据服务器决定
03 -> 功能码,读取保持寄存器的功能码为0x03 类似post请求,可以存储修改,输入寄存器,0对应30001 0x04功能码为输入寄存器,类似get请求,只读为主 保持寄存器,0对应40001
00 00 -> 起始地址,要读取的寄存器地址为0 起始地址为0x13=19,对应地址为00020 (协议中的起始地址指的是索引,后面的地址指的是具体地址,对于任意一个存储区,索引都是从0开始的,但是对应的具体地址,
与存储区是相关的,输入寄存器,0对应30001;保持寄存器,0对应40001。)
00 04 -> 寄存器数量,要读取的寄存器数量为4
设备收到请求后,将返回以下响应:
响应报文:
00 01 00 00 00 03 FF 03 02
1506000300133B13
解释:
00 01 -> 事务标识符,与请求报文相同
00 00 -> 协议标识符,与请求报文相同
00 03 -> 报文长度,表示后面的报文长度为3个字节
FF -> 单元标识符,广播地址
03 -> 功能码,读取保持寄存器的功能码为0x03
02 -> 寄存器值,读取到的16位整数值为2
这就是一个简单的Modbus TCP实例,它演示了如何使用Modbus TCP协议读取一个设备的寄存器值。
国内设备基本上是A B C D顺序,国外设备基本上是B A D C顺序。低位优先字节交换。使用两个寄存器。
使用IEEE 754规范,如显示不正常可进行 字节顺序 交换位置即可。如下:
Float Big-endian 字节顺序:A B C D
Float Little-endian 字节顺序:D C B A
Float Big-endian byte swap 字节顺序:B A D C
Float Little-endian byte swap 字节顺序:C D A B
主机通过Modbus协议与从设备进行双向通信,实现数据的读取和控制。但是只有主机可以进行发送请求,从设备智能通过接收主机发来的数据进行响应,如果主机没有发送数据,总线上就没有数据进行通信。
广播模式下,主设备还可以使用地址 0 访问所有从设备,在这种模式下,从设备不对广播消息作出应答。
网络通信:Modbus TCP是基于TCP/IP协议的Modbus变种,使用以太网作为物理层传输介质,通过网络进行通信。
编码格式:Modbus TCP使用二进制编码表示数据,以字节为单位进行传输,速率较快,占用较少的带宽。
帧结构:Modbus TCP使用标准的TCP/IP帧结构,数据被封装在TCP报文中,可以通过以太网路由器进行转发。可靠性:由于使用TCP/IP协议,Modbus TCP具有良好的可靠性和容错性。
它可以利用TCP的确认和重传机制来确保数据的可靠传输。应用场景:Modbus TCP通常用于工业自动化和远程监控系统,可以实现在局域网或广域网上的设备之间进行高速、可靠的通信。
signed:有符号
unsigned:无符号
hex:十六进制
binary:二进制
big-endian:大端,将高序字节存储在起始地址(高位编址)
little-endian:小端,将低序字节存储在起始地址(低位编址
小端Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。(低低高高,低地址低字节,高地址高字节)
大端Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。(低高高低,低地址高字节,高地址低字节)
(一个字节(Byte)为8个Bit(位),一个英文字母通常占用一个字节,一个汉字通常占用两个字节) 一个字节,两个16进制码
为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算。
1. 采集板就一个吗?那些传感器请求回来的数据都是一个IP吗?
2. 报文
07 03 00 00 00 04 44 6F
回应
07 03 08 2D 07 3F 3F 42 00 43 A5 CA 27
2D 07 3F 3F:风速 0.7 格式 CDAB
42 00 43 A5:风向330.51 格式CDAB
02 03 00 00 00 02 c4 38
02 03 00 00 00 01 8439
02 03 04 00 00 01 99 08 c9
09 03 00 00 00 08 45 44
回应
09 03 10 CC CD 3D CC CC CD 3E 4C 99 9A 3E 99 00 00 3F 00 59 02
CC CD 3D CC 格式 CDAB 分钟雨量(0.1mm)
CC CD 3E 4C 格式 CDAB 小时雨量(0.2mm)
99 9A 3E 99 格式 CDAB 24小时雨量(0.3mm)
00 00 3F 00 格式 CDAB 累计雨量(0.5mm)
网站:http://114.117.199.127:8086/monitorCenter
admin:admin123
114.117.199.127 : 18086
流程:1.发设备序列号注册如:LC20841034R00001 2. 发送指令
12-冠层温度传感器-RS485
0C 03 00 00 00 02 C5 16
回应:
0C 03 04 8F 5C 41 D4 FC 3A
5C 41 D4 FC 格式 CDAB 26.56°c
13-冠层高度传感器-RS485
0D 03 00 00 00 02 C4 C7
回应:
0D 03 04 8F 5C 41 D4 EC FA
5C 41 D4 FC 格式 CDAB 26.56cm
18-水位传感器-RS485 有问题 G20873434543264626266
液位命令:12 03 00 04 00 02 B7 69
返回: 12 03 04 00 7B 10 49 65 55
00 7B:整数位 123
10 49:小数位 4169/65535=0.0636
结果为:123.0636mm
19-水体电导率传感器-RS485 http://114.117.199.127 没有问题 G20873434543264626266
13 04 00 00 00 04 F2 BB
回应
13 04 08 43 72 E8 EC 41 99 46 AF 5D A7 LC20841034R000010101
43 72 E8 EC:格式ABCD 电导率: 242.90uS/cm
41 99 46 AF:格式ABCD 温度:19.1°C
设置
15 06 00 03 00 13 3B 13
回应
15 06 00 03 00 13 3B 13
20-水体PH传感器-RS485 G20873434543264626266
14 04 00 08 00 06 F3 0F
回应
14 04 0C 41 C1 40 34 40 C3 1E 3C 42 58 BB E8 63 3C
41 C1 40 34:格式 ABCD 温度 24.15度
40 C3 1E 3C:格式 ABCD PH 6.09
42 58 BB E8:格式 ABCD 电极电压 54.18mV
21-水体氧化还原电位传感器-RS485
15 04 00 0A 00 02 52 DD
回应
15 04 04 43 78 5D 80 03 28
43 78 5D 80:格式ABCD 氧化还原电位 248.36mV
22-土壤PH传感器-RS485
16 04 00 08 00 06 F2 ED
回应
16 04 0C 41 C1 40 34 40 C3 1E 3C 42 58 BB E8 E1 3D
41 C1 40 34:格式 ABCD 温度 24.15度
40 C3 1E 3C:格式 ABCD PH 6.09
42 58 BB E8:格式 ABCD 电极电压 54.18mV
23-土壤氧化还原电位传感器-RS485 G20873434543264626266
17 04 00 0A 00 02 53 3F
回应
17 04 04 43 78 5D 80 20 E81.1.15.数据中心z
43 78 5D 80:格式ABCD 氧化还原电位 248.36mV