您当前的位置:首页 > 精选知识 > 正文

Modbus(RTU通讯协议详解与实例演示)

Modbus(RTU通讯协议详解与实例演示)

Modbus通信协议详解

Modbus RTU通信协议在数据通信中采用主从式响应。仅主机(PC、HMI等。)可以通过唯一的从机地址发起请求,从机(终端设备)可以根据主机请求做出响应,即半双工通信。这个协议只允许主设备发起请求,从设备被动响应,所以从设备不会主动占用通信线路造成数据冲突。

类似Modbus RTU协议的主从响应协议有西门子的PPI和电表常用的DL/T645-2007。

一、modbus协议格式信息传输是异步的,通信使用十六进制。信息框格式:

地址代码

操作码

数据区

CRC校验码

1字节

1字节

n字节

2字节

地址码地址码是每个通信信息帧的第一个字节,一般支持1到247。有些设备还支持0地址,用来接收主机的广播数据。每个从机在总线上必须有唯一的地址,只有与主机发送的地址码匹配的从机才能响应返回的数据。

功能码功能码是每个通信信息帧的第二个字节。主机发送,通过功能代码告诉从机应该执行什么操作。

八个常用功能代码:

操作码

定义

操作

01H

阅读线圈

读取一个或多个连续线圈状态

05H

写一个单线圈

指定操作位置的线圈状态

0FH

写入多个线圈

操作多个连续线圈状态

02H

读取离散输入

读取一个或多个连续离散输入状态

04H

读取输入寄存器

读取一个或多个连续输入寄存器的数据

03H

读取和保持寄存器

读取一个或多个保持寄存器的数据

06H

写一个单保持寄存器。

将两个十六进制数据写入相应的位置。

10小时

写保持寄存器

将4*N个十六进制数据写入N个连续保持寄存器

数据区数据区因功能代码和数据方向不同而不同。这些数据可以是不同的组合,例如“在寄存器地址头部读取的寄存器数量”、“寄存器地址的操作数据”和“在寄存器地址头部注册的寄存器数量的数据长度数据”。不同功能代码的数据区在“功能代码分析”中有详细说明。

Modbus CRC校验Modbus RTU协议是常用的,工业现场对数据传输的稳定性和正确性有较高的要求,所以CRC校验保证了数据传输的正确性和完整性。

二、错误反馈地址和CRC校验错误不会从从机接收数据反馈,其他错误会向主机返回错误代码。将0X80加到数据的第二位表示请求有错误(非法功能代码、非法数据值等。).错误数据帧如下:

地址代码

操作码

错误代码

CRC校验码

1字节

1字节

1字节

2字节

常见错误代码如下:

价值

名字

解释

01H

的非法功能代码

不支持此功能代码操作寄存器。

02H

的非法注册地址

器件访问禁止访问的寄存器。

03H

的非法数据值

写入不支持的参数值。

04H

从属故障

设备运转不正常。

三、当通信命令从主机发送到从机时,匹配主机发送的地址码的从机接收通信命令。如果CRC校验正确,它将执行相应的操作,然后将执行结果(数据)返回给主机。返回的信息包含地址码、功能码、执行数据和CRC校验码。如果地址不匹配或CRC校验错误,将不会返回任何信息。

四、功能代码分析功能代码01H:读取线圈例如,如果主机想要读取从机地址为01H、起始线圈地址为00H的线圈的状态,主机发送:

主机发送

发送数据(十六进制)

地址代码

01

操作码

01

起始线圈地址

高位字节

00

低位字节

00

弹簧圈数

高位字节

00

低位字节

01

CRC校验

低位字节

软驱

高位字节

加拿大

如果从寄存器00H线圈闭合,从寄存器返回:

奴隶回归

发送数据(十六进制)

地址代码

01

操作码

01

字节数

01

线圈状态

01

CRC校验码

低位字节

90

高位字节

48

模拟演示:

代码0FH:写多个线圈。例如,如果主机想要控制四个线圈状态,从机地址为01H,起始线圈地址为00H,主机发送:

主机发送

发送数据(十六进制)

地址代码

01

操作码

0F

起始线圈地址

高位字节

00

弹簧圈数

高位字节

00

低位字节

04

写入的字节数

01

控制方式

00(全部打开),0F(全部关闭)

CRC校验

低位字节

xx

高位字节

xx

代码0FH运行,从机返回:

奴隶回归

发送数据(十六进制)

地址代码

01

操作码

0F

起始线圈地址

高位字节

00

低位字节

00

弹簧圈数

高位字节

00

低位字节

04

CRC校验

低位字节

54

高位字节

08

模拟演示:

代码02H:读取离散输入。例如,主机希望读取四个输入状态,从机地址为01H,初始离散地址为00H。主发送:

主机发送

发送数据(十六进制)

地址代码

01

操作码

02

起始离散数量地址

高位字节

00

低位字节

00

读取数量

高位字节

00

低位字节

04

CRC校验

低位字节

79

高位字节

补体第九成分

如果从机头地址00H的所有4个离散输入检测到输入,从机返回:

奴隶回归

发送数据(十六进制)

地址代码

01

操作码

02

字节数

01

离散输入状态

0F

CRC校验码

低位字节

E1

高位字节

8C

模拟演示:

代码04H:读取输入寄存器。例如,如果主机想要读取从机地址为01H、起始寄存器地址为02H的输入寄存器的数据,主机发送:

主机发送

发送数据(十六进制)

地址代码

01

操作码

04

起始寄存器地址

高位字节

00

低位字节

02

寄存器数量

高位字节

00

低位字节

01

CRC校验

低位字节

90

高位字节

得一个例子

如果从机输入寄存器02H中的数据为3344H,从机返回:

奴隶回归

发送数据(十六进制)

地址代码

01

操作码

04

字节数

02

05H寄存器数据

高位字节

33

低位字节

四十四

CRC校验码

低位字节

广告

高位字节

第三子代

模拟演示:

代码03H:读取保持寄存器。例如,主机想要读取两个保持寄存器数据,从机地址为01H,起始寄存器地址为05H,主机发送:

主机发送

发送数据(十六进制)

地址代码

01

操作码

03

起始寄存器地址

高位字节

00

低位字节

05

寄存器数量

高位字节

00

低位字节

02

CRC校验

低位字节

D4

高位字节

得一个例子

如果从机将寄存器05H和06H的数据保存为1122H和3344H,则从机返回:

奴隶回归

发送数据(十六进制)

地址代码

01

操作码

03

字节数

04

05H寄存器数据

高位字节

11

低位字节

22

06H寄存器数据

高位字节

33

低位字节

四十四

CRC校验码

低位字节

4B

高位字节

溴化六烃季胺

模拟演示:

代码06H:写入单个保持寄存器。例如,主机将9988H数据写入从机地址为01H、寄存器地址为0050H的寄存器,主机发送:

主机发送

发送数据(十六进制)

地址代码

01

操作码

06

寄存器地址

高位字节

00

低位字节

50

写入值

高位字节

99

低位字节

88

CRC校验

低位字节

E3

高位字节

急诊科

从机返回与主机请求相同的内容;

功能代码10H:写入多个保持寄存器。例如,主机希望将数据0005H和2233H保存到两个寄存器中,从机地址为01H,起始寄存器地址为0020H。主发送:

主机发送

发送数据(十六进制)

地址代码

01

操作码

10

起始寄存器地址

高位字节

00

低位字节

20

寄存器数量

高位字节

00

低位字节

02

写入的字节数

04

0000小时

要写入的寄存器

高位字节

00

低位字节

05

0001H

要写入的寄存器

高位字节

22

低位字节

33

CRC校验

低位字节

B9

高位字节

03

功能代码10H操作,从机返回:

奴隶回归

发送数据(十六进制)

地址代码

01

操作码

10

起始寄存器地址

高位字节

00

低位字节

20

寄存器数量

高位字节

00

低位字节

02

CRC校验

低位字节

40

高位字节

02

模拟演示:

审计唐子红

标签:数据主机地址


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 华硕平板如何恢复出厂设置?华硕平板电脑二合一tf810c装系统后进不了桌面,一直BIOS

下一篇: htc m8t(HTC m8t 中国移动4G手机,能用联通3G或4G吗)



推荐阅读