当前位置:网站首页 > 编程语言 > 正文

104协议和modbus协议区别(104协议和modbus协议区别 dlt)



MODBUS RTU协议是一种开放的、主要基于串行链路(RS232C或RS485)的通信协议,也有在TCP或者UDP方式下使用这种标准通信协议的,名称中的RTU是英文 “Remote Terminal Unit"的缩写,即"远程终端设备”,支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等,目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。

在Modbus RTU协议里,通讯的双方被称为“主站”和“从站”。主站会向从站发出查询或者写入命令,然后从站被动接收命令然后根据功能码和寄存器号反馈相应的数据结果或者执行写入命令,一个485网络里理论上最多可以挂254个从站,实际应用中考虑线路损耗和干扰一般不会超过100个,否则建议用以太网通讯。

Modbus中常用的功能码有8个,可以分为位操作和字操作两类:
读操作:
01(读线圈寄存器 位操作)
02(读离散量输入寄存器 位操作)
03(读保持寄存器 字操作)
04(读输入寄存器 字操作)
写操作:
05(写单个线圈寄存器 位操作)
06(写单个保持寄存器 字操作)
0F(写多个线圈寄存器 位操作)
10(写多个保持寄存器 字操作)









Modbus-RTU报文示例

1 读取线圈 0x
请求报文:

Tx:01 01 00 00 00 0A BC 0D

01:从站地址

01:功能码

00 00:读取线圈的起始地址0x0000

00 0A:线圈的个数,为10个

BC 0D:CRC校验值

正常响应报文:

Rx:01 01 02 03 01 78 CC

01:从站地址

01:功能码

02:后面线圈数据字节数,线圈为单个比特量,其数据仍按字节进行传输。如果数量不是8的倍数,则用零填充数据字节中剩余的位。

03 01:10个线圈的值,第一个字节03(2#0000 0011)对应线圈0x0000~0x0007的值,0x0000=1、0x0001=1,其他为0,第二个字节01(2#0000 0001)对应线圈0x0008~0x0009的值,0x0008=1

78 CC:CRC校验值

异常响应报文:

Rx:01 81 02 C1 91

01:从站地址

81:异常响应功能码(为请求功能码+0x80)

02:异常码,表示非法的数据地址

C1 91:CRC校验值

2 写入单个线圈 0x
请求报文:

Tx:01 05 00 00 FF 00 8C 3A

01:从站地址

05:功能码

00 00:线圈的地址0x0000

FF 00:置位线圈写入FF,复位线圈写入00

8C 3A:CRC校验值

正常响应报文:

Rx:01 05 00 00 FF 00 8C 3A

从站返回相同报文

异常响应报文:

Rx:01 85 02 C3 51

01:从站地址

85:异常响应功能码

02:异常码,表示非法的数据地址

C3 51:CRC校验值

3 写入多个线圈 0x
请求报文:

Tx:01 0F 00 00 00 0A 02 41 02 54 A9

01:从站地址

0F:功能码

00 00:线圈的起始地址0x0000

00 0A:写入线圈的个数,为10个

02:后面写入的值的字节数

41 02:写入的值,第一个字节41(2#0100 0001)对应线圈0x0000~0x0007的值,0x0000=1、0x0006=1,其他为0,第二个字节02(2#0000 0010)对应线圈0x0008~0x0009的值,0x0009=1

54 A9:CRC校验值

正常响应报文:

Rx:01 0F 00 00 00 0A D5 CC

01:从站地址

0F:功能码

00 00:线圈的起始地址

00 0A:写入线圈的个数,为10个

D5 CC:CRC校验值

异常响应报文:

Rx:01 8F 02 C5 F1

01:从站地址

8F:异常响应功能码

02:异常码,表示非法的数据地址

C5 F1:CRC校验值

4 读输入离散量 1x
请求报文:

Tx:01 02 00 00 00 05 B8 09

01:从站地址

02:功能码

00 00:输入离散量的起始地址1x0000

00 05:读取输入离散量的个数,为5个

B8 09:CRC校验值

正常响应报文:

Rx:01 02 01 05 61 8B

01:从站地址

02:功能码

01:后面输入离散量数据字节数,输入离散量为单个比特量,其数据仍按字节进行传输。如果数量不是8的倍数,则用零填充数据字节中剩余的位。

05:5个输入离散量数据的值,对应1x0000~1x0004的值,0x0000=1、0x0002=1,其他为0

61 8B:CRC校验值

异常响应报文:

Rx:01 82 02 C1 61

01:从站地址

82:异常响应功能码

02:异常码,表示非法的数据地址

C1 61:CRC校验值

5 读输入寄存器 3x
请求报文:

Tx:01 04 00 00 00 02 71 CB

01:从站地址

04:功能码

00 00:输入寄存器的起始地址3x0000

00 02:读取输入寄存器的个数,为2个

71 CB:CRC校验值

正常响应报文:

Rx:01 04 04 00 7B 01 C8 8B 9B

01:从站地址

04:功能码

04:后面输入寄存器数据字节数,一个输入寄存器为2个字节

00 7B 01 C8:2个输入寄存器数据的值,对应3x0000~3x0001的值,0x0000=16#007B、0x0001=16#01C8

8B 9B:CRC校验值

异常响应报文:

Rx:01 84 02 C2 C1

01:从站地址

84:异常响应功能码

02:异常码,表示非法的数据地址

C2 C1:CRC校验值

6 读保持寄存器 4x
请求报文:

Tx:01 03 00 02 00 02 65 CB

01:从站地址

03:功能码

00 02:保持寄存器的起始地址4x0002

00 02:读取保持寄存器的个数,为2个

65 CB:CRC校验值

正常响应报文:

Rx:01 03 04 00 6F 00 DE 4A 76

01:从站地址

03:功能码

04:后面保持寄存器数据字节数,一个保持寄存器为2个字节

00 6F 00 DE:2个保持寄存器数据的值,对应4x0002~4x0003的值,4x0002=16#006F、4x0003=16#00DE

4A 76:CRC校验值

异常响应报文:

Rx:01 83 02 C0 F1

01:从站地址

83:异常响应功能码

02:异常码,表示非法的数据地址

C0 F1:CRC校验值

7 写入单个保持寄存器 4x
请求报文:

Tx:01 06 00 00 FF 00 8C 3A

01:从站地址

06:功能码

00 00:保持寄存器的地址0x0000

00 7B:写入的值,2个字节

C9 E9:CRC校验值

正常响应报文:

Rx:01 06 00 00 FF 00 8C 3A

从站返回相同报文

异常响应报文:

Rx:01 86 02 C3 A1

01:从站地址

86:异常响应功能码

02:异常码,表示非法的数据地址

C3 A1:CRC校验值

8 写入多个保持寄存器 4x
请求报文:

Tx:01 10 03 E7 00 02 04 00 7B 01 C8 D8 EE

01:从站地址

10:功能码

03 E7:多个保持寄存器的起始地址4x0999

00 02:写入保持寄存器的个数,为2个

04:后面写入的值的字节数

00 7B 01 C8:写入的值,第一个保持寄存器4x0999写入16#007B,第二个保持寄存器4x1000写入16#01C8

D8 EE:CRC校验值

正常响应报文:

Rx:01 10 03 E7 00 02 F1 BB

01:从站地址

10:功能码

03 E7:多个保持寄存器的起始地址

00 02:写入保持寄存器的个数,为2个

F1 BB:CRC校验值

异常响应报文:

Rx:01 90 02 CD C1

01:从站地址

90:异常响应功能码

02:异常码,表示非法的数据地址

CD C1:CRC校验值

9 异常响应中其他常见的异常码:

01:非法的功能码,表示接收到的功能码从机不支持

03:非法的数据值,表示接收到主机发送的数据值超出从机相应地址的数据范围

04:读取数据失败,表示从机执行请求的操作时,产生不可重新获得的差错

通信方式

Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。
主站请求:功能码+数据
从站正常响应:请求功能码+响应数据
从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型
需要超时管理机制,避免无期限的等待可能不出现的应答
IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。




通信过程

connect 建立TCP连接
准备Modbus报文
使用send命令发送报文
在同一连接下等待应答
使用recv命令读取报文,完成一次数据交换
通信任务结束时,关闭TCP连接




TCP与RTU两种协议的区别

对于Modbus-TCP在数据模型和功能调用上都是相同的,只有封装方式是不同的。Modbus TCP协议是一个运行在TCP/IP网络连接中的一种协议,与传统的串口方式相比,MODBUS TCP插入一个标准的MODBUS报文头到 TCP报文中,不再带有差错校验和地址域,如图1所示。MBAP为报文头,长度为7字节,组成如下表1。

表1

内容 解释 事务处理标识(2Bytes) 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文 协议标识符(2Bytes) 00 00表示ModbusTCP协议 长度(2Bytes) 表示接下来的数据长度,单位为字节。 单元标识符(1Byte) 可以理解为设备地址。

PDU帧结构由:功能码+数据组成。功能码占一个1字节,后面的数据长度根据功能码的不同,长度也不同。

Modbus-TCP报文示例

请求读取多个输入寄存器:
数据请求:请求读取输入寄存器,

MBAP报文头:
事务处理标识:0x9796
协议标识符:0x0000
长度:0x0006
单元标识符(终端的一种标识):0x04



PDU(协议数据单元):
功能码:0x04(读取输入寄存器)
数据:0x007D(寄存器起始地址)
0x007D(要读取的寄存器数量)


数据返回

请求写入多个保持寄存器:
数据请求:请求写入多个保持寄存器

MBAP报文头:
事务处理标识:0x9779
协议标识符:0x0000
长度:0x0009
单元标识符(终端的一种标识):0x04



PDU(协议数据单元):
功能码:0x10(写入保持寄存器)
数据:0x0000(寄存器起始地址)
0x0001(要读取的寄存器数量)
0x02(写入的字节个数)
0x0001(写入的寄存器值)




到此这篇104协议和modbus协议区别(104协议和modbus协议区别 dlt)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 小学一年级数学题圈一圈算一算(一年级数学下册圈一圈算一算)2025-09-30 16:18:09
  • iPad显示无法连接到这个网络,换一个网络能连(ipad无法连接到网络怎么回事)2025-09-30 16:18:09
  • 组合型数组 非组合型数组(组合数定义)2025-09-30 16:18:09
  • yuv444和yuv422哪个画质更好(yuv420和yuv422 区别)2025-09-30 16:18:09
  • 国内换国外驾照怎么换(国外驾照换国内驾照国外驾照还能用吗)2025-09-30 16:18:09
  • 怎么建立dbf文件(怎么建立一个dbf文件)2025-09-30 16:18:09
  • lo回环地址(回环地址有什么用)2025-09-30 16:18:09
  • jflash(jfla是什么意思)2025-09-30 16:18:09
  • nvme接口能接sata吗(nvme接口能不能向下兼容sata3)2025-09-30 16:18:09
  • sileo最好用的中文源(sileo中文源怎么样)2025-09-30 16:18:09
  • 全屏图片